public static void runHighlightingTypeMigration( final Project project, final Editor editor, final TypeMigrationRules rules, final PsiElement root) { final TypeMigrationProcessor processor = new TypeMigrationProcessor(project, root, rules) { @Override public void performRefactoring(final UsageInfo[] usages) { super.performRefactoring(usages); ApplicationManager.getApplication() .invokeLater( new Runnable() { public void run() { final List<PsiElement> result = new ArrayList<PsiElement>(); for (UsageInfo usage : usages) { final PsiElement element = usage.getElement(); if (element instanceof PsiMethod) { result.add(((PsiMethod) element).getReturnTypeElement()); } else if (element instanceof PsiVariable) { result.add(((PsiVariable) element).getTypeElement()); } else if (element != null) { result.add(element); } } if (editor != null) RefactoringUtil.highlightAllOccurrences( project, PsiUtilBase.toPsiElementArray(result), editor); } }); } }; processor.run(); }
public static void runHighlightingTypeMigration( final Project project, final Editor editor, final TypeMigrationRules rules, final PsiElement[] roots, final Function<PsiElement, PsiType> migrationTypeFunction, final boolean optimizeImports) { final Set<PsiFile> containingFiles = ContainerUtil.map2Set(roots, element -> element.getContainingFile()); final TypeMigrationProcessor processor = new TypeMigrationProcessor(project, roots, migrationTypeFunction, rules) { @Override public void performRefactoring(@NotNull final UsageInfo[] usages) { super.performRefactoring(usages); if (editor != null) { ApplicationManager.getApplication() .invokeLater( () -> { final List<PsiElement> result = new ArrayList<>(); for (UsageInfo usage : usages) { final PsiElement element = usage.getElement(); if (element == null || !containingFiles.contains(element.getContainingFile())) continue; if (element instanceof PsiMethod) { result.add(((PsiMethod) element).getReturnTypeElement()); } else if (element instanceof PsiVariable) { result.add(((PsiVariable) element).getTypeElement()); } else { result.add(element); } } RefactoringUtil.highlightAllOccurrences( project, PsiUtilCore.toPsiElementArray(result), editor); }); } if (optimizeImports) { final JavaCodeStyleManager javaCodeStyleManager = JavaCodeStyleManager.getInstance(myProject); final Set<PsiFile> affectedFiles = new THashSet<>(); for (UsageInfo usage : usages) { final PsiFile usageFile = usage.getFile(); if (usageFile != null) { affectedFiles.add(usageFile); } } for (PsiFile file : affectedFiles) { javaCodeStyleManager.optimizeImports(file); javaCodeStyleManager.shortenClassReferences(file); } } } }; processor.run(); }