Replace UastConverter with UastLanguagePlugin, allow additional checkers

This commit is contained in:
Yan Zhulanow
2016-03-10 16:25:18 +03:00
parent 4ef6016ee8
commit d1939d52bc
16 changed files with 105 additions and 68 deletions
@@ -16,12 +16,23 @@
package com.android.tools.klint.client.api;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.UastAdditionalChecker;
import org.jetbrains.uast.UastConverter;
import org.jetbrains.uast.java.JavaConverter;
import org.jetbrains.uast.java.JavaUastLanguagePlugin;
import java.util.List;
public class JavaLintLanguageExtension extends LintLanguageExtension {
@NotNull
@Override
public UastConverter getConverter() {
return JavaConverter.INSTANCE;
return JavaUastLanguagePlugin.INSTANCE.getConverter();
}
@NotNull
@Override
public List<UastAdditionalChecker> getAdditionalCheckers() {
return JavaUastLanguagePlugin.INSTANCE.getAdditionalCheckers();
}
}
@@ -40,7 +40,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.io.Files;
import org.jetbrains.uast.UastConverter;
import org.jetbrains.uast.UastLanguagePlugin;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
@@ -386,7 +386,7 @@ public abstract class LintClient {
return null;
}
public List<UastConverter> getConverters() {
public List<UastLanguagePlugin> getLanguagePlugins() {
return Collections.emptyList();
}
@@ -1445,7 +1445,7 @@ public class LintDriver {
if (ideaProject == null) {
return;
}
List<UastConverter> converters = mClient.getConverters();
List<UastLanguagePlugin> plugins = mClient.getLanguagePlugins();
for (JavaContext context : contexts) {
fireEvent(LintListener.EventType.SCANNING_FILE, context);
@@ -1456,10 +1456,10 @@ public class LintDriver {
UastVisitor customVisitor = scanner.createUastVisitor(context);
if (customVisitor != null) {
UastChecker.INSTANCE.checkWithCustomHandler(
ideaProject, context.file, converters, customVisitor);
ideaProject, context.file, plugins, customVisitor);
} else {
UastChecker.INSTANCE.check(
ideaProject, context.file, (UastScanner)check, converters, context);
ideaProject, context.file, (UastScanner)check, plugins, context);
}
}
}
@@ -1498,7 +1498,7 @@ public class LintDriver {
}
UastChecker checker = UastChecker.INSTANCE;
List<UastConverter> converters = project.getClient().getConverters();
List<UastLanguagePlugin> plugins = project.getClient().getLanguagePlugins();
for (File file : files) {
if (!file.isFile()) {
@@ -1506,7 +1506,7 @@ public class LintDriver {
}
String path = file.getPath();
if (!path.endsWith(DOT_JAVA) && !UastConverterUtils.isFileSupported(converters, path)) {
if (!path.endsWith(DOT_JAVA) && !UastConverterUtils.isFileSupported(plugins, path)) {
continue;
}
@@ -1516,9 +1516,9 @@ public class LintDriver {
for (UastScanner detector : detectors) {
UastVisitor customHandler = detector.createUastVisitor(context);
if (customHandler != null) {
checker.checkWithCustomHandler(intellijProject, file, converters, customHandler);
checker.checkWithCustomHandler(intellijProject, file, plugins, customHandler);
} else {
checker.check(intellijProject, file, detector, converters, context);
checker.check(intellijProject, file, detector, plugins, context);
}
}
}
@@ -2043,9 +2043,8 @@ public class LintDriver {
}
@Override
public List<UastConverter> getConverters() {
return mDelegate.getConverters();
public List<UastLanguagePlugin> getLanguagePlugins() {
return mDelegate.getLanguagePlugins();
}
}
@@ -16,22 +16,18 @@
package com.android.tools.klint.client.api;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.project.Project;
import org.jetbrains.uast.UastConverter;
import org.jetbrains.uast.UastLanguagePlugin;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public abstract class LintLanguageExtension {
public abstract class LintLanguageExtension implements UastLanguagePlugin {
public static final ExtensionPointName<LintLanguageExtension> EP_NAME =
ExtensionPointName.create("com.android.tools.lint.client.api.lintLanguageExtension");
@NonNull
public abstract UastConverter getConverter();
ExtensionPointName.create("com.android.tools.klint.client.api.lintLanguageExtension");
public static boolean isFileSupported(@Nullable Project project, String path) {
LintLanguageExtension[] extensions = getExtensions(project);
@@ -44,16 +40,14 @@ public abstract class LintLanguageExtension {
return false;
}
public static List<UastConverter> getConverters(@Nullable Project project) {
public static List<UastLanguagePlugin> getPlugins(@Nullable Project project) {
if (project == null) {
return Collections.emptyList();
}
LintLanguageExtension[] languageExtensions = project.getExtensions(EP_NAME);
List<UastConverter> converters = new ArrayList<UastConverter>(languageExtensions.length);
for (LintLanguageExtension extension : languageExtensions) {
converters.add(extension.getConverter());
}
List<UastLanguagePlugin> converters = new ArrayList<UastLanguagePlugin>(languageExtensions.length);
Collections.addAll(converters, languageExtensions);
return converters;
}
@@ -155,8 +155,8 @@ public class JavaContext extends Context implements UastAndroidContext {
@NotNull
@Override
public List<UastConverter> getConverters() {
return getClient().getConverters();
public List<UastLanguagePlugin> getLanguagePlugins() {
return getClient().getLanguagePlugins();
}
@org.jetbrains.annotations.Nullable
@@ -203,7 +203,7 @@ public enum Scope {
scope.add(BINARY_RESOURCE_FILE);
scope.add(RESOURCE_FOLDER);
} else if (UastConverterUtils.isFileSupported(
project.getClient().getConverters(), name)) {
project.getClient().getLanguagePlugins(), name)) {
scope.add(SOURCE_FILE);
}
}