[groovy] extract import fixes generation into separate file, make it independent from HighlightInfo/HighlightDisplayKey

This commit is contained in:
Daniil Ovchinnikov
2019-02-21 12:16:25 +03:00
parent dd03ec2dbd
commit 444ff65011
2 changed files with 17 additions and 6 deletions
@@ -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,
@@ -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<IntentionAction> {
@@ -84,3 +85,15 @@ private fun resolvesToGroovy(qualifier: PsiElement?): Boolean {
else -> false
}
}
fun generateAddImportActions(ref: GrReferenceElement<*>): Collection<IntentionAction> {
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)
}