From 4155907c5d2a1b0c4995f23ee73d5a5202b3dcfd Mon Sep 17 00:00:00 2001 From: Yaroslav Lepenkin Date: Fri, 25 Apr 2014 22:08:39 +0400 Subject: [PATCH] revert IDEA-123049 Rearrange Code is breaking code (Code Style > Java > Arrangement) (1162eb1847279461e17d200416be100351d0c668) --- .../arrangement/JavaArrangementVisitor.java | 43 +++++++++++++++-- .../JavaRearrangerAnonymousClassesTest.groovy | 48 ------------------- 2 files changed, 40 insertions(+), 51 deletions(-) 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 ce6b9f608f0f..f46b4d630367 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 @@ -35,7 +35,7 @@ import java.util.*; import static com.intellij.psi.codeStyle.arrangement.std.StdArrangementTokens.EntryType.*; import static com.intellij.psi.codeStyle.arrangement.std.StdArrangementTokens.Modifier.*; -public class JavaArrangementVisitor extends JavaRecursiveElementVisitor { +public class JavaArrangementVisitor extends JavaElementVisitor { private static final String NULL_CONTENT = "no content"; @@ -98,6 +98,13 @@ public class JavaArrangementVisitor extends JavaRecursiveElementVisitor { processEntry(entry, null, aClass); } + @Override + public void visitJavaFile(PsiJavaFile file) { + for (PsiClass psiClass : file.getClasses()) { + visitClass(psiClass); + } + } + @Override public void visitField(PsiField field) { // There is a possible case that more than one field is declared for the same type like 'int i, j;'. We want to process only @@ -341,6 +348,36 @@ public class JavaArrangementVisitor extends JavaRecursiveElementVisitor { } } + @Override + public void visitExpressionStatement(PsiExpressionStatement statement) { + statement.getExpression().acceptChildren(this); + } + + @Override + public void visitNewExpression(PsiNewExpression expression) { + PsiAnonymousClass anonymousClass = expression.getAnonymousClass(); + if (anonymousClass == null) { + return; + } + JavaElementArrangementEntry entry = + createNewEntry(anonymousClass, anonymousClass.getTextRange(), CLASS, anonymousClass.getName(), false); + processEntry(entry, null, anonymousClass); + } + + @Override + public void visitExpressionList(PsiExpressionList list) { + for (PsiExpression expression : list.getExpressions()) { + expression.acceptChildren(this); + } + } + + @Override + public void visitDeclarationStatement(PsiDeclarationStatement statement) { + for (PsiElement element : statement.getDeclaredElements()) { + element.acceptChildren(this); + } + } + private void processEntry(@Nullable JavaElementArrangementEntry entry, @Nullable PsiModifierListOwner modifier, @Nullable PsiElement nextPsiRoot) @@ -427,7 +464,7 @@ public class JavaArrangementVisitor extends JavaRecursiveElementVisitor { } private static class MethodBodyProcessor extends JavaRecursiveElementVisitor { - + @NotNull private final JavaArrangementParseInfo myInfo; @Nullable private PsiMethod myBaseMethod; @@ -448,7 +485,7 @@ public class JavaArrangementVisitor extends JavaRecursiveElementVisitor { myInfo.registerMethodCallDependency(myBaseMethod, m); } } - + // We process all method call expression children because there is a possible case like below: // new Runnable() { // void test(); diff --git a/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerAnonymousClassesTest.groovy b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerAnonymousClassesTest.groovy index a8a1c3e87513..3d79cd525cfd 100644 --- a/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerAnonymousClassesTest.groovy +++ b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerAnonymousClassesTest.groovy @@ -15,8 +15,6 @@ */ package com.intellij.psi.codeStyle.arrangement -import static com.intellij.psi.codeStyle.arrangement.std.StdArrangementTokens.EntryType.* - class JavaRearrangerAnonymousClassesTest extends AbstractJavaRearrangerTest { public void "test rearrangement doesn't brake anon classes alignment"() { @@ -44,56 +42,10 @@ public class Test { ) } - public void "test anonymous classes inside method"() { - doTest( - initial: '''\ -public class Rearranging { - public void Testing() { - class Model { - private Cat cat = new Cat(); - private Dog dog = new Dog(); - class Cat { private String catSound = "MIAU"; } - class Dog { private String dogSound = "AUAU"; } - } - class Born { private String date; } - class Die { private String date; } - } - private int value; -} -''', - expected: '''\ -public class Rearranging { - - private int value; - - public void Testing() { - - class Model { - private Cat cat = new Cat(); - private Dog dog = new Dog(); - class Cat { private String catSound = "MIAU"; } - class Dog { private String dogSound = "AUAU"; } - } - - class Born { private String date; } - - class Die { private String date; } - - } -} -''', - rules: [rule(FIELD), - rule(ENUM), - rule(INTERFACE), - rule(CLASS), - rule(CONSTRUCTOR), - rule(METHOD)] - ) - } }