diff --git a/plugins/InspectionGadgets/Leftovers.txt b/plugins/InspectionGadgets/Leftovers.txt index b81293ddb6a5..e3fd27f8da1c 100644 --- a/plugins/InspectionGadgets/Leftovers.txt +++ b/plugins/InspectionGadgets/Leftovers.txt @@ -23,13 +23,13 @@ Tail recursion quickfix Make "Merge else-if" understand chained returning ifs "Extract method" as quickfix to overly complex expression + Flag on class without no-arg constructor Static inheritance fix Fixes for the assignment and return encapsulation inspections Static import fix Fixes for call to super for JUnit setUp() and tearDown() Check IDs for all inspections Flag inspections with default on-off and default warning level - Check that refactoring quickfixes are only available on-the-fly Quick fix for "Constant StringBuffer may be String" Quick fix for Non-constant String should be StringBuffer Quick fix for "String concatenation in loop" @@ -37,8 +37,6 @@ Genericize "StringBuffer.toString() in concatenation" Split "Portability Issues" into "Portability Issues" and "JDK issues" QuickFix for "Confusing else Branch" - QuickFix for "Conditional expression with negated condition" - QuickFix for "Method names differing only by case" QuickFix for "Integer difision in floating point context" Quickfix for "Non-serializable class with..." Quickfix for "Unnecessary default" diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspection.java index b6d8808f1fb1..3b161741aefb 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspection.java @@ -33,10 +33,6 @@ public abstract class BaseInspection extends LocalInspectionTool { return false; } - protected boolean buildQuickFixesOnlyForBatchErrors() { - return false; - } - protected InspectionGadgetsFix buildFix(PsiElement location) { return null; } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java b/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java index 3a78cdf28239..d5cb8c567d35 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java @@ -92,8 +92,6 @@ public abstract class BaseInspectionVisitor extends PsiRecursiveElementVisitor { final LocalQuickFix fix; if (!m_onTheFly && m_inspection.buildQuickFixesOnlyForOnTheFlyErrors()) { fix = null; - } else if (m_onTheFly && m_inspection.buildQuickFixesOnlyForBatchErrors()) { - fix = null; } else { fix = m_inspection.buildFix(location); } @@ -115,8 +113,6 @@ public abstract class BaseInspectionVisitor extends PsiRecursiveElementVisitor { final LocalQuickFix fix; if (!m_onTheFly && m_inspection.buildQuickFixesOnlyForOnTheFlyErrors()) { fix = null; - } else if (m_onTheFly && m_inspection.buildQuickFixesOnlyForBatchErrors()) { - fix = null; } else { fix = m_inspection.buildFix(location); } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java b/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java index 339894fe3fce..227bc585756f 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java @@ -54,20 +54,20 @@ import java.util.Collections; import java.util.List; public class InspectionGadgetsPlugin implements ApplicationComponent, - InspectionToolProvider { + InspectionToolProvider{ private static final int NUM_INSPECTIONS = 360; private final List m_inspectionClasses = new ArrayList(NUM_INSPECTIONS); - public static void main(String[] args) { + public static void main(String[] args){ final InspectionGadgetsPlugin plugin = new InspectionGadgetsPlugin(); final PrintStream out; - if (args.length == 0) { + if(args.length == 0){ out = System.out; - } else { + } else{ final OutputStream stream; - try { + try{ stream = new FileOutputStream(args[0]); - } catch (final FileNotFoundException e) { + } catch(final FileNotFoundException e){ return; } out = new PrintStream(stream); @@ -75,7 +75,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, plugin.createDocumentation(out); } - private void createDocumentation(PrintStream out) { + private void createDocumentation(PrintStream out){ initComponent(); final Class[] classes = getInspectionClasses(); String currentGroupName = ""; @@ -84,77 +84,86 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, out.println(classes.length + " Inspections"); out.println(numQuickFixes + " Quick Fixes"); - for (int i = 0; i < classes.length; i++) { + for(int i = 0; i < classes.length; i++){ final Class aClass = classes[i]; final String className = aClass.getName(); - try { - final LocalInspectionTool inspection = (LocalInspectionTool) aClass.newInstance(); - final String groupDisplayName = inspection.getGroupDisplayName(); - if (!groupDisplayName.equals(currentGroupName)) { + try{ + final LocalInspectionTool inspection = + (LocalInspectionTool) aClass.newInstance(); + final String groupDisplayName = + inspection.getGroupDisplayName(); + if(!groupDisplayName.equals(currentGroupName)){ currentGroupName = groupDisplayName; out.println(); out.print(" * "); out.println(currentGroupName); } printInspectionDescription(inspection, out); - - } catch (InstantiationException e) { + } catch(InstantiationException e){ out.print("Couldn't instantiate "); out.println(className); - } catch (IllegalAccessException e) { + } catch(IllegalAccessException e){ out.print("Couldn't access "); out.println(className); - } catch (ClassCastException e) { + } catch(ClassCastException e){ out.print("Couldn't cast "); out.println(className); } } - for (int i = 0; i < classes.length; i++) { + for(int i = 0; i < classes.length; i++){ final Class aClass = classes[i]; final String className = aClass.getName(); - final String simpleClassName = className.substring(className.lastIndexOf('.') + 1, className.length() - "Inspection".length()); - final String fileName = "C:/InspectionGadgetsSVN/src/inspectionDescriptions/" + simpleClassName + ".html"; - if (!new File(fileName).exists()) { + final String simpleClassName = + className.substring(className.lastIndexOf('.') + 1, + className.length() - + "Inspection".length()); + final String fileName = + "C:/InspectionGadgetsSVN/src/inspectionDescriptions/" + + simpleClassName + ".html"; + if(!new File(fileName).exists()){ out.println("Couldn't find documentation file " + fileName); } } } - private static void printInspectionDescription(LocalInspectionTool inspection, PrintStream out) { + private static void printInspectionDescription(LocalInspectionTool inspection, + PrintStream out){ final boolean hasQuickFix = ((BaseInspection) inspection).hasQuickFix(); final String displayName = inspection.getDisplayName(); - if (hasQuickFix) { - out.print(" * "); - out.print(displayName); - out.println("(*)"); - } else { - out.print(" * "); - out.println(displayName); + out.print(" * "); + out.print(displayName); + if(hasQuickFix){ + if(((BaseInspection) inspection).buildQuickFixesOnlyForOnTheFlyErrors()){ + out.print("(r)"); + } else{ + out.print("(*)"); + } } + out.println(); } - private static int countQuickFixes(Class[] classes, PrintStream out) { + private static int countQuickFixes(Class[] classes, PrintStream out){ int numQuickFixes = 0; - for (int i = 0; i < classes.length; i++) { + for(int i = 0; i < classes.length; i++){ final Class aClass = classes[i]; final String className = aClass.getName(); - try { - final LocalInspectionTool inspection = (LocalInspectionTool) aClass.newInstance(); - if (inspection instanceof BaseInspection) { - if (((BaseInspection) inspection).hasQuickFix()) { + try{ + final LocalInspectionTool inspection = + (LocalInspectionTool) aClass.newInstance(); + if(inspection instanceof BaseInspection){ + if(((BaseInspection) inspection).hasQuickFix()){ numQuickFixes++; } } - - } catch (InstantiationException e) { + } catch(InstantiationException e){ out.print("Couldn't instantiate "); out.println(className); - } catch (IllegalAccessException e) { + } catch(IllegalAccessException e){ out.print("Couldn't access "); out.println(className); - } catch (ClassCastException e) { + } catch(ClassCastException e){ out.print("Couldn't cast "); out.println(className); } @@ -162,21 +171,21 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, return numQuickFixes; } - public static InspectionGadgetsPlugin getInstance() { + public static InspectionGadgetsPlugin getInstance(){ final Application application = ApplicationManager.getApplication(); return (InspectionGadgetsPlugin) application.getComponent(InspectionGadgetsPlugin.class); } - public String getComponentName() { + public String getComponentName(){ return "InspectionGadgets"; } - public Class[] getInspectionClasses() { + public Class[] getInspectionClasses(){ final int numInspections = m_inspectionClasses.size(); return (Class[]) m_inspectionClasses.toArray(new Class[numInspections]); } - public void initComponent() { + public void initComponent(){ registerNamingInspections(); registerBugInspections(); registerCloneInspections(); @@ -208,13 +217,13 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, Collections.sort(m_inspectionClasses, new InspectionComparator()); } - private void registerResourceManagementInspections() { + private void registerResourceManagementInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(IOResourceInspection.class); inspectionClasses.add(JDBCResourceInspection.class); } - private void registerDependencyInspections() { + private void registerDependencyInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(LocalButterflyInspection.class); inspectionClasses.add(LocalBreakableInspection.class); @@ -225,21 +234,21 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(TangleInspection.class); } - private void registerLoggingInspections() { + private void registerLoggingInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(ClassWithoutLoggerInspection.class); inspectionClasses.add(ClassWithMultipleLoggersInspection.class); inspectionClasses.add(NonStaticFinalLoggerInspection.class); } - private void registerPackagingInspections() { + private void registerPackagingInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(PackageSizeInspection.class); inspectionClasses.add(PackageEncapsulationInspection.class); inspectionClasses.add(PackageTangleInspection.class); } - private void registerSecurityInspections() { + private void registerSecurityInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(DeserializableClassInSecureContextInspection.class); inspectionClasses.add(SerializableClassInSecureContextInspection.class); @@ -247,7 +256,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(NonStaticInnerClassInSecureContextInspection.class); } - private void registerImportInspections() { + private void registerImportInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(UnusedImportInspection.class); inspectionClasses.add(RedundantImportInspection.class); @@ -258,7 +267,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(StaticImportInspection.class); } - private void registerNamingInspections() { + private void registerNamingInspections(){ final List inspectionClasses = m_inspectionClasses; //inspectionClasses.add(PackageNamingConventionInspection.class); inspectionClasses.add(ClassNamingConventionInspection.class); @@ -284,7 +293,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(DollarSignInNameInspection.class); } - private void registerBugInspections() { + private void registerBugInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(IntegerDivisionInFloatingPointContextInspection.class); inspectionClasses.add(NonShortCircuitBooleanInspection.class); @@ -329,7 +338,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(CompareToUsesNonFinalVariableInspection.class); } - private void registerAbstractionInspections() { + private void registerAbstractionInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(DuplicateStringLiteralInspection.class); inspectionClasses.add(FeatureEnvyInspection.class); @@ -351,7 +360,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(InstanceofThisInspection.class); } - private void registerClassLayoutInspections() { + private void registerClassLayoutInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(FinalClassInspection.class); inspectionClasses.add(EmptyClassInspection.class); @@ -388,15 +397,14 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(MarkerInterfaceInspection.class); } - private void registerCloneInspections() { + private void registerCloneInspections(){ m_inspectionClasses.add(CloneableImplementsCloneInspection.class); m_inspectionClasses.add(CloneCallsConstructorsInspection.class); m_inspectionClasses.add(CloneCallsSuperCloneInspection.class); m_inspectionClasses.add(CloneDeclaresCloneNotSupportedInspection.class); - } - private void registerVisibilityInspections() { + private void registerVisibilityInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(FieldHidesSuperclassFieldInspection.class); inspectionClasses.add(InnerClassVariableHidesOuterClassVariableInspection.class); @@ -407,7 +415,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(MethodOverloadsParentMethodInspection.class); } - private void registerEncapsulationInspections() { + private void registerEncapsulationInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(PublicFieldInspection.class); inspectionClasses.add(PackageVisibleFieldInspection.class); @@ -422,7 +430,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(AssignmentToDateFieldFromParameterInspection.class); } - private void registerInitializerInspections() { + private void registerInitializerInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(StaticVariableInitializationInspection.class); inspectionClasses.add(InstanceVariableInitializationInspection.class); @@ -433,7 +441,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(InstanceVariableUninitializedUseInspection.class); } - private void registerConfusingInspections() { + private void registerConfusingInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(ClassEscapesItsScopeInspection.class); inspectionClasses.add(ConfusingFloatingPointLiteralInspection.class); @@ -473,7 +481,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(SwitchStatementWithConfusingDeclarationInspection.class); } - private void registerVerboseInspections() { + private void registerVerboseInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(UnnecessaryLabelOnBreakStatementInspection.class); inspectionClasses.add(UnnecessaryLabelOnContinueStatementInspection.class); @@ -509,7 +517,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(ForCanBeForeachInspection.class); } - private void registerStyleInspections() { + private void registerStyleInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(ReturnThisInspection.class); inspectionClasses.add(ConstantOnLHSOfComparisonInspection.class); @@ -523,7 +531,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(UnnecessarilyQualifiedStaticUsageInspection.class); } - private void registerExceptionInspections() { + private void registerExceptionInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(CatchGenericClassInspection.class); inspectionClasses.add(EmptyCatchBlockInspection.class); @@ -547,7 +555,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(InstanceofCatchParameterInspection.class); } - private void registerFinalizationInspections() { + private void registerFinalizationInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(FinalizeInspection.class); inspectionClasses.add(FinalizeNotProtectedInspection.class); @@ -555,7 +563,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(NoExplicitFinalizeCallsInspection.class); } - private void registerSerializationInspections() { + private void registerSerializationInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(SerializableHasSerializationMethodsInspection.class); inspectionClasses.add(SerializableHasSerialVersionUIDFieldInspection.class); @@ -573,7 +581,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(SerializableInnerClassWithNonSerializableOuterClassInspection.class); } - private void registerThreadingInspections() { + private void registerThreadingInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(DoubleCheckedLockingInspection.class); inspectionClasses.add(BusyWaitInspection.class); @@ -600,7 +608,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(FieldAccessedSynchronizedAndUnsynchronizedInspection.class); } - private void registerMethodMetricsInspections() { + private void registerMethodMetricsInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(ThreeNegationsPerMethodInspection.class); inspectionClasses.add(MethodWithMultipleLoopsInspection.class); @@ -612,7 +620,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(MethodCouplingInspection.class); } - private void registerClassMetricsInspections() { + private void registerClassMetricsInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(AnonymousClassComplexityInspection.class); inspectionClasses.add(AnonymousClassMethodCountInspection.class); @@ -625,7 +633,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(FieldCountInspection.class); } - private void registerPortabilityInspections() { + private void registerPortabilityInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(RuntimeExecInspection.class); inspectionClasses.add(SystemExitInspection.class); @@ -646,7 +654,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(UseOfSunClassesInspection.class); } - private void registerInternationalInspections() { + private void registerInternationalInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(StringLiteralInspection.class); inspectionClasses.add(CharacterComparisonInspection.class); @@ -663,7 +671,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(SimpleDateFormatWithoutLocaleInspection.class); } - private void registerPerformanceInspections() { + private void registerPerformanceInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(ObjectAllocationInLoopInspection.class); inspectionClasses.add(UnnecessaryTemporaryOnConversionToStringInspection.class); @@ -696,7 +704,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(ZeroLengthArrayInitializationInspection.class); } - private void registerMaturityInspections() { + private void registerMaturityInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(SystemOutErrInspection.class); inspectionClasses.add(ThrowablePrintStackTraceInspection.class); @@ -705,7 +713,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(ObsoleteCollectionInspection.class); } - private void registerJUnitInspections() { + private void registerJUnitInspections(){ final List inspectionClasses = m_inspectionClasses; inspectionClasses.add(AssertsWithoutMessagesInspection.class); inspectionClasses.add(TestCaseWithConstructorInspection.class); @@ -725,7 +733,6 @@ public class InspectionGadgetsPlugin implements ApplicationComponent, inspectionClasses.add(UnconstructableTestCaseInspection.class); } - public void disposeComponent() { - + public void disposeComponent(){ } } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/AnonymousInnerClassInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/AnonymousInnerClassInspection.java index 3c052ac70c98..43c2e3da0c05 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/AnonymousInnerClassInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/AnonymousInnerClassInspection.java @@ -25,6 +25,9 @@ public class AnonymousInnerClassInspection extends ClassInspection { return fix; } + protected boolean buildQuickFixesOnlyForOnTheFlyErrors(){ + return true; + } public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, boolean onTheFly) { return new AnonymousInnerClassVisitor(this, inspectionManager, onTheFly); } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/LimitedScopeInnerClassInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/LimitedScopeInnerClassInspection.java index e9a442eeba5d..d1f7341a043d 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/LimitedScopeInnerClassInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/LimitedScopeInnerClassInspection.java @@ -24,6 +24,9 @@ public class LimitedScopeInnerClassInspection extends ClassInspection { return fix; } + protected boolean buildQuickFixesOnlyForOnTheFlyErrors(){ + return true; + } public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, boolean onTheFly) { return new LimitedScopeInnerClassVisitor(this, inspectionManager, onTheFly); } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/ConfusingElseInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/ConfusingElseInspection.java index 5e56cf527599..2e384ec7c229 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/ConfusingElseInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/ConfusingElseInspection.java @@ -4,7 +4,6 @@ import com.intellij.codeInspection.InspectionManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiIfStatement; import com.intellij.psi.PsiStatement; -import com.intellij.psi.PsiWhiteSpace; import com.intellij.psi.util.PsiTreeUtil; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; @@ -48,8 +47,6 @@ public class ConfusingElseInspection extends StatementInspection { if (elseBranch instanceof PsiIfStatement) { return; } - - if (ControlFlowUtils.statementMayCompleteNormally(thenBranch)) { return; } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/MethodNamesDifferOnlyByCaseInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/MethodNamesDifferOnlyByCaseInspection.java index 97e4a856dad2..5518e9b291b6 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/MethodNamesDifferOnlyByCaseInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/MethodNamesDifferOnlyByCaseInspection.java @@ -4,13 +4,14 @@ import com.intellij.codeInspection.InspectionManager; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiIdentifier; import com.intellij.psi.PsiMethod; -import com.siyeh.ig.BaseInspection; -import com.siyeh.ig.BaseInspectionVisitor; -import com.siyeh.ig.GroupNames; -import com.siyeh.ig.MethodInspection; +import com.intellij.psi.PsiElement; +import com.siyeh.ig.*; +import com.siyeh.ig.fixes.RenameFix; public class MethodNamesDifferOnlyByCaseInspection extends MethodInspection { + private final RenameFix fix = new RenameFix(); + public String getDisplayName() { return "Method names differing only by case"; } @@ -27,6 +28,14 @@ public class MethodNamesDifferOnlyByCaseInspection extends MethodInspection { return new OverloadedMethodsWithSameNumberOfParametersVisitor(this, inspectionManager, onTheFly); } + protected boolean buildQuickFixesOnlyForOnTheFlyErrors(){ + return true; + } + + protected InspectionGadgetsFix buildFix(PsiElement location){ + return fix; + } + private static class OverloadedMethodsWithSameNumberOfParametersVisitor extends BaseInspectionVisitor { private OverloadedMethodsWithSameNumberOfParametersVisitor(BaseInspection inspection, InspectionManager inspectionManager, boolean isOnTheFly) { diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/NegatedConditionalInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/NegatedConditionalInspection.java index 38c47c4c9ce3..8d875ff25cc2 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/NegatedConditionalInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/NegatedConditionalInspection.java @@ -1,101 +1,133 @@ package com.siyeh.ig.confusing; import com.intellij.codeInspection.InspectionManager; +import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; -import com.siyeh.ig.BaseInspection; -import com.siyeh.ig.BaseInspectionVisitor; -import com.siyeh.ig.ExpressionInspection; -import com.siyeh.ig.GroupNames; +import com.intellij.openapi.project.Project; +import com.siyeh.ig.*; +import com.siyeh.ig.psiutils.BoolUtils; import com.siyeh.ig.ui.SingleCheckboxOptionsPanel; import javax.swing.*; -public class NegatedConditionalInspection extends ExpressionInspection { +public class NegatedConditionalInspection extends ExpressionInspection{ public boolean m_ignoreNegatedNullComparison = true; + private final NegatedConditionalFix fix = new NegatedConditionalFix(); - public String getDisplayName() { + public String getDisplayName(){ return "Conditional expression with negated condition"; } - public String getGroupDisplayName() { + public String getGroupDisplayName(){ return GroupNames.CONFUSING_GROUP_NAME; } - protected BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, boolean onTheFly) { + protected BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, + boolean onTheFly){ return new NegatedConditionalVisitor(this, inspectionManager, onTheFly); } - public String buildErrorString(PsiElement location) { + public String buildErrorString(PsiElement location){ return "Conditional expression with negated condition #loc"; } - public JComponent createOptionsPanel() { + public JComponent createOptionsPanel(){ return new SingleCheckboxOptionsPanel("Ignore '!= null' comparisons", - this, "m_ignoreNegatedNullComparison"); + this, + "m_ignoreNegatedNullComparison"); } - private class NegatedConditionalVisitor extends BaseInspectionVisitor { - private NegatedConditionalVisitor(BaseInspection inspection, InspectionManager inspectionManager, boolean isOnTheFly) { + protected InspectionGadgetsFix buildFix(PsiElement location){ + return fix; + } + + private static class NegatedConditionalFix extends InspectionGadgetsFix{ + public String getName(){ + return "Invert condition"; + } + + public void applyFix(Project project, + ProblemDescriptor problemDescriptor){ + final PsiConditionalExpression exp = + (PsiConditionalExpression) problemDescriptor.getPsiElement() + .getParent(); + final PsiExpression elseBranch = exp.getElseExpression(); + final PsiExpression thenBranch = exp.getThenExpression(); + final PsiExpression condition = exp.getCondition(); + final String negatedCondition = + BoolUtils.getNegatedExpressionText(condition); + final String newStatement = + negatedCondition + '?' + elseBranch.getText() + ':' + + thenBranch.getText(); + replaceExpression(project, exp, newStatement); + } + } + + private class NegatedConditionalVisitor extends BaseInspectionVisitor{ + private NegatedConditionalVisitor(BaseInspection inspection, + InspectionManager inspectionManager, + boolean isOnTheFly){ super(inspection, inspectionManager, isOnTheFly); } - public void visitConditionalExpression(PsiConditionalExpression expression) { + public void visitConditionalExpression(PsiConditionalExpression expression){ super.visitConditionalExpression(expression); final PsiExpression thenBranch = expression.getThenExpression(); - if (thenBranch == null) { + if(thenBranch == null){ return; } final PsiExpression elseBranch = expression.getElseExpression(); - if (elseBranch == null) { + if(elseBranch == null){ return; } final PsiExpression condition = expression.getCondition(); - if (condition == null) { + if(condition == null){ return; } - if (!isNegation(condition)) { + if(!isNegation(condition)){ return; } registerError(condition); } - private boolean isNegation(PsiExpression condition) { - if (condition instanceof PsiPrefixExpression) { - final PsiPrefixExpression prefixExpression = (PsiPrefixExpression) condition; + private boolean isNegation(PsiExpression condition){ + if(condition instanceof PsiPrefixExpression){ + final PsiPrefixExpression prefixExpression = + (PsiPrefixExpression) condition; final PsiJavaToken sign = prefixExpression.getOperationSign(); final IElementType tokenType = sign.getTokenType(); return tokenType.equals(JavaTokenType.EXCL); - } else if (condition instanceof PsiBinaryExpression) { - final PsiBinaryExpression binaryExpression = (PsiBinaryExpression) condition; + } else if(condition instanceof PsiBinaryExpression){ + final PsiBinaryExpression binaryExpression = + (PsiBinaryExpression) condition; final PsiJavaToken sign = binaryExpression.getOperationSign(); final PsiExpression lhs = binaryExpression.getLOperand(); final PsiExpression rhs = binaryExpression.getROperand(); - if (lhs == null || rhs == null) { + if(lhs == null || rhs == null){ return false; } final IElementType tokenType = sign.getTokenType(); - if (tokenType.equals(JavaTokenType.NE)) { - if (m_ignoreNegatedNullComparison) { + if(tokenType.equals(JavaTokenType.NE)){ + if(m_ignoreNegatedNullComparison){ final String lhsText = lhs.getText(); final String rhsText = rhs.getText(); - return !"null".equals(lhsText) && !"null".equals(rhsText); - } else { + return !"null".equals(lhsText) && + !"null".equals(rhsText); + } else{ return true; } - } else { + } else{ return false; } - } else if (condition instanceof PsiParenthesizedExpression) { + } else if(condition instanceof PsiParenthesizedExpression){ final PsiExpression expression = ((PsiParenthesizedExpression) condition).getExpression(); return isNegation(expression); - } else { + } else{ return false; } } - } - } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/OverlyComplexArithmeticExpressionInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/OverlyComplexArithmeticExpressionInspection.java index 159ba9dba1fa..7cb1ab2b314c 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/OverlyComplexArithmeticExpressionInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/confusing/OverlyComplexArithmeticExpressionInspection.java @@ -42,6 +42,9 @@ public class OverlyComplexArithmeticExpressionInspection extends StatementInspec return fix; } + protected boolean buildQuickFixesOnlyForOnTheFlyErrors(){ + return true; + } public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, boolean onTheFly) { return new SwitchStatementWithTooManyBranchesVisitor(this, inspectionManager, onTheFly); } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/naming/DollarSignInNameInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/naming/DollarSignInNameInspection.java index d42fb0b31760..f6c3252212cb 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/naming/DollarSignInNameInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/naming/DollarSignInNameInspection.java @@ -25,6 +25,10 @@ public class DollarSignInNameInspection extends BaseInspection { return fix; } + protected boolean buildQuickFixesOnlyForOnTheFlyErrors(){ + return true; + } + public ProblemDescriptor[] checkClass(PsiClass aClass, InspectionManager mgr, boolean isOnTheFly) { if (aClass instanceof PsiAnonymousClass) { return super.checkClass(aClass, mgr, isOnTheFly); diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/BoolUtils.java b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/BoolUtils.java index 057739797c9c..5b9abd1af7d0 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/BoolUtils.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/BoolUtils.java @@ -1,6 +1,7 @@ package com.siyeh.ig.psiutils; import com.intellij.psi.*; +import com.intellij.psi.tree.IElementType; public class BoolUtils { private BoolUtils() { @@ -13,7 +14,8 @@ public class BoolUtils { } final PsiPrefixExpression prefixExp = (PsiPrefixExpression) exp; final PsiJavaToken sign = prefixExp.getOperationSign(); - return !(sign.getTokenType() != JavaTokenType.EXCL); + final IElementType tokenType = sign.getTokenType(); + return JavaTokenType.EXCL.equals(tokenType); } private static PsiExpression getNegated(PsiExpression exp) { @@ -22,7 +24,11 @@ public class BoolUtils { return ParenthesesUtils.stripParentheses(operand); } public static String getNegatedExpressionText(PsiExpression condition){ - if(BoolUtils.isNegation(condition)){ + if(condition instanceof PsiParenthesizedExpression) + { + final PsiExpression contentExpression = ((PsiParenthesizedExpression) condition).getExpression(); + return '(' +getNegatedExpressionText(contentExpression) + ')'; + }else if(BoolUtils.isNegation(condition)){ final PsiExpression negated = getNegated(condition); return negated.getText(); } else if(ComparisonUtils.isComparison(condition)){ diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/style/MultipleDeclarationInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/style/MultipleDeclarationInspection.java index b8d425db3240..8da9b725ef81 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/style/MultipleDeclarationInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/style/MultipleDeclarationInspection.java @@ -24,10 +24,6 @@ public class MultipleDeclarationInspection extends VariableInspection { return fix; } - protected boolean buildQuickFixesOnlyForBatchErrors() { - return true; - } - public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, boolean onTheFly) { return new MultipleDeclarationVisitor(this, inspectionManager, onTheFly); } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/style/MultipleTypedDeclarationInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/style/MultipleTypedDeclarationInspection.java index cc8b77ec0ae4..543f1eb6b2f5 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/style/MultipleTypedDeclarationInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/style/MultipleTypedDeclarationInspection.java @@ -33,10 +33,6 @@ public class MultipleTypedDeclarationInspection extends VariableInspection { return fix; } - protected boolean buildQuickFixesOnlyForBatchErrors() { - return true; - } - private static class MultiplyTypedDeclarationVisitor extends BaseInspectionVisitor { private MultiplyTypedDeclarationVisitor(BaseInspection inspection, diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/FieldHidesSuperclassFieldInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/FieldHidesSuperclassFieldInspection.java index 284ea975764a..5c6ace9f653e 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/FieldHidesSuperclassFieldInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/FieldHidesSuperclassFieldInspection.java @@ -29,6 +29,10 @@ public class FieldHidesSuperclassFieldInspection extends FieldInspection { return fix; } + protected boolean buildQuickFixesOnlyForOnTheFlyErrors(){ + return true; + } + public String buildErrorString(PsiElement location) { return "Field '#ref' hides field in superclass #loc"; } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/verbose/Object.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/verbose/Object.java new file mode 100644 index 000000000000..9936929ff5a2 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/verbose/Object.java @@ -0,0 +1,11 @@ +package com.siyeh.igtest.verbose; + +/** + * Created by IntelliJ IDEA. + * User: dgriffith + * Date: Feb 4, 2005 + * Time: 9:34:23 AM + * To change this template use File | Settings | File Templates. + */ +public class Object { +}