From 0f05c7a385ac845d7a1e19f24766370a2e71efce Mon Sep 17 00:00:00 2001 From: "Denis.Zhdanov" Date: Wed, 19 Sep 2012 23:18:40 +0400 Subject: [PATCH] IDEA-19061 Integrate the Rearranger-plugin into core-IDE Utility methods grouping --- .../JavaArrangementMethodDependencyInfo.java | 25 ++++++++++++----- .../arrangement/JavaArrangementParseInfo.java | 28 +++++++++++++++---- .../codeStyle/arrangement/JavaRearranger.java | 16 ++++++++++- 3 files changed, 56 insertions(+), 13 deletions(-) diff --git a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementMethodDependencyInfo.java b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementMethodDependencyInfo.java index 19cce3bf6532..aa59f590c5b9 100644 --- a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementMethodDependencyInfo.java +++ b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementMethodDependencyInfo.java @@ -15,20 +15,31 @@ */ package com.intellij.psi.codeStyle.arrangement; -import com.intellij.psi.PsiMethod; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.List; + /** * @author Denis Zhdanov * @since 9/19/12 6:41 PM */ public class JavaArrangementMethodDependencyInfo { - // TODO den add doc - public void registerDependency(@NotNull PsiMethod baseMethod, - @NotNull JavaElementArrangementEntry baseMethodEntry, - @NotNull PsiMethod dependentMethod) - { - + @NotNull private final List getDependentMethods = new ArrayList(); + @NotNull private final JavaElementArrangementEntry myAnchorMethod; + + public JavaArrangementMethodDependencyInfo(@NotNull JavaElementArrangementEntry method) { + myAnchorMethod = method; + } + + @NotNull + public List getGetDependentMethods() { + return getDependentMethods; + } + + @NotNull + public JavaElementArrangementEntry getAnchorMethod() { + return myAnchorMethod; } } diff --git a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementParseInfo.java b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementParseInfo.java index 5012844e9a75..ec54eb881808 100644 --- a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementParseInfo.java +++ b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementParseInfo.java @@ -16,6 +16,7 @@ package com.intellij.psi.codeStyle.arrangement; import com.intellij.openapi.util.Pair; +import com.intellij.psi.PsiMethod; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -28,6 +29,9 @@ public class JavaArrangementParseInfo { @NotNull private final List myEntries = new ArrayList(); + @NotNull private final List myMethodDependencyRoots + = new ArrayList(); + @NotNull private final Map, JavaArrangementPropertyInfo> myProperties = new HashMap, JavaArrangementPropertyInfo>(); @@ -39,22 +43,28 @@ public class JavaArrangementParseInfo { public void addEntry(@NotNull JavaElementArrangementEntry entry) { myEntries.add(entry); } - + @NotNull public Collection getProperties() { return myProperties.values(); } - + + // TODO den add doc + @NotNull + public List getMethodDependencyRoots() { + return myMethodDependencyRoots; + } + public void registerGetter(@NotNull String propertyName, @NotNull String className, @NotNull JavaElementArrangementEntry entry) { - getInfo(propertyName, className).setGetter(entry); + getPropertyInfo(propertyName, className).setGetter(entry); } public void registerSetter(@NotNull String propertyName, @NotNull String className, @NotNull JavaElementArrangementEntry entry) { - getInfo(propertyName, className).setSetter(entry); + getPropertyInfo(propertyName, className).setSetter(entry); } @NotNull - private JavaArrangementPropertyInfo getInfo(@NotNull String propertyName, @NotNull String className) { + private JavaArrangementPropertyInfo getPropertyInfo(@NotNull String propertyName, @NotNull String className) { Pair key = Pair.create(propertyName, className); JavaArrangementPropertyInfo propertyInfo = myProperties.get(key); if (propertyInfo == null) { @@ -62,4 +72,12 @@ public class JavaArrangementParseInfo { } return propertyInfo; } + + // TODO den add doc + public void registerDependency(@NotNull PsiMethod baseMethod, + @NotNull JavaElementArrangementEntry baseMethodEntry, + @NotNull PsiMethod dependentMethod) + { + // TODO den implement + } } diff --git a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaRearranger.java b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaRearranger.java index a97d2c381890..ae498e7e7219 100644 --- a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaRearranger.java +++ b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaRearranger.java @@ -204,7 +204,21 @@ public class JavaRearranger implements Rearranger, } private static void setupUtilityMethods(@NotNull JavaArrangementParseInfo info, @NotNull ArrangementEntryOrderType orderType) { - + if (orderType == ArrangementEntryOrderType.DEPTH_FIRST) { + JavaElementArrangementEntry base = null; + for (JavaArrangementMethodDependencyInfo rootInfo : info.getMethodDependencyRoots()) { + if (base != null) { + rootInfo.getAnchorMethod().addDependency(base); + } + base = setupDepthFirstDependency(rootInfo.getAnchorMethod()); + } + } + } + + @NotNull + private static JavaElementArrangementEntry setupDepthFirstDependency(@NotNull JavaElementArrangementEntry base) { + // TODO den implement + return base; } private static void setupOverriddenMethods(JavaArrangementParseInfo info) {