void (@NotNull PsiJavaCodeReferenceElement reference) { if (myInputVariables.isEmpty()) return; final PsiElement element = reference.resolve(); for (VariableData data : myInputVariables) { if (data.variable.equals(element)) { PsiType type = data.variable.getType(); final PsiMethodCallExpression methodCallExpression = PsiTreeUtil.getParentOfType(reference, PsiMethodCallExpression.class); if (methodCallExpression != null) { int idx = ArrayUtil.find(methodCallExpression.getArgumentList().getExpressions(), reference); if (idx > -1) { final PsiMethod psiMethod = methodCallExpression.resolveMethod(); if (psiMethod != null) { final PsiParameter[] parameters = psiMethod.getParameterList().getParameters(); if (idx >= parameters.length) { //vararg parameter idx = parameters.length - 1; if (idx >= 0) { //incomplete code type = parameters[idx].getType(); } } if (type instanceof PsiEllipsisType) { type = ((PsiEllipsisType)type).getComponentType(); } } } } if (!myFoldingAvailable || !myFolding.annotateWithParameter(data, reference)) { reference.putUserData(DuplicatesFinder.PARAMETER, new DuplicatesFinder.Parameter(data.variable, type)); } } } }