diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index 1884d46fd5a3..4c2731c6ca0e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -23,21 +23,18 @@ package com.intellij.codeInsight.daemon.impl.analysis; import com.intellij.codeInsight.ExceptionUtil; import com.intellij.codeInsight.daemon.JavaErrorMessages; -import com.intellij.codeInsight.daemon.QuickFixActionRegistrar; import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.codeInsight.daemon.impl.HighlightInfoType; import com.intellij.codeInsight.daemon.impl.quickfix.*; import com.intellij.codeInsight.highlighting.HighlightUsagesDescriptionLocation; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInsight.intention.QuickFixFactory; -import com.intellij.codeInsight.quickfix.UnresolvedReferenceQuickFixProvider; import com.intellij.codeInsight.quickfix.ChangeVariableTypeQuickFixProvider; +import com.intellij.codeInsight.quickfix.UnresolvedReferenceQuickFixProvider; import com.intellij.lang.StdLanguages; import com.intellij.lang.findUsages.LanguageFindUsages; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.project.DumbAware; -import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Key; @@ -1873,17 +1870,8 @@ public class HighlightUtil { if (PsiUtil.isInsideJavadocComment(ref)) return null; HighlightInfo info = HighlightInfo.createHighlightInfo(type, refName, description); - QuickFixActionRegistrar registrar = new QuickFixActionRegistrarImpl(info); - - final boolean dumb = DumbService.getInstance(ref.getProject()).isDumb(); - UnresolvedReferenceQuickFixProvider[] fixProviders = Extensions.getExtensions(UnresolvedReferenceQuickFixProvider.EXTENSION_NAME); - for (UnresolvedReferenceQuickFixProvider each : fixProviders) { - if (dumb && !(each instanceof DumbAware)) { - continue; - } - each.registerFixes(ref, registrar); - } + UnresolvedReferenceQuickFixProvider.registerFixes(ref, new QuickFixActionRegistrarImpl(info), PsiJavaCodeReferenceElement.class); return info; } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DefaultQuickFixProvider.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DefaultQuickFixProvider.java index f8f7ec256651..8f27e8c151a2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DefaultQuickFixProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DefaultQuickFixProvider.java @@ -22,8 +22,9 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; +import org.jetbrains.annotations.NotNull; -public class DefaultQuickFixProvider implements UnresolvedReferenceQuickFixProvider{ +public class DefaultQuickFixProvider extends UnresolvedReferenceQuickFixProvider { public void registerFixes(PsiJavaCodeReferenceElement ref, QuickFixActionRegistrar registrar) { registrar.register(new ImportClassFix(ref)); registrar.register(SetupJDKFix.getInstnace()); @@ -60,4 +61,9 @@ public class DefaultQuickFixProvider implements UnresolvedReferenceQuickFixProvi registrar.register(new CreateInnerClassFromUsageFix(ref, CreateClassKind.CLASS)); } } + + @NotNull + public Class getReferenceClass() { + return PsiJavaCodeReferenceElement.class; + } } \ No newline at end of file diff --git a/java/openapi/src/com/intellij/codeInsight/quickfix/UnresolvedReferenceQuickFixProvider.java b/java/openapi/src/com/intellij/codeInsight/quickfix/UnresolvedReferenceQuickFixProvider.java index 7840700b2b7c..b3463f2f6592 100644 --- a/java/openapi/src/com/intellij/codeInsight/quickfix/UnresolvedReferenceQuickFixProvider.java +++ b/java/openapi/src/com/intellij/codeInsight/quickfix/UnresolvedReferenceQuickFixProvider.java @@ -15,14 +15,35 @@ */ package com.intellij.codeInsight.quickfix; -import com.intellij.openapi.extensions.ExtensionPointName; -import com.intellij.psi.PsiJavaCodeReferenceElement; import com.intellij.codeInsight.daemon.QuickFixActionRegistrar; +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.project.DumbService; +import com.intellij.psi.PsiReference; +import org.jetbrains.annotations.NotNull; -public interface UnresolvedReferenceQuickFixProvider { - ExtensionPointName EXTENSION_NAME = +public abstract class UnresolvedReferenceQuickFixProvider { + + public static void registerFixes(T ref, QuickFixActionRegistrar registrar, Class refClass) { + + final boolean dumb = DumbService.getInstance(ref.getElement().getProject()).isDumb(); + UnresolvedReferenceQuickFixProvider[] fixProviders = Extensions.getExtensions(EXTENSION_NAME); + for (UnresolvedReferenceQuickFixProvider each : fixProviders) { + if (dumb && !(each instanceof DumbAware)) { + continue; + } + if (refClass.equals(each.getReferenceClass())) { + each.registerFixes(ref, registrar); + } + } + } + + private static final ExtensionPointName EXTENSION_NAME = ExtensionPointName.create("com.intellij.codeInsight.unresolvedReferenceQuickFixProvider"); + public abstract void registerFixes(T ref, QuickFixActionRegistrar registrar); - void registerFixes(PsiJavaCodeReferenceElement ref, QuickFixActionRegistrar registrar); + @NotNull + public abstract Class getReferenceClass(); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/intentions/ResolveReferenceQuickFixProvider.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/intentions/ResolveReferenceQuickFixProvider.java index 04a6a795473d..15cb9f90f780 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/intentions/ResolveReferenceQuickFixProvider.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/intentions/ResolveReferenceQuickFixProvider.java @@ -15,12 +15,19 @@ */ package org.jetbrains.idea.maven.dom.intentions; -import com.intellij.codeInsight.quickfix.UnresolvedReferenceQuickFixProvider; import com.intellij.codeInsight.daemon.QuickFixActionRegistrar; +import com.intellij.codeInsight.quickfix.UnresolvedReferenceQuickFixProvider; import com.intellij.psi.PsiJavaCodeReferenceElement; +import org.jetbrains.annotations.NotNull; + +public class ResolveReferenceQuickFixProvider extends UnresolvedReferenceQuickFixProvider { -public class ResolveReferenceQuickFixProvider implements UnresolvedReferenceQuickFixProvider{ public void registerFixes(PsiJavaCodeReferenceElement ref, QuickFixActionRegistrar registrar) { registrar.register(new AddMavenDependencyQuickFix(ref)); } + + @NotNull + public Class getReferenceClass() { + return PsiJavaCodeReferenceElement.class; + } }