Uast: Add Uast visitor extensions instead of additional checkers

This commit is contained in:
Yan Zhulanow
2016-04-06 18:22:17 +03:00
parent 6b30b8ce1f
commit 21a2115501
39 changed files with 529 additions and 91 deletions
@@ -17,7 +17,7 @@
package com.android.tools.klint.client.api;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.UastAdditionalChecker;
import org.jetbrains.uast.UastVisitorExtension;
import org.jetbrains.uast.UastConverter;
import org.jetbrains.uast.java.JavaUastLanguagePlugin;
@@ -32,7 +32,7 @@ public class JavaLintLanguageExtension extends LintLanguageExtension {
@NotNull
@Override
public List<UastAdditionalChecker> getAdditionalCheckers() {
return JavaUastLanguagePlugin.INSTANCE.getAdditionalCheckers();
public List<UastVisitorExtension> getVisitorExtensions() {
return JavaUastLanguagePlugin.INSTANCE.getVisitorExtensions();
}
}
@@ -44,14 +44,12 @@ import com.sun.istack.internal.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastChecker;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.java.JavaUastCallKinds;
import org.jetbrains.uast.visitor.UastVisitor;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.*;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import java.io.File;
import java.io.IOException;
@@ -25,6 +25,7 @@ import org.jetbrains.uast.UClass;
import org.jetbrains.uast.UElement;
import org.jetbrains.uast.UFunction;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.ClassNode;
@@ -39,9 +39,9 @@ import org.jetbrains.uast.UElement;
import org.jetbrains.uast.UQualifiedExpression;
import org.jetbrains.uast.USimpleReferenceExpression;
import org.jetbrains.uast.UastUtils;
import org.jetbrains.uast.check.UastAndroidUtils;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
import org.w3c.dom.Attr;
@@ -203,7 +203,7 @@ public class AlwaysShowActionDetector extends ResourceXmlDetector implements Uas
return new FieldAccessChecker(context);
}
private class FieldAccessChecker extends UastVisitor {
private class FieldAccessChecker extends AbstractUastVisitor {
private final UastAndroidContext mContext;
public FieldAccessChecker(UastAndroidContext context) {
@@ -36,7 +36,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.java.JavaUastCallKinds;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
/**
@@ -85,7 +85,7 @@ public class AnnotationDetector extends Detector implements UastScanner {
return new AnnotationChecker(context);
}
private static class AnnotationChecker extends UastVisitor {
private static class AnnotationChecker extends AbstractUastVisitor {
private final UastAndroidContext mContext;
public AnnotationChecker(UastAndroidContext context) {
@@ -24,6 +24,7 @@ import com.android.tools.klint.detector.api.*
import org.jetbrains.uast.*
import org.jetbrains.uast.check.UastAndroidContext
import org.jetbrains.uast.check.UastScanner
import org.jetbrains.uast.visitor.AbstractUastVisitor
import org.jetbrains.uast.visitor.UastVisitor
import java.util.*
@@ -55,7 +56,7 @@ open class ApiDetector : Detector(), UastScanner {
return ApiVersionVisitor(context)
}
private inner class ApiVersionVisitor(val context: UastAndroidContext) : UastVisitor() {
private inner class ApiVersionVisitor(val context: UastAndroidContext) : AbstractUastVisitor() {
private var mMinApi = -1
override fun visitCallExpression(node: UCallExpression): Boolean {
@@ -32,6 +32,7 @@ import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.java.JavaUAssertExpression;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
import static org.jetbrains.uast.UastLiteralUtils.isNullLiteral;
@@ -81,7 +82,7 @@ public class AssertDetector extends Detector implements UastScanner {
@Override
public UastVisitor createUastVisitor(final UastAndroidContext context) {
return new UastVisitor() {
return new AbstractUastVisitor() {
@Override
public boolean visitCallExpression(@NotNull UCallExpression node) {
if (!(node instanceof JavaUAssertExpression)) {
@@ -38,6 +38,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
/**
@@ -84,7 +85,7 @@ public class CallSuperDetector extends Detector implements UastScanner {
@Override
public UastVisitor createUastVisitor(final UastAndroidContext context) {
return new UastVisitor() {
return new AbstractUastVisitor() {
@Override
public boolean visitFunction(@NotNull UFunction node) {
checkCallSuper(context, node);
@@ -166,7 +167,7 @@ public class CallSuperDetector extends Detector implements UastScanner {
}
/** Visits a method and determines whether the method calls its super method */
private static class SuperCallVisitor extends UastVisitor {
private static class SuperCallVisitor extends AbstractUastVisitor {
private final UastAndroidContext mContext;
private final String mMethodContainingClassFqName;
private final String mMethodName;
@@ -36,7 +36,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.UastVisitor;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
/**
* Checks for missing {@code recycle} calls on resources that encourage it, and
@@ -455,7 +455,7 @@ public class CleanupDetector extends Detector implements UastScanner {
* case of a TypedArray we're looking for a "recycle", call, in the
* case of a database cursor we're looking for a "close" call, etc.
*/
private abstract static class FinishVisitor extends UastVisitor {
private abstract static class FinishVisitor extends AbstractUastVisitor {
protected final UastAndroidContext mContext;
protected final List<UVariable> mVariables;
private boolean mContainsCleanup;
@@ -39,7 +39,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.UastVisitor;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
/**
* Detector looking for cut & paste issues
@@ -182,7 +182,7 @@ public class CutPasteDetector extends Detector implements UastScanner {
return visitor.isReachable();
}
private static class ReachableVisitor extends UastVisitor {
private static class ReachableVisitor extends AbstractUastVisitor {
@NonNull private final UCallExpression mFrom;
@NonNull private final UCallExpression mTo;
private boolean mReachable;
@@ -73,6 +73,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
import org.w3c.dom.Element;
@@ -1975,7 +1976,7 @@ public class IconDetector extends ResourceXmlDetector implements UastScanner {
return new NotificationFinder(context);
}
private final class NotificationFinder extends UastVisitor {
private final class NotificationFinder extends AbstractUastVisitor {
private UastAndroidContext mContext;
public NotificationFinder(UastAndroidContext mContext) {
@@ -2066,7 +2067,7 @@ public class IconDetector extends ResourceXmlDetector implements UastScanner {
return false;
}
private final class SetIconFinder extends UastVisitor {
private final class SetIconFinder extends AbstractUastVisitor {
@Override
public boolean visitCallExpression(@NotNull UCallExpression node) {
if (SET_SMALL_ICON.equals(node.getFunctionName())) {
@@ -2080,7 +2081,7 @@ public class IconDetector extends ResourceXmlDetector implements UastScanner {
}
}
private final class MenuFinder extends UastVisitor {
private final class MenuFinder extends AbstractUastVisitor {
@Override
public boolean visitQualifiedExpression(@NotNull UQualifiedExpression node) {
// R.type.name
@@ -45,6 +45,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
/**
@@ -152,7 +153,7 @@ public class JavaPerformanceDetector extends Detector implements UastScanner {
return new PerformanceVisitor(context);
}
private static class PerformanceVisitor extends UastVisitor {
private static class PerformanceVisitor extends AbstractUastVisitor {
private final UastAndroidContext mContext;
private final boolean mCheckMaps;
private final boolean mCheckAllocations;
@@ -552,7 +553,7 @@ public class JavaPerformanceDetector extends Detector implements UastScanner {
}
/** Visitor which records variable names assigned into */
private static class AssignmentTracker extends UastVisitor {
private static class AssignmentTracker extends AbstractUastVisitor {
private final Collection<String> mVariables;
public AssignmentTracker(Collection<String> variables) {
@@ -35,7 +35,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.UastVisitor;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
/**
* Looks for addJavascriptInterface calls on interfaces have been properly annotated
@@ -182,7 +182,7 @@ public class JavaScriptInterfaceDetector extends Detector implements UastScanner
return false;
}
private static class ConcreteTypeVisitor extends UastVisitor {
private static class ConcreteTypeVisitor extends AbstractUastVisitor {
private final UastAndroidContext mContext;
private final UCallExpression mTargetCall;
private boolean mFoundCall;
@@ -40,6 +40,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
@@ -477,7 +478,7 @@ public class OverdrawDetector extends LayoutDetector implements UastScanner {
return new OverdrawVisitor();
}
private class OverdrawVisitor extends UastVisitor {
private class OverdrawVisitor extends AbstractUastVisitor {
private static final String ACTIVITY = "Activity"; //$NON-NLS-1$
private String mClassFqn;
@@ -29,6 +29,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
/**
@@ -71,7 +72,7 @@ public class ParcelDetector extends Detector implements UastScanner {
return new ParcelVisitor(context);
}
private static class ParcelVisitor extends UastVisitor {
private static class ParcelVisitor extends AbstractUastVisitor {
private final UastAndroidContext mContext;
public ParcelVisitor(UastAndroidContext context) {
@@ -40,7 +40,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.java.JavaUastLanguagePlugin;
import org.jetbrains.uast.visitor.UastVisitor;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
/**
* A permission requirement is a boolean expression of permission names that a
@@ -590,7 +590,7 @@ public abstract class PermissionRequirement {
if (node != null) {
final AtomicReference<UExpression> reference = new AtomicReference<UExpression>();
node.accept(new UastVisitor() {
node.accept(new AbstractUastVisitor() {
@Override
public boolean visitVariable(@NotNull UVariable node) {
reference.set(node.getInitializer());
@@ -76,6 +76,7 @@ import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.EmptyUastVisitor;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
@@ -571,7 +572,7 @@ public class RtlDetector extends LayoutDetector implements UastScanner {
return EmptyUastVisitor.INSTANCE;
}
private static class IdentifierChecker extends UastVisitor {
private static class IdentifierChecker extends AbstractUastVisitor {
private final UastAndroidContext mContext;
public IdentifierChecker(UastAndroidContext context) {
@@ -33,6 +33,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.ULiteralExpression;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
/**
@@ -82,7 +83,7 @@ public class SdCardDetector extends Detector implements UastScanner {
return new StringChecker(context);
}
private static class StringChecker extends UastVisitor {
private static class StringChecker extends AbstractUastVisitor {
private final UastAndroidContext mContext;
public StringChecker(UastAndroidContext context) {
@@ -54,6 +54,7 @@ import org.jetbrains.uast.UCallExpression;
import org.jetbrains.uast.USimpleReferenceExpression;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
@@ -358,10 +359,10 @@ public class SecurityDetector extends Detector implements Detector.XmlScanner, U
return new IdentifierVisitor(context);
}
private static class IdentifierVisitor extends UastVisitor {
private static class IdentifierVisitor extends AbstractUastVisitor {
private final UastAndroidContext mContext;
private final UastVisitor identifierHandler = new UastVisitor() {
private final AbstractUastVisitor identifierHandler = new AbstractUastVisitor() {
@Override
public boolean visitSimpleReferenceExpression(@NotNull USimpleReferenceExpression node) {
if ("MODE_WORLD_WRITEABLE".equals(node.getIdentifier())) { //$NON-NLS-1$
@@ -36,7 +36,7 @@ import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.java.JavaUAssertExpression;
import org.jetbrains.uast.visitor.UastVisitor;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
/**
* Detector looking for SharedPreferences.edit() calls without a corresponding
@@ -169,7 +169,7 @@ public class SharedPrefsDetector extends Detector implements UastScanner {
return null;
}
private static class CommitFinder extends UastVisitor {
private static class CommitFinder extends AbstractUastVisitor {
/** The target edit call */
private final UCallExpression mTarget;
/** whether it allows the commit call to be seen before the target node */
@@ -66,7 +66,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.UastVisitor;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -1353,7 +1353,7 @@ public class StringFormatDetector extends ResourceXmlDetector implements UastSca
* certain argument types are valid. Note however that it does not do full-blown
* type analysis by checking method call signatures and so on.
*/
private static class UastStringTracker extends UastVisitor {
private static class UastStringTracker extends AbstractUastVisitor {
/** Method we're searching within */
private final UElement mTop;
/** The argument index in the method we're targeting */
@@ -52,7 +52,7 @@ import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.java.JavaUFunction;
import org.jetbrains.uast.java.JavaUastCallKinds;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -455,7 +455,7 @@ public class SupportAnnotationDetector extends Detector implements UastScanner {
* or whether the check return value (== PERMISSION_GRANTED vs != PERMISSION_GRANTED)
* is handled correctly, etc.
*/
private static class CheckPermissionVisitor extends UastVisitor {
private static class CheckPermissionVisitor extends AbstractUastVisitor {
private boolean mChecksPermission;
private boolean mDone;
private final UElement mTarget;
@@ -1251,7 +1251,7 @@ public class SupportAnnotationDetector extends Detector implements UastScanner {
return new CallVisitor(context);
}
private class CallVisitor extends UastVisitor {
private class CallVisitor extends AbstractUastVisitor {
private final UastAndroidContext mContext;
public CallVisitor(UastAndroidContext context) {
@@ -33,7 +33,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.UastVisitor;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
/** Detector looking for Toast.makeText() without a corresponding show() call */
public class ToastDetector extends Detector implements UastScanner {
@@ -110,7 +110,7 @@ public class ToastDetector extends Detector implements UastScanner {
}
}
private static class ShowFinder extends UastVisitor {
private static class ShowFinder extends AbstractUastVisitor {
/** The target makeText call */
private final UExpression mTarget;
/** Whether we've found the show method */
@@ -60,7 +60,7 @@ import org.jetbrains.uast.UElement;
import org.jetbrains.uast.UVariable;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.UastVisitor;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -530,7 +530,7 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements UastS
}
@Override
public UastVisitor createUastVisitor(@NonNull UastAndroidContext context) {
public AbstractUastVisitor createUastVisitor(@NonNull UastAndroidContext context) {
if (mReferences != null) {
return new UnusedResourceVisitor();
} else {
@@ -540,7 +540,7 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements UastS
}
// Look for references and declarations
private class UnusedResourceVisitor extends UastVisitor {
private class UnusedResourceVisitor extends AbstractUastVisitor {
@Override
public boolean visitClass(@NotNull UClass node) {
// Look for declarations of R class fields and store them in
@@ -28,13 +28,13 @@ import com.android.tools.klint.detector.api.Severity;
import com.android.tools.klint.detector.api.Speed;
import com.google.common.collect.Lists;
import java.util.Iterator;
import java.util.List;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
/**
@@ -83,7 +83,7 @@ public class ViewHolderDetector extends Detector implements UastScanner {
return new ViewAdapterVisitor(context);
}
private static class ViewAdapterVisitor extends UastVisitor {
private static class ViewAdapterVisitor extends AbstractUastVisitor {
private final UastAndroidContext mContext;
public ViewAdapterVisitor(UastAndroidContext context) {
@@ -121,7 +121,7 @@ public class ViewHolderDetector extends Detector implements UastScanner {
}
}
private static class InflationVisitor extends UastVisitor {
private static class InflationVisitor extends AbstractUastVisitor {
private final UastAndroidContext mContext;
private List<UElement> mNodes;
private boolean mHaveConditional;
@@ -30,6 +30,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.UImportStatement;
import org.jetbrains.uast.check.UastAndroidContext;
import org.jetbrains.uast.check.UastScanner;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import org.jetbrains.uast.visitor.UastVisitor;
/**
@@ -80,7 +81,7 @@ public class WrongImportDetector extends Detector implements UastScanner {
return new ImportVisitor(context);
}
private static class ImportVisitor extends UastVisitor {
private static class ImportVisitor extends AbstractUastVisitor {
private final UastAndroidContext mContext;
public ImportVisitor(UastAndroidContext context) {
@@ -49,7 +49,7 @@ class AndroidModelFacade(val facet: AndroidFacet) {
fun getDependsOn(artifact: String): Boolean {
val model = model ?: return false
return GradleUtil::class.staticFunctions.firstOrNull {
val type = it.parameters[0].type.toString()
val type = it.parameters.firstOrNull()?.type?.toString() ?: ""
it.parameters.size == 2 && "IdeaAndroidProject" in type || "AndroidGradleModel" in type
}?.call(model, artifact) as? Boolean ?: false
}
@@ -21,5 +21,5 @@ import org.jetbrains.kotlin.uast.KotlinUastLanguagePlugin
class KotlinLintLanguageExtension : LintLanguageExtension() {
override val converter = KotlinUastLanguagePlugin.converter
override val additionalCheckers = KotlinUastLanguagePlugin.additionalCheckers
override val visitorExtensions = KotlinUastLanguagePlugin.visitorExtensions
}
@@ -27,6 +27,8 @@ import org.jetbrains.uast.*
import org.jetbrains.uast.UastCallKind.Companion.CONSTRUCTOR_CALL
import org.jetbrains.uast.UastCallKind.Companion.FUNCTION_CALL
import org.jetbrains.uast.java.JavaUastLanguagePlugin
import org.jetbrains.uast.visitor.AbstractUastVisitor
import org.jetbrains.uast.visitor.UastExtendableVisitor
import org.jetbrains.uast.visitor.UastVisitor
import java.io.File
@@ -42,6 +44,7 @@ object UastChecker {
val vfile = VirtualFileManager.getInstance().findFileByUrl("file://" + file.absolutePath) ?: return
val plugins = context.languagePlugins
val extendableVisitor = UastExtendableVisitor(visitor, context, plugins.flatMap { it.visitorExtensions })
ApplicationManager.getApplication().runReadAction {
val psiFile = PsiManager.getInstance(project).findFile(vfile)
@@ -50,12 +53,12 @@ object UastChecker {
when (psiFile) {
is PsiJavaFile -> {
val ufile = JavaUastLanguagePlugin.converter.convertWithParent(psiFile)
ufile?.accept(visitor)
ufile?.accept(extendableVisitor)
}
else -> for (plugin in plugins) {
val ufile = plugin.converter.convertWithParent(psiFile)
if (ufile != null) {
ufile.accept(visitor)
ufile.accept(extendableVisitor)
break
}
}
@@ -71,7 +74,7 @@ object UastChecker {
val appliesToResourcesRefs = scanner.appliesToResourceRefs()
val visitor = object : UastVisitor() {
val visitor = object : AbstractUastVisitor() {
override fun visitCallExpression(node: UCallExpression): Boolean {
if (applicableFunctionNames.isNotEmpty()) {
if (node.kind == FUNCTION_CALL && node.functionName in applicableFunctionNames) {