From 444ff65011020dcfd81af6d05c3b18c95b5791c9 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Wed, 20 Feb 2019 15:17:20 +0300 Subject: [PATCH] [groovy] extract import fixes generation into separate file, make it independent from HighlightInfo/HighlightDisplayKey --- .../GrUnresolvedAccessChecker.java | 10 ++++------ .../untypedUnresolvedAccess/referenceFixes.kt | 13 +++++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/GrUnresolvedAccessChecker.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/GrUnresolvedAccessChecker.java index c022eb46fbaa..f5223e765e84 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/GrUnresolvedAccessChecker.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/GrUnresolvedAccessChecker.java @@ -61,6 +61,7 @@ import java.util.List; import java.util.Map; import static com.intellij.psi.util.PsiUtil.isInnerClass; +import static org.jetbrains.plugins.groovy.codeInspection.untypedUnresolvedAccess.ReferenceFixesKt.generateAddImportActions; import static org.jetbrains.plugins.groovy.codeInspection.untypedUnresolvedAccess.ReferenceFixesKt.generateCreateClassActions; import static org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil.hasArguments; import static org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil.hasEnclosingInstanceInScope; @@ -447,12 +448,9 @@ public class GrUnresolvedAccessChecker { } private static void registerAddImportFixes(GrReferenceElement refElement, @Nullable HighlightInfo info, final HighlightDisplayKey key) { - final String referenceName = refElement.getReferenceName(); - if (StringUtil.isEmpty(referenceName)) return; - if (!(refElement instanceof GrCodeReferenceElement) && Character.isLowerCase(referenceName.charAt(0))) return; - if (refElement.getQualifier() != null) return; - - QuickFixAction.registerQuickFixAction(info, GroovyQuickFixFactory.getInstance().createGroovyAddImportAction(refElement), key); + for (IntentionAction action : generateAddImportActions(refElement)) { + QuickFixAction.registerQuickFixAction(info, action, key); + } } private static void registerCreateClassByTypeFix(@NotNull GrReferenceElement refElement, diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/referenceFixes.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/referenceFixes.kt index 39c4b694ef17..2c6cfb85e9b1 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/referenceFixes.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/referenceFixes.kt @@ -17,6 +17,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrExtendsCla import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrImplementsClause import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrInterfaceDefinition import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.packaging.GrPackageDefinition +import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil.canBeClassOrPackage fun generateCreateClassActions(ref: GrReferenceElement<*>): Collection { @@ -84,3 +85,15 @@ private fun resolvesToGroovy(qualifier: PsiElement?): Boolean { else -> false } } + +fun generateAddImportActions(ref: GrReferenceElement<*>): Collection { + return generateAddImportAction(ref)?.let(::listOf) ?: emptyList() +} + +private fun generateAddImportAction(ref: GrReferenceElement<*>): IntentionAction? { + if (ref.isQualified) return null + val referenceName = ref.referenceName ?: return null + if (referenceName.isEmpty()) return null + if (ref !is GrCodeReferenceElement && Character.isLowerCase(referenceName[0])) return null + return GroovyQuickFixFactory.getInstance().createGroovyAddImportAction(ref) +}