PsiNamedElement (@NotNull GrVariable variable) { if (isScriptField(variable)) { final String name = variable.getName(); final GroovyScriptClass script = (GroovyScriptClass)((GroovyFile)variable.getContainingFile()).getScriptClass(); assert script != null; List<GrField> duplicates = ContainerUtil.filter(script.getFields(), (GrField f) -> { if (!(f instanceof GrScriptField)) return false; if (!name.equals(f.getName())) return false; if (((GrScriptField)f).getOriginalVariable() == variable) return false; return true; }); return duplicates.size() > 0 ? duplicates.get(0) : null; } else { PsiNamedElement duplicate = treeWalkUpAndGetElement(variable, new DuplicateVariableProcessor(variable)); final PsiElement context1 = variable.getContext(); if (duplicate == null && variable instanceof GrParameter && context1 != null) { final PsiElement context = context1.getContext(); if (context instanceof GrClosableBlock || context instanceof GrMethod && !(context.getParent() instanceof GroovyFile) || context instanceof GrTryCatchStatement) { duplicate = treeWalkUpAndGetElement(context.getParent(), new DuplicateVariableProcessor(variable)); } } if (duplicate instanceof GrLightParameter && "args".equals(duplicate.getName())) { return null; } else { return duplicate; } } }