mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
(no message)
This commit is contained in:
@@ -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(){
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -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);
|
||||
}
|
||||
|
||||
+3
@@ -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;
|
||||
}
|
||||
|
||||
+13
-4
@@ -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) {
|
||||
|
||||
+65
-33
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
@@ -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);
|
||||
}
|
||||
|
||||
-4
@@ -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,
|
||||
|
||||
+4
@@ -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 {
|
||||
}
|
||||
Reference in New Issue
Block a user