diff --git a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementVisitor.java b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementVisitor.java index 3dca0256f250..bd22ca377e99 100644 --- a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementVisitor.java +++ b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementVisitor.java @@ -256,7 +256,7 @@ public class JavaArrangementVisitor extends JavaRecursiveElementVisitor { } @NotNull - private List getReferencedFields(@NotNull PsiField field) { + private List getReferencedFields(@NotNull final PsiField field) { final List referencedElements = new ArrayList(); PsiExpression fieldInitializer = field.getInitializer(); @@ -280,7 +280,7 @@ public class JavaArrangementVisitor extends JavaRecursiveElementVisitor { @Override public void visitReferenceExpression(PsiReferenceExpression expression) { PsiElement ref = expression.resolve(); - if (ref instanceof PsiField && containingClassFields.contains(ref)) { + if (ref instanceof PsiField && containingClassFields.contains(ref) && hasSameStaticModifier(field, (PsiField)ref)) { referencedElements.add((PsiField)ref); } else if (ref instanceof PsiMethod && myCurrentMethodLookupDepth < MAX_METHOD_LOOKUP_DEPTH) { @@ -296,6 +296,10 @@ public class JavaArrangementVisitor extends JavaRecursiveElementVisitor { return referencedElements; } + private static boolean hasSameStaticModifier(@NotNull PsiField first, @NotNull PsiField second) { + boolean isSecondFieldStatic = second.hasModifierProperty(PsiModifier.STATIC); + return first.hasModifierProperty(PsiModifier.STATIC) ? isSecondFieldStatic : !isSecondFieldStatic; + } @Nullable private static PsiElement getPreviousNonWsComment(@Nullable PsiElement element, int minOffset) { diff --git a/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerFieldReferenceTest.groovy b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerFieldReferenceTest.groovy index bfd794abe67c..0dd2ccdd0866 100644 --- a/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerFieldReferenceTest.groovy +++ b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerFieldReferenceTest.groovy @@ -17,8 +17,8 @@ package com.intellij.psi.codeStyle.arrangement import com.intellij.psi.codeStyle.arrangement.match.StdArrangementMatchRule -import static com.intellij.psi.codeStyle.arrangement.std.StdArrangementTokens.EntryType.*; -import static com.intellij.psi.codeStyle.arrangement.std.StdArrangementTokens.Modifier.*; +import static com.intellij.psi.codeStyle.arrangement.std.StdArrangementTokens.EntryType.* +import static com.intellij.psi.codeStyle.arrangement.std.StdArrangementTokens.Modifier.* class JavaRearrangerFieldReferenceTest extends AbstractJavaRearrangerTest { @@ -448,4 +448,61 @@ public class TmpTest { ] ); } + + void "test only dependencies withing same initialization scope"() { + doTest( + initial: ''' +public class TestArrangementBuilder { + private String theString = ""; + private static final TestArrangement DEFAULT = new TestArrangementBuilder().build(); + + public TestArrangement build() { + return new TestArrangement(theString); + } + + public class TestArrangement { + private final String theString; + + public TestArrangement() { + this(""); + } + + public TestArrangement(@NotNull String aString) { + theString = aString; + } + } +} +''', + expected: ''' +public class TestArrangementBuilder { + private static final TestArrangement DEFAULT = new TestArrangementBuilder().build(); + private String theString = ""; + + public TestArrangement build() { + return new TestArrangement(theString); + } + + public class TestArrangement { + private final String theString; + + public TestArrangement() { + this(""); + } + + public TestArrangement(@NotNull String aString) { + theString = aString; + } + } +} +''', + rules: [ + rule(PUBLIC, STATIC, FINAL), + rule(PRIVATE, STATIC, FINAL), + rule(PRIVATE, FINAL), + rule(PRIVATE) + ] + ) + } + + }