void (@NotNull PsiMethodCallExpression expression) { if (OBJECTS_CALL.test(expression)) { for (PsiExpression argument : expression.getArgumentList().getExpressions()) { PsiReferenceExpression fieldRef = ObjectUtils.tryCast(argument, PsiReferenceExpression.class); if (fieldRef == null || !myNonVisitedFields.remove(fieldRef.resolve())) { stopWalking(); return; } } return; } PsiType expectedType = null; if (FLOAT_CALL.test(expression)) { expectedType = PsiTypes.floatType(); } else if (DOUBLE_CALL.test(expression)) { expectedType = PsiTypes.doubleType(); } if (expectedType != null) { PsiExpression[] expressions = expression.getArgumentList().getExpressions(); if (expressions.length == 1) { PsiReferenceExpression refExpr = ObjectUtils.tryCast(expressions[0], PsiReferenceExpression.class); if (refExpr != null) { PsiField field = ObjectUtils.tryCast(refExpr.resolve(), PsiField.class); if (field != null && expectedType.equals(field.getType())) { myNonVisitedFields.remove(field); return; } } } stopWalking(); return; } if (INSTANCE_CALL.test(expression)) { PsiExpression qualifier = expression.getMethodExpression().getQualifierExpression(); PsiReferenceExpression fieldRef = ObjectUtils.tryCast(qualifier, PsiReferenceExpression.class); if (fieldRef != null) { PsiField field = ObjectUtils.tryCast(fieldRef.resolve(), PsiField.class); if (field != null) { myNonVisitedFields.remove(field); return; } } } stopWalking(); }