DfType (DfaCallArguments arguments, DfaMemoryState state, PsiMethod method) { PsiType returnType = method.getReturnType(); if (returnType == null) return DfType.TOP; List<Object> args = new ArrayList<>(); Object qualifierValue = null; if (!method.hasModifierProperty(PsiModifier.STATIC)) { qualifierValue = getConstantValue(state, arguments.myQualifier); if (qualifierValue == null) return DfType.TOP; } for (DfaValue argument : arguments.myArguments) { Object argumentValue = getConstantValue(state, argument); if (argumentValue == null) return DfType.TOP; if (argumentValue instanceof Long) { long longValue = ((Long)argumentValue).longValue(); if (longValue >= Integer.MIN_VALUE && longValue <= Integer.MAX_VALUE) { argumentValue = (int)longValue; } } args.add(argumentValue); } Method jvmMethod = toJvmMethod(method); if (jvmMethod == null) return DfType.TOP; Object result; try { result = jvmMethod.invoke(qualifierValue, args.toArray()); } catch (InvocationTargetException e) { if (e.getCause() instanceof NumberFormatException || e.getCause() instanceof ArithmeticException) { return DfType.FAIL; } return DfType.TOP; } catch (IllegalAccessException | IllegalArgumentException e) { return DfType.TOP; } return constant(result, returnType); }