diff --git a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties index 365ebd4069f6..f9cd0be71344 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties +++ b/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties @@ -1769,3 +1769,5 @@ ignore.methods.with.boolean.return.type.option=Ignore methods with &Boolean retu ignore.boolean.methods.in.an.interface.option=Ignore boolean methods in an @&interface ignored.io.resource.types=Ignored I/O resource types choose.io.resource.type.to.ignore=Choose I/O resource type to ignore +ignore.accesses.from.the.same.class=ignore accesses from the same class +ignore.accesses.from.equals.method=ignore accesses from 'equals()' method diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/encapsulation/UseOfAnotherObjectsPrivateFieldInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/encapsulation/UseOfAnotherObjectsPrivateFieldInspection.java index 6b5d6892507d..8e7af21cfa6c 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/encapsulation/UseOfAnotherObjectsPrivateFieldInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/encapsulation/UseOfAnotherObjectsPrivateFieldInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2010 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,37 +16,63 @@ package com.siyeh.ig.encapsulation; import com.intellij.psi.*; +import com.intellij.psi.util.PsiTreeUtil; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; +import com.siyeh.ig.psiutils.MethodUtils; +import com.siyeh.ig.ui.MultipleCheckboxOptionsPanel; import org.jetbrains.annotations.NotNull; +import javax.swing.*; + public class UseOfAnotherObjectsPrivateFieldInspection extends BaseInspection { + @SuppressWarnings({"PublicField"}) + public boolean ignoreSameClass = false; + @SuppressWarnings({"PublicField"}) + public boolean ignoreEquals = false; + + @Override @NotNull public String getID(){ return "AccessingNonPublicFieldOfAnotherObject"; } + @Override @NotNull public String getDisplayName(){ return InspectionGadgetsBundle.message( "accessing.non.public.field.of.another.object.display.name"); } + @Override @NotNull public String buildErrorString(Object... infos){ return InspectionGadgetsBundle.message( "accessing.non.public.field.of.another.object.problem.descriptor"); } + @Override + public JComponent createOptionsPanel() { + final MultipleCheckboxOptionsPanel panel = + new MultipleCheckboxOptionsPanel(this); + panel.addCheckbox(InspectionGadgetsBundle.message( + "ignore.accesses.from.the.same.class"), "ignoreSameClass"); + panel.addCheckbox(InspectionGadgetsBundle.message( + "ignore.accesses.from.equals.method"), "ignoreEquals"); + return panel; + } + + @Override public BaseInspectionVisitor buildVisitor(){ return new UseOfAnotherObjectsPrivateFieldVisitor(); } - private static class UseOfAnotherObjectsPrivateFieldVisitor + private class UseOfAnotherObjectsPrivateFieldVisitor extends BaseInspectionVisitor{ + @Override public void visitReferenceExpression( @NotNull PsiReferenceExpression expression){ super.visitReferenceExpression(expression); @@ -54,11 +80,26 @@ public class UseOfAnotherObjectsPrivateFieldInspection if(qualifier == null || qualifier instanceof PsiThisExpression){ return; } + if(ignoreEquals) { + final PsiMethod method = + PsiTreeUtil.getParentOfType(expression, PsiMethod.class); + if (MethodUtils.isEquals(method)) { + return; + } + } final PsiElement referent = expression.resolve(); if(!(referent instanceof PsiField)){ return; } final PsiField field = (PsiField) referent; + if (ignoreSameClass) { + final PsiClass parent = + PsiTreeUtil.getParentOfType(expression, PsiClass.class); + final PsiClass containingClass = field.getContainingClass(); + if (parent != null && parent.equals(containingClass)) { + return; + } + } if(!field.hasModifierProperty(PsiModifier.PRIVATE) && !field.hasModifierProperty(PsiModifier.PROTECTED)){ return; @@ -68,7 +109,7 @@ public class UseOfAnotherObjectsPrivateFieldInspection } final PsiElement fieldNameElement = expression.getReferenceNameElement(); - if (fieldNameElement == null) { + if(fieldNameElement == null){ return; } registerError(fieldNameElement); diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/MapReplaceableByEnumMapInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/MapReplaceableByEnumMapInspection.java index e5fc54c4183c..99a1fbf2f1ee 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/MapReplaceableByEnumMapInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/MapReplaceableByEnumMapInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2010 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,18 +27,21 @@ import org.jetbrains.annotations.NotNull; public class MapReplaceableByEnumMapInspection extends BaseInspection { + @Override @NotNull public String getDisplayName() { return InspectionGadgetsBundle.message( "map.replaceable.by.enum.map.display.name"); } + @Override @NotNull protected String buildErrorString(Object... infos) { return InspectionGadgetsBundle.message( "map.replaceable.by.enum.map.problem.descriptor"); } + @Override public BaseInspectionVisitor buildVisitor() { return new SetReplaceableByEnumSetVisitor(); } @@ -46,7 +49,8 @@ public class MapReplaceableByEnumMapInspection extends BaseInspection { private static class SetReplaceableByEnumSetVisitor extends BaseInspectionVisitor { - @Override public void visitNewExpression(@NotNull PsiNewExpression expression) { + @Override public void visitNewExpression( + @NotNull PsiNewExpression expression) { super.visitNewExpression(expression); final PsiType type = expression.getType(); if (!(type instanceof PsiClassType)) { @@ -65,19 +69,16 @@ public class MapReplaceableByEnumMapInspection extends BaseInspection { return; } if (!TypeUtils.expressionHasTypeOrSubtype(expression, - "java.util.Map")) { + "java.util.Map")) { return; } - if (TypeUtils.expressionHasTypeOrSubtype(expression, - "java.util.EnumMap")) { - return; + if (null != TypeUtils.expressionHasTypeOrSubtype(expression, + "java.util.EnumMap", "java.util.concurrent.ConcurrentMap")) { + return; } final PsiClassType argumentClassType = (PsiClassType)argumentType; final PsiClass argumentClass = argumentClassType.resolve(); - if (argumentClass == null) { - return; - } - if (!argumentClass.isEnum()) { + if (argumentClass == null || !argumentClass.isEnum()) { return; } registerNewExpressionError(expression); diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/SetReplaceableByEnumSetInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/SetReplaceableByEnumSetInspection.java index cbf4cd68668c..1ad5ad6152d5 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/SetReplaceableByEnumSetInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/SetReplaceableByEnumSetInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2010 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,18 +27,21 @@ import org.jetbrains.annotations.NotNull; public class SetReplaceableByEnumSetInspection extends BaseInspection { + @Override @NotNull public String getDisplayName() { return InspectionGadgetsBundle.message( "set.replaceable.by.enum.set.display.name"); } + @Override @NotNull protected String buildErrorString(Object... infos) { return InspectionGadgetsBundle.message( "set.replaceable.by.enum.set.problem.descriptor"); } + @Override public BaseInspectionVisitor buildVisitor() { return new SetReplaceableByEnumSetVisitor(); } @@ -46,7 +49,8 @@ public class SetReplaceableByEnumSetInspection extends BaseInspection { private static class SetReplaceableByEnumSetVisitor extends BaseInspectionVisitor { - @Override public void visitNewExpression(@NotNull PsiNewExpression expression) { + @Override public void visitNewExpression( + @NotNull PsiNewExpression expression) { super.visitNewExpression(expression); final PsiType type = expression.getType(); if (!(type instanceof PsiClassType)) { @@ -65,11 +69,11 @@ public class SetReplaceableByEnumSetInspection extends BaseInspection { return; } if (!TypeUtils.expressionHasTypeOrSubtype(expression, - "java.util.Set")) { + "java.util.Set")) { return; } if (TypeUtils.expressionHasTypeOrSubtype(expression, - "java.util.EnumSet")) { + "java.util.EnumSet")) { return; } final PsiClassType argumentClassType = (PsiClassType)argumentType; diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/DoubleCheckedLocking.html b/plugins/InspectionGadgets/src/inspectionDescriptions/DoubleCheckedLocking.html index bc221bf6a858..24e5b8c23c52 100644 --- a/plugins/InspectionGadgets/src/inspectionDescriptions/DoubleCheckedLocking.html +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/DoubleCheckedLocking.html @@ -7,8 +7,7 @@ discussion of double-checked locking and why it is unsafe, see ">http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

Use the checkbox below to ignore double-checked locking on volatile fields. Using -a volatile field for double-checked locking works correctly on Java 5 virtual machines, -but probably does not have any performance advantages over plain full synchronization -of the accessor method. +a volatile field for double-checked locking works correctly on virtual machines which +implement the new Java Memory Model. Powered by InspectionGadgets \ No newline at end of file diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/UseOfAnotherObjectsPrivateField.html b/plugins/InspectionGadgets/src/inspectionDescriptions/UseOfAnotherObjectsPrivateField.html index 8e451ab6f44d..6b77662bb194 100644 --- a/plugins/InspectionGadgets/src/inspectionDescriptions/UseOfAnotherObjectsPrivateField.html +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/UseOfAnotherObjectsPrivateField.html @@ -7,5 +7,10 @@ some coding styles discourage this use. Additionally, such direct access to pri may fail in component-oriented architectures such (e.g. Spring, Hibernate) which expect all access to other objects to be through method calls so as to allow the framework to mediate all access using proxies. +

+Use the first checkbox below to ignore accesses from the same class and only report accesses +from inner or outer classes.
+Use the second checkbox below to ignore accesses from an equals() method. +

Powered by InspectionGadgets \ No newline at end of file