[devkit] UndesirableClassUsageInspection -> UAST

This commit is contained in:
Yann Cébron
2017-04-06 18:14:38 +02:00
parent 849f242cce
commit c970aac1a2
2 changed files with 29 additions and 22 deletions
+1 -1
View File
@@ -86,7 +86,7 @@
level="WARNING"
implementationClass="org.jetbrains.idea.devkit.inspections.InspectionMappingConsistencyInspection"/>
<localInspection language="JAVA" shortName="UndesirableClassUsage" displayName="Undesirable class usage"
<localInspection language="UAST" shortName="UndesirableClassUsage" displayName="Undesirable class usage"
groupKey="inspections.group.name"
enabledByDefault="true" level="WARNING"
implementationClass="org.jetbrains.idea.devkit.inspections.internal.UndesirableClassUsageInspection"/>
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,22 +19,29 @@ import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.openapi.application.QueryExecutorBase;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.psi.*;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTypesUtil;
import com.intellij.uast.UastVisitorAdapter;
import com.intellij.ui.components.JBList;
import com.intellij.ui.components.JBScrollPane;
import com.intellij.ui.components.JBTabbedPane;
import com.intellij.ui.table.JBTable;
import com.intellij.ui.treeStructure.Tree;
import com.intellij.util.ObjectUtils;
import com.intellij.util.QueryExecutor;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.devkit.inspections.DevKitInspectionBase;
import org.jetbrains.idea.devkit.inspections.DevKitUastInspectionBase;
import org.jetbrains.uast.UCallExpression;
import org.jetbrains.uast.UastCallKind;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.util.Map;
public class UndesirableClassUsageInspection extends DevKitInspectionBase {
public class UndesirableClassUsageInspection extends DevKitUastInspectionBase {
private static final Map<String, String> CLASSES = ContainerUtil.<String, String>immutableMapBuilder()
.put(JList.class.getName(), JBList.class.getName())
@@ -50,23 +57,23 @@ public class UndesirableClassUsageInspection extends DevKitInspectionBase {
@Override
@NotNull
public PsiElementVisitor buildInternalVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
return new UastVisitorAdapter(new AbstractUastVisitor() {
@Override
public void visitNewExpression(PsiNewExpression expression) {
PsiJavaCodeReferenceElement ref = expression.getClassReference();
if (ref == null) return;
PsiElement res = ref.resolve();
if (res == null) return;
String name = ((PsiClass)res).getQualifiedName();
if (name == null) return;
String replacement = CLASSES.get(name);
if (replacement == null) return;
holder.registerProblem(expression, "Please use '" + replacement + "' instead", ProblemHighlightType.LIKE_DEPRECATED);
public boolean visitCallExpression(@NotNull UCallExpression expression) {
if (expression.getKind() == UastCallKind.CONSTRUCTOR_CALL) {
final PsiClass psiClass = PsiTypesUtil.getPsiClass(expression.getReturnType());
if (psiClass != null) {
final String name = psiClass.getQualifiedName();
String replacement = CLASSES.get(name);
if (replacement != null) {
holder.registerProblem(ObjectUtils.assertNotNull(expression.getPsi()),
"Please use '" + replacement + "' instead",
ProblemHighlightType.LIKE_DEPRECATED);
}
}
}
return true;
}
};
});
}
}
}