void (PsiElement element, @Nullable PsiClass thisClass, @Nullable GrExpression thisAccessExpr) { if (!(element instanceof GroovyPsiElement)) return; for (PsiElement child = element.getFirstChild(); child != null; child = child.getNextSibling()) { decodeContextInfo(child, thisClass, thisAccessExpr); } if (element.getCopyableUserData(KEY_ENCODED) != null) { element.putCopyableUserData(KEY_ENCODED, null); final PsiManager manager = element.getManager(); if (PsiUtil.isThisReference(element)) { final PsiClass thisQualClass = element.getCopyableUserData(QUALIFIER_CLASS_KEY); element.putCopyableUserData(QUALIFIER_CLASS_KEY, null); if (thisAccessExpr != null && !manager.areElementsEquivalent(thisClass, thisQualClass)) { element.replace(thisAccessExpr); return; } } else if (element instanceof GrReferenceExpression refExpr) { final GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(element.getProject()); final PsiElement resolvedElement = refExpr.resolve(); final PsiMember memberRef = refExpr.getCopyableUserData(REF_TO_MEMBER); refExpr.putCopyableUserData(REF_TO_MEMBER, null); if (memberRef != null && memberRef.isValid()) { final PsiClass memberClass = memberRef.getContainingClass(); if (memberClass != null) { if (memberRef.hasModifierProperty(PsiModifier.STATIC)) { if (!manager.areElementsEquivalent(memberRef, resolvedElement)) { final PsiElement qualifier = refExpr.getQualifier(); if (!(qualifier instanceof GrReferenceExpression)) { refExpr.setQualifier(factory.createReferenceExpressionFromText(memberClass.getQualifiedName())); JavaCodeStyleManager.getInstance(manager.getProject()).shortenClassReferences(refExpr.getQualifier()); return; } } } else if (thisAccessExpr instanceof GrReferenceExpression) { final PsiElement qualifier = refExpr.getQualifier(); if (!(qualifier instanceof GrReferenceExpression)) { refExpr.setQualifier(thisAccessExpr); return; } } } } } PsiClass refClass = element.getCopyableUserData(REF_TO_CLASS); element.putCopyableUserData(REF_TO_CLASS, null); if (refClass != null && refClass.isValid()) { final PsiReference ref = element.getReference(); if (ref != null) { ref.bindToElement(refClass); } } } }