mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-53471 (New inspection: split "static import" inspection by field & method)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user