IDEA-53471 (New inspection: split "static import" inspection by field & method)

This commit is contained in:
Bas Leijdekkers
2010-04-05 11:38:40 +02:00
parent 7dcdc81814
commit f59e1d94db
2 changed files with 67 additions and 19 deletions
@@ -1727,7 +1727,7 @@ int.literal.may.be.long.literal.display.name=int literal cast to long could be l
int.literal.may.be.long.literal.problem.descriptor=<code>#ref</code> could be replaced with ''{0}''
int.literal.may.be.long.literal.quickfix=Replace with ''{0}''
constant.assert.condition.display.name='assert' statement condition is constant
constant.assert.condition.problem.descriptor=assert condition <code>#ref</code> is constant
constant.assert.condition.problem.descriptor=Assert condition <code>#ref</code> is constant
assert.with.side.effects.display.name='assert' statement with side effects
assert.with.side.effects.problem.descriptor=<code>#ref</code> has side effects #loc
method.count.ignore.getters.setters.option=&Ignore simple getter and setter methods
@@ -1761,3 +1761,5 @@ remove.try.finally.block.quickfix=Remove try-finally block
remove.finally.block.quickfix=Remove finally block
remove.leading.zero.to.make.decimal.quickfix=Remove leading zero to make decimal
convert.octal.literal.to.decimal.literal.quickfix=Convert octal literal to decimal literal
ignore.single.field.static.imports=Ignore single &field static imports
ignore.single.method.static.imports=Ignore single &method static imports
@@ -26,8 +26,10 @@ import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.psiutils.StringUtils;
import com.siyeh.ig.ui.MultipleCheckboxOptionsPanel;
import org.jetbrains.annotations.NotNull;
import javax.swing.JComponent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -35,33 +37,51 @@ import java.util.Map;
public class StaticImportInspection extends BaseInspection {
@SuppressWarnings({"PublicField"})
public boolean ignoreSingleFieldImports = false;
@SuppressWarnings({"PublicField"})
public boolean ignoreSingeMethodImports = false;
@Override
@NotNull
public String getDisplayName(){
public String getDisplayName() {
return InspectionGadgetsBundle.message("static.import.display.name");
}
@Override
@NotNull
public String buildErrorString(Object... infos){
public String buildErrorString(Object... infos) {
return InspectionGadgetsBundle.message(
"static.import.problem.descriptor");
}
@Override
public BaseInspectionVisitor buildVisitor(){
public JComponent createOptionsPanel() {
final MultipleCheckboxOptionsPanel panel =
new MultipleCheckboxOptionsPanel(this);
panel.addCheckbox(InspectionGadgetsBundle.message(
"ignore.single.field.static.imports"),
"ignoreSingleFieldImports");
panel.addCheckbox(InspectionGadgetsBundle.message(
"ignore.single.method.static.imports"),
"ignoreSingeMethodImports");
return panel;
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new StaticImportVisitor();
}
@Override
protected InspectionGadgetsFix buildFix(Object... infos){
protected InspectionGadgetsFix buildFix(Object... infos) {
return new StaticImportFix();
}
private static class StaticImportFix extends InspectionGadgetsFix{
@NotNull
public String getName(){
public String getName() {
return InspectionGadgetsBundle.message(
"static.import.replace.quickfix");
}
@@ -234,7 +254,7 @@ public class StaticImportInspection extends BaseInspection {
return false;
}
final PsiElement target = reference.resolve();
if(!(target instanceof PsiClass)) {
if (!(target instanceof PsiClass)) {
return false;
}
final PsiClass aClass = (PsiClass) target;
@@ -249,33 +269,59 @@ public class StaticImportInspection extends BaseInspection {
}
}
private static class StaticImportVisitor extends BaseInspectionVisitor{
private class StaticImportVisitor extends BaseInspectionVisitor{
@Override public void visitClass(@NotNull PsiClass aClass){
@Override public void visitClass(@NotNull PsiClass aClass) {
// no call to super, so it doesn't drill down
if(!(aClass.getParent() instanceof PsiJavaFile)){
if (!(aClass.getParent() instanceof PsiJavaFile)) {
return;
}
if (JspPsiUtil.isInJspFile(aClass.getContainingFile())) {
return;
}
if (JspPsiUtil.isInJspFile(aClass.getContainingFile())) {
return;
}
final PsiJavaFile file = (PsiJavaFile) aClass.getParent();
if(file == null){
if (file == null) {
return;
}
if(!file.getClasses()[0].equals(aClass)){
if (!file.getClasses()[0].equals(aClass)) {
return;
}
final PsiImportList importList = file.getImportList();
if(importList == null){
if (importList == null) {
return;
}
final PsiImportStaticStatement[] importStatements =
importList.getImportStaticStatements();
for(final PsiImportStaticStatement importStatement :
importStatements){
registerError(importStatement);
for (PsiImportStaticStatement importStatement : importStatements) {
if (shouldReportImportStatement(importStatement)) {
registerError(importStatement);
}
}
}
private boolean shouldReportImportStatement(
PsiImportStatementBase importStatement) {
if (importStatement.isOnDemand()) {
return true;
}
final PsiReference importReference =
importStatement.getImportReference();
if (importReference == null) {
return false;
}
if (ignoreSingleFieldImports || ignoreSingeMethodImports) {
final PsiElement target = importReference.resolve();
if (target != null && target instanceof PsiField) {
if (ignoreSingleFieldImports) {
return false;
}
} else {
if (ignoreSingeMethodImports) {
return false;
}
}
}
return true;
}
}
}