diff --git a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java index 3abc727bf69e..9922f41b0bf5 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java @@ -38,7 +38,6 @@ import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.PropertyUtil; import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.MoveDestination; import com.intellij.refactoring.RefactorJBundle; import com.intellij.refactoring.extractclass.usageInfo.*; @@ -427,28 +426,8 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor { fieldBuffer.append('>'); } fieldBuffer.append('('); - boolean isFirst = true; if (requiresBackpointer) { fieldBuffer.append("this"); - isFirst = false; - } - for (PsiField field : fields) { - if (field.hasModifierProperty(PsiModifier.STATIC)) { - continue; - } - if (!field.hasInitializer()) { - continue; - } - final PsiExpression initializer = field.getInitializer(); - if (PsiUtil.isConstantExpression(initializer)) { - continue; - } - if (!isFirst) { - fieldBuffer.append(", "); - } - isFirst = false; - assert initializer != null; - fieldBuffer.append(initializer.getText()); } fieldBuffer.append(");"); diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/DestinationFolderComboBox.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/DestinationFolderComboBox.java index 3438d4614b5f..ec5a46f1d70f 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/DestinationFolderComboBox.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/DestinationFolderComboBox.java @@ -121,7 +121,7 @@ public abstract class DestinationFolderComboBox extends ComboboxWithBrowseButton final ComboBoxModel model = getComboBox().getModel(); for (int i = 0; i < model.getSize(); i++) { DirectoryChooser.ItemWrapper item = (DirectoryChooser.ItemWrapper)model.getElementAt(i); - if (fileIndex.getSourceRootForFile(item.getDirectory().getVirtualFile()) == root) { + if (item != null && fileIndex.getSourceRootForFile(item.getDirectory().getVirtualFile()) == root) { getComboBox().setSelectedItem(item); return; } diff --git a/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Extracted.java new file mode 100644 index 000000000000..cd911752ac8e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Extracted.java @@ -0,0 +1,13 @@ +public class Extracted { + private final Test test; + String myT; + + public Extracted(Test test) { + this.test = test; + this.myT = test.foo(); + } + + void bar() { + System.out.println(myT); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Test.java b/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Test.java new file mode 100644 index 000000000000..495f89514aba --- /dev/null +++ b/java/java-tests/testData/refactoring/extractClass/constructorParams/after/Test.java @@ -0,0 +1,15 @@ +class Test { + final Extracted extracted = new Extracted(this); + + void bar(){ + extracted.bar(); + } + + String foo() { + return ""; + } + + void bazz() { + extracted.bar(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractClass/constructorParams/before/Test.java b/java/java-tests/testData/refactoring/extractClass/constructorParams/before/Test.java new file mode 100644 index 000000000000..3311280a1ee7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractClass/constructorParams/before/Test.java @@ -0,0 +1,15 @@ +class Test { + String myT = foo(); + + void bar(){ + System.out.println(myT); + } + + String foo() { + return ""; + } + + void bazz() { + bar(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Extracted.java b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Extracted.java new file mode 100644 index 000000000000..a49603d93f68 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Extracted.java @@ -0,0 +1,10 @@ +public class Extracted { + String myT = ""; + + public Extracted() { + } + + void bar() { + System.out.println(myT); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Test.java b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Test.java new file mode 100644 index 000000000000..dea92ec50c15 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/after/Test.java @@ -0,0 +1,11 @@ +class Test { + final Extracted extracted = new Extracted(); + + void bar(){ + extracted.bar(); + } + + void foo() { + extracted.bar(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractClass/noConstructorParams/before/Test.java b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/before/Test.java new file mode 100644 index 000000000000..c725f076cf47 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractClass/noConstructorParams/before/Test.java @@ -0,0 +1,11 @@ +class Test { + String myT = ""; + + void bar(){ + System.out.println(myT); + } + + void foo() { + bar(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractClassTest.java index 1978fdac4030..5ff9ca6e63b7 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractClassTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractClassTest.java @@ -101,6 +101,14 @@ public class ExtractClassTest extends MultiFileTestCase{ doTestMethod(); } + public void testNoConstructorParams() throws Exception { + doTestFieldAndMethod(); + } + + public void testConstructorParams() throws Exception { + doTestFieldAndMethod(); + } + private void doTestFieldAndMethod() throws Exception { doTestFieldAndMethod("bar"); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/ShowDiffFromAnnotation.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/ShowDiffFromAnnotation.java index 021175d55d90..0dca8ef69c6d 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/ShowDiffFromAnnotation.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/ShowDiffFromAnnotation.java @@ -98,8 +98,7 @@ class ShowDiffFromAnnotation extends AnAction implements LineNumberListener { final FilePath[] targetPath = new FilePath[1]; ProgressManager.getInstance().run(new Task.Backgroundable(myVcs.getProject(), "Loading revision " + revisionNumber.asString() + " contents", true, - BackgroundFromStartOption - .getInstance()) { + BackgroundFromStartOption.getInstance()) { @Override public void run(@NotNull ProgressIndicator indicator) { final CommittedChangesProvider provider = myVcs.getCommittedChangesProvider(); @@ -112,7 +111,7 @@ class ShowDiffFromAnnotation extends AnAction implements LineNumberListener { targetPath[0] = pair.getSecond() == null ? new FilePathImpl(myFile) : pair.getSecond(); final CommittedChangeList cl = pair.getFirst(); changes.addAll(cl.getChanges()); - Collections.sort(changes, ChangesComparator.getInstance()); + Collections.sort(changes, ChangesComparator.getInstance(true)); } catch (VcsException e1) { exc[0] = e1; diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/DiffShelvedChangesAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/DiffShelvedChangesAction.java index b9a1702e25d0..8ca725c690d9 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/DiffShelvedChangesAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/DiffShelvedChangesAction.java @@ -185,7 +185,7 @@ public class DiffShelvedChangesAction extends AnAction implements DumbAware { } public int compare(final ShelvedChange o1, final ShelvedChange o2) { - return ChangesComparator.getInstance().compare(o1.getChange(myProject), o2.getChange(myProject)); + return ChangesComparator.getInstance(true).compare(o1.getChange(myProject), o2.getChange(myProject)); } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowser.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowser.java index 83bbd344301a..b255a8a7f856 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowser.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowser.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2011 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. @@ -313,8 +313,8 @@ public class ChangesBrowser extends JPanel implements TypeSafeDataProvider { return sortChanges(list); } - protected static List sortChanges(final List list) { - Collections.sort(list, ChangesComparator.getInstance()); + protected List sortChanges(final List list) { + Collections.sort(list, ChangesComparator.getInstance(myViewer.isShowFlatten())); return list; } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesComparator.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesComparator.java index 58be91b63b26..cdfd09d6ca97 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesComparator.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesComparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2010 JetBrains s.r.o. + * Copyright 2000-2011 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. @@ -15,22 +15,42 @@ */ package com.intellij.openapi.vcs.changes.ui; +import com.intellij.openapi.vcs.FilePath; import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vcs.changes.ChangesUtil; import java.util.Comparator; public class ChangesComparator implements Comparator { - private static final ChangesComparator ourInstance = new ChangesComparator(); + private static final ChangesComparator ourFlattenedInstance = new ChangesComparator(false); + private static final ChangesComparator ourTreeInstance = new ChangesComparator(true); + private final boolean myTreeCompare; - public static ChangesComparator getInstance() { - return ourInstance; + public static ChangesComparator getInstance(boolean flattened) { + if (flattened) { + return ourFlattenedInstance; + } else { + return ourTreeInstance; + } } - private ChangesComparator() { + private ChangesComparator(boolean treeCompare) { + myTreeCompare = treeCompare; } public int compare(final Change o1, final Change o2) { + final FilePath filePath1 = ChangesUtil.getFilePath(o1); + final FilePath filePath2 = ChangesUtil.getFilePath(o2); + if (myTreeCompare) { + final FilePath parentPath1 = filePath1.getParentPath(); + final FilePath parentPath2 = filePath2.getParentPath(); + if (parentPath1 != null && parentPath1.isUnder(parentPath2, true)) { + return -1; + } + if (parentPath2 != null && parentPath2.isUnder(parentPath1, true)) { + return 1; + } + } return ChangesUtil.getFilePath(o1).getName().compareToIgnoreCase(ChangesUtil.getFilePath(o2).getName()); } }