From 45f322dc0036bcc3d3b7617e159e0fcac591bb1e Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 22 Jul 2016 13:42:18 +0200 Subject: [PATCH] Cleanup (formatting) --- .../daemon/impl/quickfix/OrderEntryFix.java | 86 ++++++++++--------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java index feeb6642cd99..15817ba36b4d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java @@ -37,11 +37,9 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; -import com.intellij.util.Function; import com.intellij.util.ThreeState; import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashSet; -import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -55,8 +53,7 @@ import java.util.Set; * @author cdr */ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix { - protected OrderEntryFix() { - } + protected OrderEntryFix() { } @Override public boolean startInWriteAction() { @@ -75,56 +72,40 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix { } @Nullable - public static List registerFixes(@NotNull final QuickFixActionRegistrar registrar, @NotNull final PsiReference reference) { - final PsiElement psiElement = reference.getElement(); - @NonNls final String shortReferenceName = reference.getRangeInElement().substring(psiElement.getText()); + public static List registerFixes(@NotNull QuickFixActionRegistrar registrar, @NotNull PsiReference reference) { + PsiElement psiElement = reference.getElement(); + String shortReferenceName = reference.getRangeInElement().substring(psiElement.getText()); Project project = psiElement.getProject(); PsiFile containingFile = psiElement.getContainingFile(); if (containingFile == null) return null; - - final VirtualFile classVFile = containingFile.getVirtualFile(); + VirtualFile classVFile = containingFile.getVirtualFile(); if (classVFile == null) return null; final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex(); final Module currentModule = fileIndex.getModuleForFile(classVFile); if (currentModule == null) return null; - List result = new ArrayList(); - JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project); - String fullReferenceText = reference.getCanonicalText(); - for (ExternalLibraryResolver resolver : ExternalLibraryResolver.EP_NAME.getExtensions()) { - final ExternalClassResolveResult resolveResult = resolver.resolveClass(shortReferenceName, isReferenceToAnnotation(psiElement), currentModule); - OrderEntryFix fix = null; - if (resolveResult != null && psiFacade.findClass(resolveResult.getQualifiedClassName(), currentModule.getModuleWithDependenciesAndLibrariesScope(true)) == null) { - fix = new AddExternalLibraryToDependenciesQuickFix(currentModule, resolveResult.getLibrary(), reference, resolveResult.getQualifiedClassName()); - } - else if (!fullReferenceText.equals(shortReferenceName)) { - ExternalLibraryDescriptor descriptor = resolver.resolvePackage(fullReferenceText); - if (descriptor != null) { - fix = new AddExternalLibraryToDependenciesQuickFix(currentModule, descriptor, reference, null); - } - } - if (fix != null) { - registrar.register(fix); - result.add(fix); - } - } + List result = ContainerUtil.newSmartList(); + JavaPsiFacade facade = JavaPsiFacade.getInstance(psiElement.getProject()); + + registerExternalFixes(registrar, reference, psiElement, shortReferenceName, facade, currentModule, result); if (!result.isEmpty()) { return result; } Set librariesToAdd = new THashSet(); - final JavaPsiFacade facade = JavaPsiFacade.getInstance(psiElement.getProject()); PsiClass[] classes = PsiShortNamesCache.getInstance(project).getClassesByName(shortReferenceName, GlobalSearchScope.allScope(project)); List allowedDependencies = filterAllowedDependencies(psiElement, classes); if (allowedDependencies.isEmpty()) { return result; } + classes = allowedDependencies.toArray(new PsiClass[allowedDependencies.size()]); OrderEntryFix moduleDependencyFix = new AddModuleDependencyFix(currentModule, classVFile, classes, reference); registrar.register(moduleDependencyFix); result.add(moduleDependencyFix); + for (final PsiClass aClass : classes) { if (!facade.getResolveHelper().isAccessible(aClass, psiElement, aClass)) continue; PsiFile psiFile = aClass.getContainingFile(); @@ -155,9 +136,37 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix { } } } + return result; } + private static void registerExternalFixes(@NotNull QuickFixActionRegistrar registrar, + @NotNull PsiReference reference, + PsiElement psiElement, + String shortReferenceName, + JavaPsiFacade facade, + Module currentModule, + List result) { + String fullReferenceText = reference.getCanonicalText(); + for (ExternalLibraryResolver resolver : ExternalLibraryResolver.EP_NAME.getExtensions()) { + ExternalClassResolveResult resolveResult = resolver.resolveClass(shortReferenceName, isReferenceToAnnotation(psiElement), currentModule); + OrderEntryFix fix = null; + if (resolveResult != null && facade.findClass(resolveResult.getQualifiedClassName(), currentModule.getModuleWithDependenciesAndLibrariesScope(true)) == null) { + fix = new AddExternalLibraryToDependenciesQuickFix(currentModule, resolveResult.getLibrary(), reference, resolveResult.getQualifiedClassName()); + } + else if (!fullReferenceText.equals(shortReferenceName)) { + ExternalLibraryDescriptor descriptor = resolver.resolvePackage(fullReferenceText); + if (descriptor != null) { + fix = new AddExternalLibraryToDependenciesQuickFix(currentModule, descriptor, reference, null); + } + } + if (fix != null) { + registrar.register(fix); + result.add(fix); + } + } + } + private static List filterAllowedDependencies(PsiElement element, PsiClass[] classes) { DependencyValidationManager dependencyValidationManager = DependencyValidationManager.getInstance(element.getProject()); PsiFile fromFile = element.getContainingFile(); @@ -184,11 +193,8 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix { return ThreeState.NO; } - public static void importClass(@NotNull final Module currentModule, - @Nullable final Editor editor, - @Nullable final PsiReference reference, - @Nullable @NonNls final String className) { - final Project project = currentModule.getProject(); + public static void importClass(@NotNull Module currentModule, @Nullable Editor editor, @Nullable PsiReference reference, @Nullable String className) { + Project project = currentModule.getProject(); if (editor != null && reference != null && className != null) { DumbService.getInstance(project).withAlternativeResolveEnabled(() -> { GlobalSearchScope scope = GlobalSearchScope.moduleWithLibrariesScope(currentModule); @@ -204,17 +210,15 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix { addJarsToRoots(Collections.singletonList(jarPath), null, module, location); } - public static void addJarsToRoots(@NotNull final List jarPaths, @Nullable final String libraryName, - @NotNull final Module module, @Nullable final PsiElement location) { + public static void addJarsToRoots(@NotNull List jarPaths, @Nullable String libraryName, @NotNull Module module, @Nullable PsiElement location) { List urls = refreshAndConvertToUrls(jarPaths); DependencyScope scope = suggestScopeByLocation(module, location); - ModuleRootModificationUtil.addModuleLibrary(module, libraryName, urls, Collections.emptyList(), - scope); + ModuleRootModificationUtil.addModuleLibrary(module, libraryName, urls, Collections.emptyList(), scope); } @NotNull public static List refreshAndConvertToUrls(@NotNull List jarPaths) { - return ContainerUtil.map(jarPaths, path -> refreshAndConvertToUrl(path)); + return ContainerUtil.map(jarPaths, OrderEntryFix::refreshAndConvertToUrl); } @NotNull @@ -234,4 +238,4 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix { LocalFileSystem.getInstance().refreshAndFindFileByIoFile(libraryRoot); return VfsUtil.getUrlForLibraryRoot(libraryRoot); } -} +} \ No newline at end of file