(no message)

This commit is contained in:
Dave Griffith
2005-02-04 20:08:33 +03:00
parent c936456649
commit cab6940233
16 changed files with 195 additions and 134 deletions
+1 -3
View File
@@ -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"
@@ -33,10 +33,6 @@ public abstract class BaseInspection extends LocalInspectionTool {
return false;
}
protected boolean buildQuickFixesOnlyForBatchErrors() {
return false;
}
protected InspectionGadgetsFix buildFix(PsiElement location) {
return null;
}
@@ -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);
}
@@ -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(){
}
}
@@ -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);
}
@@ -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);
}
@@ -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;
}
@@ -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) {
@@ -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;
}
}
}
}
@@ -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);
}
@@ -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);
@@ -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)){
@@ -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);
}
@@ -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,
@@ -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";
}
@@ -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 {
}