@Override public void consume(Object o) { if (!(o instanceof GroovyResolveResult)) { LOG.error(o); return; } GroovyResolveResult result = (GroovyResolveResult) o; if (!result.isStaticsOK()) { if (myInapplicable == null) myInapplicable = ContainerUtil.newArrayList(); myInapplicable.add(result); return; } if (!result.isAccessible() && myParameters.getInvocationCount() < 2) return; if (mySkipPackages && result.getElement() instanceof PsiPackage) return; PsiElement element = result.getElement(); if (element instanceof PsiVariable && !myMatcher.prefixMatches(((PsiVariable) element).getName())) { return; } if (element instanceof GrReflectedMethod) { element = ((GrReflectedMethod) element).getBaseMethod(); if (!myProcessedMethodWithOptionalParams.add((GrMethod) element)) return; result = new GroovyResolveResultImpl( element, result.getCurrentFileResolveContext(), result.getSpreadState(), result.getSubstitutor(), result.isAccessible(), result.isStaticsOK(), result.isInvokedOnProperty(), result.isValidResult()); } if (myFieldPointerOperator && !(element instanceof PsiVariable)) { return; } if (myMethodPointerOperator && !(element instanceof PsiMethod)) { return; } addCandidate(result); if (!myFieldPointerOperator && !myMethodPointerOperator) { if (element instanceof PsiMethod) { processProperty((PsiMethod) element, result); } else if (element instanceof GrField) { if (((GrField) element).isProperty()) { processPropertyFromField((GrField) element, result); } } } if (element instanceof GrVariable && !(element instanceof GrField)) { myLocalVars.add(((GrVariable) element).getName()); } }
public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException { final GroovyResolveResult result = advancedResolve(); if (result.isInvokedOnProperty()) { final String name = GroovyPropertyUtils.getPropertyNameByAccessorName(newElementName); if (name != null) { newElementName = name; } } if (PsiUtil.isThisOrSuperRef(this)) return this; return handleElementRenameSimple(newElementName); }
@Override public void renameElement( final PsiElement psiElement, String newName, final UsageInfo[] usages, @Nullable RefactoringElementListener listener) throws IncorrectOperationException { final GrField field = (GrField) psiElement; String fieldName = field.getName(); NameProvider nameProvider = new NameProvider(field, newName); MultiMap<PsiNamedElement, UsageInfo> propertyUsages = MultiMap.createLinked(); MultiMap<PsiNamedElement, UsageInfo> simpleUsages = MultiMap.createLinked(); List<PsiReference> unknownUsages = new ArrayList<>(); for (UsageInfo usage : usages) { final PsiReference ref = usage.getReference(); if (ref instanceof GrReferenceExpression) { final GroovyResolveResult resolveResult = ((GrReferenceExpression) ref).advancedResolve(); final PsiElement element = resolveResult.getElement(); if (resolveResult.isInvokedOnProperty()) { propertyUsages.putValue((PsiNamedElement) element, usage); } else { simpleUsages.putValue((PsiNamedElement) element, usage); } } else if (ref != null) { unknownUsages.add(ref); } } for (PsiReference ref : unknownUsages) { handleElementRename(newName, ref, fieldName); } field.setName(newName); nameProvider.putNewElements(field); PsiManager manager = field.getManager(); for (PsiNamedElement element : simpleUsages.keySet()) { for (UsageInfo info : simpleUsages.get(element)) { final String name = nameProvider.getNewName(element); rename( nameProvider.getNewElement(element), info, name == null ? newName : name, name != null, manager); } } for (PsiNamedElement element : propertyUsages.keySet()) { for (UsageInfo info : propertyUsages.get(element)) { rename(element, info, newName, true, manager); } } if (listener != null) { listener.elementRenamed(field); } }