diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspection.java index a1952f0c747e..5973c8b011b1 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2011 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2013 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. @@ -59,11 +59,6 @@ public class PrivateMemberAccessBetweenOuterAndInnerClassInspection final PsiMember member = (PsiMember)infos[1]; @NonNls final String memberName; if (member instanceof PsiMethod) { - final PsiMethod method = (PsiMethod)member; - if (method.isConstructor()) { - - } - memberName = member.getName() + "()"; } else { @@ -168,10 +163,10 @@ public class PrivateMemberAccessBetweenOuterAndInnerClassInspection @Override public BaseInspectionVisitor buildVisitor() { - return new PrivateMemberAccessFromInnerClassVisior(); + return new PrivateMemberAccessFromInnerClassVisitor(); } - private static class PrivateMemberAccessFromInnerClassVisior + private static class PrivateMemberAccessFromInnerClassVisitor extends BaseInspectionVisitor { @Override @@ -225,9 +220,6 @@ public class PrivateMemberAccessBetweenOuterAndInnerClassInspection return; } super.visitReferenceExpression(expression); - if (expression.getQualifierExpression() == null) { - return; - } final PsiElement referenceNameElement = expression.getReferenceNameElement(); if (referenceNameElement == null) { @@ -246,12 +238,9 @@ public class PrivateMemberAccessBetweenOuterAndInnerClassInspection if (!member.hasModifierProperty(PsiModifier.PRIVATE)) { return; } - final PsiClass memberClass = - ClassUtils.getContainingClass(member); - if (memberClass == null) { - return; - } - if (memberClass.equals(containingClass)) { + final PsiClass memberClass = ClassUtils.getContainingClass(member); + if (memberClass == null || memberClass.equals(containingClass) || + (!PsiTreeUtil.isAncestor(containingClass, memberClass, true) && !PsiTreeUtil.isAncestor(memberClass, containingClass, true))) { return; } registerError(referenceNameElement, memberClass, member); @@ -259,14 +248,11 @@ public class PrivateMemberAccessBetweenOuterAndInnerClassInspection @Nullable private static PsiClass getContainingContextClass(PsiElement element) { - final PsiClass aClass = - ClassUtils.getContainingClass(element); + final PsiClass aClass = ClassUtils.getContainingClass(element); if (aClass instanceof PsiAnonymousClass) { - final PsiAnonymousClass anonymousClass = - (PsiAnonymousClass)aClass; - final PsiExpressionList args = anonymousClass.getArgumentList(); - if (args != null && - PsiTreeUtil.isAncestor(args, element, true)) { + final PsiAnonymousClass anonymousClass = (PsiAnonymousClass)aClass; + final PsiExpressionList arguments = anonymousClass.getArgumentList(); + if (arguments != null && PsiTreeUtil.isAncestor(arguments, element, true)) { return ClassUtils.getContainingClass(aClass); } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/j2me/PrivateMemberAccessBetweenOuterAndInnerClass.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/j2me/PrivateMemberAccessBetweenOuterAndInnerClass.java deleted file mode 100644 index d5c6f7576cda..000000000000 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/j2me/PrivateMemberAccessBetweenOuterAndInnerClass.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.siyeh.igtest.j2me; - -import java.awt.*; - - -public class PrivateMemberAccessBetweenOuterAndInnerClass { - private String caption = "Button"; - - private void initialize() { - Button btn = new Button(caption) { - public void foo() { - System.out.println(caption); - } - }; - } -} diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/j2me/private_member_access_between_outer_and_inner_class/PrivateMemberAccessBetweenOuterAndInnerClass.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/j2me/private_member_access_between_outer_and_inner_class/PrivateMemberAccessBetweenOuterAndInnerClass.java new file mode 100644 index 000000000000..a0ebd068824b --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/j2me/private_member_access_between_outer_and_inner_class/PrivateMemberAccessBetweenOuterAndInnerClass.java @@ -0,0 +1,14 @@ +package com.siyeh.igtest.j2me.private_member_access_between_outer_and_inner_class; + +public class PrivateMemberAccessBetweenOuterAndInnerClass { + private String caption = "Button"; + + private void initialize() { + System.out.println(caption); + Object btn = new Object() { + public void foo() { + System.out.println(caption); + } + }; + } +} diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/j2me/private_member_access_between_outer_and_inner_class/Simple.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/j2me/private_member_access_between_outer_and_inner_class/Simple.java new file mode 100644 index 000000000000..72143f8acf86 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/j2me/private_member_access_between_outer_and_inner_class/Simple.java @@ -0,0 +1,21 @@ +package com.siyeh.igtest.j2me.private_member_access_between_outer_and_inner_class; + +public class Simple { + + private int i; + + private Simple() {} + + private void foo() {} + + class Inner {{ + new Simple(); + System.out.println(i); + foo(); + }} +} +class Other { + void foo(Simple o) { + System.out.println(o.i); + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspectionTest.java new file mode 100644 index 000000000000..4c747261f4f4 --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspectionTest.java @@ -0,0 +1,33 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.ig.j2me; + +import com.intellij.codeInspection.InspectionProfileEntry; +import com.siyeh.ig.LightInspectionTestCase; + +/** + * @author Bas Leijdekkers + */ +public class PrivateMemberAccessBetweenOuterAndInnerClassInspectionTest extends LightInspectionTestCase { + + public void testSimple() { doTest(); } + public void testPrivateMemberAccessBetweenOuterAndInnerClass() { doTest(); } + + @Override + protected InspectionProfileEntry getInspection() { + return new PrivateMemberAccessBetweenOuterAndInnerClassInspection(); + } +}