From 7a641cbd720a7e2d47938d207e52c688bfac69fa Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 18 Jun 2016 09:23:38 +0200 Subject: [PATCH] use non-recursive visitors in groovy inspections --- .../groovy/codeInspection/BaseInspection.java | 41 +++++-------------- .../codeInspection/BaseInspectionVisitor.java | 16 ++------ 2 files changed, 13 insertions(+), 44 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/BaseInspection.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/BaseInspection.java index 5e6e8ff3a8d8..b2e070aac8d3 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/BaseInspection.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/BaseInspection.java @@ -15,15 +15,14 @@ */ package org.jetbrains.plugins.groovy.codeInspection; -import com.intellij.codeInspection.InspectionManager; import com.intellij.codeInspection.InspectionProfileEntry; -import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiElementVisitor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.groovy.lang.psi.GroovyFileBase; +import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementVisitor; public abstract class BaseInspection extends GroovySuppressableInspectionTool { private final String m_shortName = InspectionProfileEntry.getShortName(getClass().getSimpleName()); @@ -51,16 +50,6 @@ public abstract class BaseInspection extends GroovySuppressableInspectionTool { return m_shortName; } - @NotNull - protected BaseInspectionVisitor buildGroovyVisitor(@NotNull ProblemsHolder problemsHolder, boolean onTheFly) { - final BaseInspectionVisitor visitor = buildVisitor(); - visitor.setProblemsHolder(problemsHolder); - visitor.setOnTheFly(onTheFly); - visitor.setInspection(this); - return visitor; - } - - @Nullable protected String buildErrorString(Object... args) { return null; @@ -75,24 +64,14 @@ public abstract class BaseInspection extends GroovySuppressableInspectionTool { return null; } - @Nullable - protected GroovyFix[] buildFixes(@NotNull PsiElement location) { - return null; - } - + @NotNull @Override - @Nullable - public ProblemDescriptor[] checkFile(@NotNull PsiFile psiFile, @NotNull InspectionManager inspectionManager, boolean isOnTheFly) { - if (!(psiFile instanceof GroovyFileBase)) { - return super.checkFile(psiFile, inspectionManager, isOnTheFly); - } - final GroovyFileBase groovyFile = (GroovyFileBase) psiFile; - - final ProblemsHolder problemsHolder = new ProblemsHolder(inspectionManager, psiFile, isOnTheFly); - final BaseInspectionVisitor visitor = buildGroovyVisitor(problemsHolder, isOnTheFly); - groovyFile.accept(visitor); - return problemsHolder.getResultsArray(); - + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + BaseInspectionVisitor visitor = buildVisitor(); + visitor.initialize(this, holder, isOnTheFly); + return new GroovyPsiElementVisitor(visitor); } @NotNull diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/BaseInspectionVisitor.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/BaseInspectionVisitor.java index c0ac6f6ced8f..f609bc13e965 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/BaseInspectionVisitor.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/BaseInspectionVisitor.java @@ -22,7 +22,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.groovy.lang.psi.GroovyRecursiveElementVisitor; +import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; @@ -31,20 +31,14 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrRefere import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; -public abstract class BaseInspectionVisitor extends GroovyRecursiveElementVisitor { +public abstract class BaseInspectionVisitor extends GroovyElementVisitor { private BaseInspection inspection = null; private ProblemsHolder problemsHolder = null; private boolean onTheFly = false; - public void setInspection(BaseInspection inspection) { + void initialize(BaseInspection inspection, ProblemsHolder problemsHolder, boolean onTheFly) { this.inspection = inspection; - } - - public void setProblemsHolder(ProblemsHolder problemsHolder) { this.problemsHolder = problemsHolder; - } - - public void setOnTheFly(boolean onTheFly) { this.onTheFly = onTheFly; } @@ -125,10 +119,6 @@ public abstract class BaseInspectionVisitor extends GroovyRecursiveElementVisito inspection.buildQuickFixesOnlyForOnTheFlyErrors()) { return null; } - final GroovyFix[] fixes = inspection.buildFixes(location); - if (fixes != null) { - return fixes; - } final GroovyFix fix = inspection.buildFix(location); if (fix == null) { return null;