void (@NotNull final Map<PsiElement, PsiElement> oldToNewElementsMapping) { for (final PsiElement newClass : oldToNewElementsMapping.values()) { if (!(newClass instanceof GrTypeDefinition)) continue; ((GrTypeDefinition)newClass).accept(new GroovyRecursiveElementVisitor() { @Override public void visitReferenceExpression(@NotNull GrReferenceExpression reference) { if (visitRef(reference)) return; super.visitReferenceExpression(reference); } @Override public void visitCodeReferenceElement(@NotNull GrCodeReferenceElement refElement) { visitRef(refElement); super.visitCodeReferenceElement(refElement); } private boolean visitRef(GrReferenceElement reference) { PsiElement element = reference.resolve(); if (element instanceof PsiClass) { for (PsiElement oldClass : oldToNewElementsMapping.keySet()) { if (PsiTreeUtil.isAncestor(oldClass, element, false)) { PsiClass newInnerClass = findMatchingClass((PsiClass)oldClass, (PsiClass)oldToNewElementsMapping.get(oldClass), (PsiClass)element); try { reference.bindToElement(newInnerClass); return true; } catch (IncorrectOperationException ex) { LOG.error(ex); } } } } return false; } }); } }