diff --git a/java/java-tests/testData/refactoring/extractMethodNew/AnonInner.java b/java/java-tests/testData/refactoring/extractMethodNew/AnonInner.java new file mode 100644 index 000000000000..6431f5b2c48f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/AnonInner.java @@ -0,0 +1,24 @@ + +public class ExtractMethods { } +abstract class MyButton + extends JButton + { + protected MyButton( String text ) { + super( text ); + } +} +class Foo { + private JButton createOKButton() { + return new MyButton( "OK" ) { + public void actionPerformed( int e ) { + setVisible( false ); + } + }; + } +} + +class JButton { + public JButton(String text) { + } + public void setVisible(boolean b) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/AnonInner_after.java b/java/java-tests/testData/refactoring/extractMethodNew/AnonInner_after.java new file mode 100644 index 000000000000..86c3f649be03 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/AnonInner_after.java @@ -0,0 +1,28 @@ + +public class ExtractMethods { } +abstract class MyButton + extends JButton + { + protected MyButton( String text ) { + super( text ); + } +} +class Foo { + private JButton createOKButton() { + return new MyButton( "OK" ) { + public void actionPerformed( int e ) { + newMethod(); + } + + private void newMethod() { + setVisible( false ); + } + }; + } +} + +class JButton { + public JButton(String text) { + } + public void setVisible(boolean b) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingMethodCall.java b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingMethodCall.java new file mode 100644 index 000000000000..617884b2d780 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingMethodCall.java @@ -0,0 +1,24 @@ +import java.util.List; + +class C { + List x; + List y; + + private void foo() { + + if (x.isEmpty()) return; + x.remove(0); + y.add(str()); + baz(); + } + + private void bar() { + if (y.isEmpty()) return; + y.remove(0); + x.add(str()); + baz(); + } + + private void baz() { } + private String str() { return null; } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingMethodCall_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingMethodCall_after.java new file mode 100644 index 000000000000..f0412f953ccc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingMethodCall_after.java @@ -0,0 +1,25 @@ +import java.util.List; + +class C { + List x; + List y; + + private void foo() { + + newMethod(x, y); + } + + private void newMethod(List x, List y) { + if (x.isEmpty()) return; + x.remove(0); + y.add(str()); + baz(); + } + + private void bar() { + newMethod(y, x); + } + + private void baz() { } + private String str() { return null; } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatement.java b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatement.java new file mode 100644 index 000000000000..62b11ee051ab --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatement.java @@ -0,0 +1,19 @@ +import java.util.List; + +class ArgumentFoldingWholeStatement { + List x; + List y; + + private void foo() { + x.add(str()); + baz(); + } + + private void bar() { + y.add(str()); + baz(); + } + + private String str() { return null; } + private void baz() { } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdate.java b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdate.java new file mode 100644 index 000000000000..fe4045ebc43f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdate.java @@ -0,0 +1,22 @@ +import java.util.List; + +class ArgumentFoldingWholeStatement { + List x; + List y; + + private void foo() { + + for (int i = 0; ++i < 5; x.indexOf(str())) { + baz(); + } + } + + private void bar() { + for (int i = 0; ++i < 5; y.indexOf(str())) { + baz(); + } + } + + private String str() { return null; } + private void baz() { } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdateList.java b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdateList.java new file mode 100644 index 000000000000..5f63dc1e0d94 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdateList.java @@ -0,0 +1,22 @@ +import java.util.List; + +class ArgumentFoldingWholeStatement { + List x; + List y; + + private void foo() { + + for (int i = 0; i < 5; i++, x.indexOf(str())) { + baz(); + } + } + + private void bar() { + for (int i = 0; i < 5; i++, y.indexOf(str())) { + baz(); + } + } + + private String str() { return null; } + private void baz() { } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdateList_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdateList_after.java new file mode 100644 index 000000000000..10de66ad3f9f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdateList_after.java @@ -0,0 +1,24 @@ +import java.util.List; + +class ArgumentFoldingWholeStatement { + List x; + List y; + + private void foo() { + + newMethod(x); + } + + private void newMethod(List x) { + for (int i = 0; i < 5; i++, x.indexOf(str())) { + baz(); + } + } + + private void bar() { + newMethod(y); + } + + private String str() { return null; } + private void baz() { } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdate_after.java new file mode 100644 index 000000000000..7ca04c24282f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatementForUpdate_after.java @@ -0,0 +1,24 @@ +import java.util.List; + +class ArgumentFoldingWholeStatement { + List x; + List y; + + private void foo() { + + newMethod(x); + } + + private void newMethod(List x) { + for (int i = 0; ++i < 5; x.indexOf(str())) { + baz(); + } + } + + private void bar() { + newMethod(y); + } + + private String str() { return null; } + private void baz() { } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatement_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatement_after.java new file mode 100644 index 000000000000..e946d753707c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArgumentFoldingWholeStatement_after.java @@ -0,0 +1,22 @@ +import java.util.List; + +class ArgumentFoldingWholeStatement { + List x; + List y; + + private void foo() { + newMethod(x); + } + + private void newMethod(List x) { + x.add(str()); + baz(); + } + + private void bar() { + newMethod(y); + } + + private String str() { return null; } + private void baz() { } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess.java new file mode 100644 index 000000000000..7d1fd88999b3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess.java @@ -0,0 +1,8 @@ +class Test { + void foo(String[] ss) { + for(int i = 0; i < ss.length; i++) { + System.out.println(ss[i]); + System.out.println(ss[i] + ss[i]); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess1.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess1.java new file mode 100644 index 000000000000..7ec503300ed4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess1.java @@ -0,0 +1,10 @@ +class Test { + void foo(String[] ss, String[] bb) { + for(int i = 0; i < ss.length; i++) { + + System.out.println(ss[i]); + System.out.println(bb[i]); + + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess1_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess1_after.java new file mode 100644 index 000000000000..abecb60b4eca --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess1_after.java @@ -0,0 +1,14 @@ +class Test { + void foo(String[] ss, String[] bb) { + for(int i = 0; i < ss.length; i++) { + + newMethod(ss[i], bb[i]); + + } + } + + private void newMethod(String s, String s1) { + System.out.println(s); + System.out.println(s1); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithDuplicates.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithDuplicates.java new file mode 100644 index 000000000000..85248fba6cad --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithDuplicates.java @@ -0,0 +1,6 @@ +class Test { + void foo(String[] ss) { + System.out.println(ss[0]); + System.out.println(ss[0]); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithDuplicates_after.java new file mode 100644 index 000000000000..64496be89f1e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithDuplicates_after.java @@ -0,0 +1,10 @@ +class Test { + void foo(String[] ss) { + newMethod(ss[0]); + newMethod(ss[0]); + } + + private void newMethod(String s) { + System.out.println(s); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithLocalIndex.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithLocalIndex.java new file mode 100644 index 000000000000..cb850bd94990 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithLocalIndex.java @@ -0,0 +1,9 @@ +class Test { + void foo(String[] ss) { + Integer[] levels = new Integer[]{Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3),}; + Integer[] nextWinNumber = new Integer[6]; + for (Integer level : levels) { + Integer nextWinNum = nextWinNumber[level - 1]; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithLocalIndex_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithLocalIndex_after.java new file mode 100644 index 000000000000..497400c0f37c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithLocalIndex_after.java @@ -0,0 +1,13 @@ +class Test { + void foo(String[] ss) { + Integer[] levels = new Integer[]{Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3),}; + Integer[] nextWinNumber = new Integer[6]; + newMethod(levels, nextWinNumber); + } + + private void newMethod(Integer[] levels, Integer[] nextWinNumber) { + for (Integer level : levels) { + Integer nextWinNum = nextWinNumber[level - 1]; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithTopExpression.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithTopExpression.java new file mode 100644 index 000000000000..453e376880d5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithTopExpression.java @@ -0,0 +1,8 @@ +class Test { + { + int i = 0; + double[] doubles = null; + + double progressResult = doubles[0] / i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithTopExpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithTopExpression_after.java new file mode 100644 index 000000000000..b3cad8ff539e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccessWithTopExpression_after.java @@ -0,0 +1,12 @@ +class Test { + { + int i = 0; + double[] doubles = null; + + newMethod(doubles[0] / i); + } + + private void newMethod(double progressResult1) { + double progressResult = progressResult1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess_after.java new file mode 100644 index 000000000000..d8b4d1643309 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayAccess_after.java @@ -0,0 +1,12 @@ +class Test { + void foo(String[] ss) { + for(int i = 0; i < ss.length; i++) { + newMethod(ss[i]); + } + } + + private void newMethod(String s) { + System.out.println(s); + System.out.println(s + s); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayReturnType.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayReturnType.java new file mode 100644 index 000000000000..355a4e97206f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayReturnType.java @@ -0,0 +1,10 @@ +class Test { + String[] foos; + + void test() { + for (String foo : foos) { + + } + System.out.println(foos.length); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ArrayReturnType_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ArrayReturnType_after.java new file mode 100644 index 000000000000..de7dae99935d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ArrayReturnType_after.java @@ -0,0 +1,14 @@ +class Test { + String[] foos; + + void test() { + for (String foo : newMethod()) { + + } + System.out.println(newMethod().length); + } + + private String[] newMethod() { + return foos; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCast.java b/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCast.java new file mode 100644 index 000000000000..8cb66b52dd68 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCast.java @@ -0,0 +1,10 @@ +class C { + void f(K k) { + System.out.println(k); + } + + void g() { + Object o = ""; + System.out.println(o); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCastLocalClass.java b/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCastLocalClass.java new file mode 100644 index 000000000000..05c233036047 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCastLocalClass.java @@ -0,0 +1,13 @@ +class C { + void method() { + class Local { + void foo(K k) { + System.out.println(k); + } + void bar() { + Object o = new Object(); + System.out.println(o); + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCastLocalClass_after.java b/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCastLocalClass_after.java new file mode 100644 index 000000000000..2c6718d8f6d7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCastLocalClass_after.java @@ -0,0 +1,18 @@ +class C { + void method() { + class Local { + void foo(K k) { + newMethod(k); + } + + private void newMethod(K k) { + System.out.println(k); + } + + void bar() { + Object o = new Object(); + newMethod(o); + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCast_after.java b/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCast_after.java new file mode 100644 index 000000000000..c98f87e1ce52 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/AvoidGenericArgumentCast_after.java @@ -0,0 +1,14 @@ +class C { + void f(K k) { + newMethod(k); + } + + private void newMethod(K k) { + System.out.println(k); + } + + void g() { + Object o = ""; + newMethod(o); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BeforeCommentAfterSelectedFragment.java b/java/java-tests/testData/refactoring/extractMethodNew/BeforeCommentAfterSelectedFragment.java new file mode 100644 index 000000000000..8b69426d7098 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BeforeCommentAfterSelectedFragment.java @@ -0,0 +1,10 @@ +class CommentAfterSelectedFragment { + foo(boolean debugMode) { + int i= 0; + + if (debugMode) { + i = 1; + } /* comment */ + System.out.println(i); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BeforeCommentAfterSelectedFragment_after.java b/java/java-tests/testData/refactoring/extractMethodNew/BeforeCommentAfterSelectedFragment_after.java new file mode 100644 index 000000000000..970f5f31f6f9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BeforeCommentAfterSelectedFragment_after.java @@ -0,0 +1,15 @@ +class CommentAfterSelectedFragment { + foo(boolean debugMode) { + int i= 0; + + i = newMethod(debugMode, i); + System.out.println(i); + } + + private int newMethod(boolean debugMode, int i) { + if (debugMode) { + i = 1; + } /* comment */ + return i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BooleanExpression.java b/java/java-tests/testData/refactoring/extractMethodNew/BooleanExpression.java new file mode 100644 index 000000000000..e039152086e3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BooleanExpression.java @@ -0,0 +1,5 @@ +class Test { + void method(int i) { + boolean isDirty = i == 0 || otherTests(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BooleanExpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/BooleanExpression_after.java new file mode 100644 index 000000000000..859d12c4388f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BooleanExpression_after.java @@ -0,0 +1,9 @@ +class Test { + void method(int i) { + boolean isDirty = newMethod(i) || otherTests(); + } + + private boolean newMethod(int i) { + return i == 0; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BoxedConditionalReturn.java b/java/java-tests/testData/refactoring/extractMethodNew/BoxedConditionalReturn.java new file mode 100644 index 000000000000..f9d35ac7b5f9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BoxedConditionalReturn.java @@ -0,0 +1,18 @@ +class Test { + public static Integer foo(Integer[] a) { + + if (a.length != 0) { + int n = a[0] != null ? a[0] : 0; + return n; + } + return null; + } + + public static Integer bar(Integer[] a) { + if (a.length != 0) { + int n = a[0] != null ? a[0] : 0; + return n; + } + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BoxedConditionalReturn_after.java b/java/java-tests/testData/refactoring/extractMethodNew/BoxedConditionalReturn_after.java new file mode 100644 index 000000000000..ca7e24ea0123 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BoxedConditionalReturn_after.java @@ -0,0 +1,25 @@ +import org.jetbrains.annotations.Nullable; + +class Test { + public static Integer foo(Integer[] a) { + + Integer n = newMethod(a); + if (n != null) return n; + return null; + } + + @Nullable + private static Integer newMethod(Integer[] a) { + if (a.length != 0) { + int n = a[0] != null ? a[0] : 0; + return n; + } + return null; + } + + public static Integer bar(Integer[] a) { + Integer n = newMethod(a); + if (n != null) return n; + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWith2DimArrayAccess.java b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWith2DimArrayAccess.java new file mode 100644 index 000000000000..4c8b730e589c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWith2DimArrayAccess.java @@ -0,0 +1,11 @@ +class Foo { + boolean bar(String[][] a) { + for (int i = 0; i < a.length; i++) + for (int j = 0; i < a[i].length; j++) { + if (a[i][j].length() > 3 && i % 3 == 0) + return true; + + } + return false; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWith2DimArrayAccess_after.java b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWith2DimArrayAccess_after.java new file mode 100644 index 000000000000..c04f3fb6da0a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWith2DimArrayAccess_after.java @@ -0,0 +1,16 @@ +class Foo { + boolean bar(String[][] a) { + for (int i = 0; i < a.length; i++) + for (int j = 0; i < a[i].length; j++) { + if (newMethod(a, i, j)) return true; + + } + return false; + } + + private boolean newMethod(String[][] a, int i, int j) { + if (a[i][j].length() > 3 && i % 3 == 0) + return true; + return false; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccess.java b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccess.java new file mode 100644 index 000000000000..3f2be2ea0d65 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccess.java @@ -0,0 +1,15 @@ +class UseBuilder { + void test(Builder builder, int[] arr) { + builder.foo("xyz").bar(arr[0]).foo("abc"); + } + + static class Builder { + Builder foo(String s) { + return this; + } + + Builder bar(int x) { + return this; + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessExpr.java b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessExpr.java new file mode 100644 index 000000000000..11f0607aaf81 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessExpr.java @@ -0,0 +1,15 @@ +class UseBuilder { + void test(Builder builder, int[] arr) { + builder.foo("xyz").bar(arr[0]).foo("abc"); + } + + static class Builder { + Builder foo(String s) { + return this; + } + + Builder bar(int x) { + return this; + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessExpr_after.java b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessExpr_after.java new file mode 100644 index 000000000000..0ad6a1d75ad0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessExpr_after.java @@ -0,0 +1,19 @@ +class UseBuilder { + void test(Builder builder, int[] arr) { + newMethod(builder, arr[0]).foo("abc"); + } + + private Builder newMethod(Builder builder, int x) { + return builder.foo("xyz").bar(x); + } + + static class Builder { + Builder foo(String s) { + return this; + } + + Builder bar(int x) { + return this; + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessIf.java b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessIf.java new file mode 100644 index 000000000000..d5a624418922 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessIf.java @@ -0,0 +1,9 @@ +class Foo { + boolean bar(String[] a) { + for (int i = 0; i < a.length; i++) { + if (a[i].length() > 3 && i % 3 == 0) + return true; + } + return false; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessIf_after.java b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessIf_after.java new file mode 100644 index 000000000000..68d0467f17db --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccessIf_after.java @@ -0,0 +1,14 @@ +class Foo { + boolean bar(String[] a) { + for (int i = 0; i < a.length; i++) { + if (newMethod(a, i)) return true; + } + return false; + } + + private boolean newMethod(String[] a, int i) { + if (a[i].length() > 3 && i % 3 == 0) + return true; + return false; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccess_after.java b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccess_after.java new file mode 100644 index 000000000000..3e4109c1c899 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/BuilderChainWithArrayAccess_after.java @@ -0,0 +1,19 @@ +class UseBuilder { + void test(Builder builder, int[] arr) { + newMethod(builder, arr[0]); + } + + private void newMethod(Builder builder, int x) { + builder.foo("xyz").bar(x).foo("abc"); + } + + static class Builder { + Builder foo(String s) { + return this; + } + + Builder bar(int x) { + return this; + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CallChainExpression.java b/java/java-tests/testData/refactoring/extractMethodNew/CallChainExpression.java new file mode 100644 index 000000000000..f8aafa4cf157 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CallChainExpression.java @@ -0,0 +1,13 @@ +class CallChainExpression { + String foo() { + String s = A.a().b().c; + System.out.println(s); + return s; + } + + static class A { + static A a() { return new A(); } + A b() { return this; } + String c = ""; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CallChainExpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CallChainExpression_after.java new file mode 100644 index 000000000000..eaf6211359be --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CallChainExpression_after.java @@ -0,0 +1,17 @@ +class CallChainExpression { + String foo() { + String s = newMethod(); + System.out.println(s); + return s; + } + + private String newMethod() { + return A.a().b().c; + } + + static class A { + static A a() { return new A(); } + A b() { return this; } + String c = ""; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CallOn2DimArrayElement.java b/java/java-tests/testData/refactoring/extractMethodNew/CallOn2DimArrayElement.java new file mode 100644 index 000000000000..cf33c80c42d4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CallOn2DimArrayElement.java @@ -0,0 +1,5 @@ +class C { + int foo(String[][] vars, int i, int j) { + return vars[i][j].length(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CallOn2DimArrayElement_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CallOn2DimArrayElement_after.java new file mode 100644 index 000000000000..495f7d8f629e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CallOn2DimArrayElement_after.java @@ -0,0 +1,9 @@ +class C { + int foo(String[][] vars, int i, int j) { + return newMethod(vars[i][j]); + } + + private int newMethod(String s) { + return s.length(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CallOnArrayElement.java b/java/java-tests/testData/refactoring/extractMethodNew/CallOnArrayElement.java new file mode 100644 index 000000000000..7794ab9692f3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CallOnArrayElement.java @@ -0,0 +1,5 @@ +class C { + int foo(String[] vars, int i) { + return vars[i].length(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CallOnArrayElement_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CallOnArrayElement_after.java new file mode 100644 index 000000000000..5c74700b8918 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CallOnArrayElement_after.java @@ -0,0 +1,9 @@ +class C { + int foo(String[] vars, int i) { + return newMethod(vars[i]); + } + + private int newMethod(String var) { + return var.length(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CallOnFieldArrayElement.java b/java/java-tests/testData/refactoring/extractMethodNew/CallOnFieldArrayElement.java new file mode 100644 index 000000000000..c5aca75e0a9d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CallOnFieldArrayElement.java @@ -0,0 +1,6 @@ +class C { + String[] vars; + int foo(C c, int i) { + return c.vars[i].length(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CallOnFieldArrayElement_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CallOnFieldArrayElement_after.java new file mode 100644 index 000000000000..569e9b96299c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CallOnFieldArrayElement_after.java @@ -0,0 +1,10 @@ +class C { + String[] vars; + int foo(C c, int i) { + return newMethod(c.vars[i]); + } + + private int newMethod(String var) { + return var.length(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CantPassFieldAsParameter.java b/java/java-tests/testData/refactoring/extractMethodNew/CantPassFieldAsParameter.java new file mode 100644 index 000000000000..7eb85c4ab5c5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CantPassFieldAsParameter.java @@ -0,0 +1,6 @@ +class X { + private int myI; + void foo() { + int i = myI++; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Cast4ParamGeneration.java b/java/java-tests/testData/refactoring/extractMethodNew/Cast4ParamGeneration.java new file mode 100644 index 000000000000..a36c65d88461 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Cast4ParamGeneration.java @@ -0,0 +1,11 @@ +public class Test { + void foo(Object o) { + if (o instanceof A) { + ((A)o).bar(); + } + } +} + +class A { + void bar(){} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Cast4ParamGeneration_after.java b/java/java-tests/testData/refactoring/extractMethodNew/Cast4ParamGeneration_after.java new file mode 100644 index 000000000000..3c55402357eb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Cast4ParamGeneration_after.java @@ -0,0 +1,15 @@ +public class Test { + void foo(Object o) { + if (o instanceof A) { + newMethod((A) o); + } + } + + private void newMethod(A o) { + o.bar(); + } +} + +class A { + void bar(){} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CastWhenDuplicateReplacement.java b/java/java-tests/testData/refactoring/extractMethodNew/CastWhenDuplicateReplacement.java new file mode 100644 index 000000000000..68a91fd51b8f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CastWhenDuplicateReplacement.java @@ -0,0 +1,7 @@ +class Test { + + void foo(Object x) { + if (x instanceof String) x = ((String)x).substring(1); + if (x instanceof String) x = ((String)x).substring(1); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CastWhenDuplicateReplacement_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CastWhenDuplicateReplacement_after.java new file mode 100644 index 000000000000..dbe5a20546ce --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CastWhenDuplicateReplacement_after.java @@ -0,0 +1,14 @@ +import org.jetbrains.annotations.NotNull; + +class Test { + + void foo(Object x) { + if (x instanceof String) x = newMethod((String) x); + if (x instanceof String) x = newMethod((String) x); + } + + @NotNull + private String newMethod(String x) { + return x.substring(1); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructor.java b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructor.java new file mode 100644 index 000000000000..c69c2f6a06b6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructor.java @@ -0,0 +1,9 @@ +class A { + private int i; + private int j; + + public A(int i, int j) { + this.i = i; + this.j = j; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorDuplicates.java b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorDuplicates.java new file mode 100644 index 000000000000..30ccf5a8d350 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorDuplicates.java @@ -0,0 +1,15 @@ +class A { + private int i; + private int j; + private int s; + + public A(int i, int j) { + this.i = i; + this.j = j; + } + + public A(int i, String s) { + this.i = i; + this.s = s; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorDuplicates_after.java new file mode 100644 index 000000000000..70f9fa161b00 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorDuplicates_after.java @@ -0,0 +1,19 @@ +class A { + private int i; + private int j; + private int s; + + public A(int i, int j) { + this(i); + this.j = j; + } + + private A(int i) { + this.i = i; + } + + public A(int i, String s) { + this(i); + this.s = s; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorInvalidDuplicates.java b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorInvalidDuplicates.java new file mode 100644 index 000000000000..696090f4eb1f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorInvalidDuplicates.java @@ -0,0 +1,15 @@ +class A { + private int i; + private int j; + private int s; + + public A(int i, int j) { + this.i = i; + this.j = j; + } + + public A(int i, String s) { + this.s = s; + this.i = i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorInvalidDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorInvalidDuplicates_after.java new file mode 100644 index 000000000000..53b78ecc3d3c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructorInvalidDuplicates_after.java @@ -0,0 +1,19 @@ +class A { + private int i; + private int j; + private int s; + + public A(int i, int j) { + this(i); + this.j = j; + } + + private A(int i) { + this.i = i; + } + + public A(int i, String s) { + this.s = s; + this.i = i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructor_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructor_after.java new file mode 100644 index 000000000000..bb45e0bbe12a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ChainedConstructor_after.java @@ -0,0 +1,13 @@ +class A { + private int i; + private int j; + + public A(int i, int j) { + this(i); + this.j = j; + } + + private A(int i) { + this.i = i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ChangedReturnType.java b/java/java-tests/testData/refactoring/extractMethodNew/ChangedReturnType.java new file mode 100644 index 000000000000..627f2f8c7b8b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ChangedReturnType.java @@ -0,0 +1,13 @@ +class X { + void foo(java.util.List l) { + for (Object o : l) { + if (o == null) continue; + String x = bar(o); + System.out.println(x); + } + } + + private String bar(Object o) { + return ""; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ChangedReturnType_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ChangedReturnType_after.java new file mode 100644 index 000000000000..359aa9483800 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ChangedReturnType_after.java @@ -0,0 +1,22 @@ +import org.jetbrains.annotations.Nullable; + +class X { + void foo(java.util.List l) { + for (Object o : l) { + Object x = newMethod(o); + if (x == null) continue; + System.out.println(x); + } + } + + @Nullable + private Object newMethod(Object o) { + if (o == null) return null; + String x = bar(o); + return x; + } + + private String bar(Object o) { + return ""; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CheckQualifierMapping.java b/java/java-tests/testData/refactoring/extractMethodNew/CheckQualifierMapping.java new file mode 100644 index 000000000000..46ea8a3e3489 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CheckQualifierMapping.java @@ -0,0 +1,14 @@ +import java.util.*; +class Test { + + public void method() { + String a = "A"; + ArrayList listA = new ArrayList(); + listA.add(a); + + ArrayList listB = new ArrayList(); + ArrayList listC = new ArrayList(); + listB.add("B"); + listC.add("C"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CheckQualifierMapping_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CheckQualifierMapping_after.java new file mode 100644 index 000000000000..c33b439a2138 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CheckQualifierMapping_after.java @@ -0,0 +1,18 @@ +import java.util.*; +class Test { + + public void method() { + String a = "A"; + newMethod(a); + + ArrayList listB = new ArrayList(); + ArrayList listC = new ArrayList(); + listB.add("B"); + listC.add("C"); + } + + private void newMethod(String a) { + ArrayList listA = new ArrayList(); + listA.add(a); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ClassReference.java b/java/java-tests/testData/refactoring/extractMethodNew/ClassReference.java new file mode 100644 index 000000000000..3eec91cf5b2f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ClassReference.java @@ -0,0 +1,19 @@ +class C { + Object foo(boolean b) { + if (b) { + return A.getInstance(); + } else { + return B.getInstance(); + } + } +} +class A { + static A getInstance() { + return new A(); + } +} +class B extends A { + static B getInstance() { + return new B(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ClassReference2.java b/java/java-tests/testData/refactoring/extractMethodNew/ClassReference2.java new file mode 100644 index 000000000000..a8fc11819921 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ClassReference2.java @@ -0,0 +1,16 @@ +class C { + Object foo(boolean b) { + if (b) { + return A.getInstance(); + } else { + return B.getInstance(); + } + } +} +class A { + static A getInstance() { + return new A(); + } +} +class B extends A { +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ClassReference2_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ClassReference2_after.java new file mode 100644 index 000000000000..e05a47b4fa1a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ClassReference2_after.java @@ -0,0 +1,23 @@ +import org.jetbrains.annotations.NotNull; + +class C { + Object foo(boolean b) { + if (b) { + return newMethod(); + } else { + return newMethod(); + } + } + + @NotNull + private Object newMethod() { + return A.getInstance(); + } +} +class A { + static A getInstance() { + return new A(); + } +} +class B extends A { +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ClassReference_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ClassReference_after.java new file mode 100644 index 000000000000..87324962ce5d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ClassReference_after.java @@ -0,0 +1,26 @@ +import org.jetbrains.annotations.NotNull; + +class C { + Object foo(boolean b) { + if (b) { + return newMethod(); + } else { + return B.getInstance(); + } + } + + @NotNull + private Object newMethod() { + return A.getInstance(); + } +} +class A { + static A getInstance() { + return new A(); + } +} +class B extends A { + static B getInstance() { + return new B(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates.java new file mode 100644 index 000000000000..291e623a1516 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates.java @@ -0,0 +1,8 @@ +class C { + { + int i; + + System.out.println(i); + System.out.println(128); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates2.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates2.java new file mode 100644 index 000000000000..0ac81a21b961 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates2.java @@ -0,0 +1,15 @@ +class C { + { + Object[] array; + + for (int i = 0; i < array.length; i++) { + System.out.println(array[i]); + } + + + Object[] array1; + for (int i = 0; i < array1.length; i++) { + System.out.println(array[i]); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates2_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates2_after.java new file mode 100644 index 000000000000..e4a1b396e91f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates2_after.java @@ -0,0 +1,19 @@ +class C { + { + Object[] array; + + newMethod(array); + + + Object[] array1; + for (int i = 0; i < array1.length; i++) { + System.out.println(array[i]); + } + } + + private void newMethod(Object[] array) { + for (int i = 0; i < array.length; i++) { + System.out.println(array[i]); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates3.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates3.java new file mode 100644 index 000000000000..70538c646eaf --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates3.java @@ -0,0 +1,15 @@ +class C { + { + Object[] array; + + for (int i = 0; i < array.length; i++) { + System.out.println(array[i]); + } + + + Object[] array1; + for (int i = 0; i < array1.length; i++) { + System.out.println(array1[i]); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates3_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates3_after.java new file mode 100644 index 000000000000..f2b59d1bcd31 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates3_after.java @@ -0,0 +1,17 @@ +class C { + { + Object[] array; + + newMethod(array); + + + Object[] array1; + newMethod(array1); + } + + private void newMethod(Object[] array) { + for (int i = 0; i < array.length; i++) { + System.out.println(array[i]); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates4.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates4.java new file mode 100644 index 000000000000..f22baf62e3d0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates4.java @@ -0,0 +1,15 @@ +class C { + { + Object[] array; + + for (int i = 0; i < array.length; i++) { + System.out.println(array[i]); + } + + + Object[] array1; + for (int j = 0; j < array1.length; j++) { + System.out.println(array1[j]); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates4_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates4_after.java new file mode 100644 index 000000000000..f2b59d1bcd31 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates4_after.java @@ -0,0 +1,17 @@ +class C { + { + Object[] array; + + newMethod(array); + + + Object[] array1; + newMethod(array1); + } + + private void newMethod(Object[] array) { + for (int i = 0; i < array.length; i++) { + System.out.println(array[i]); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates5.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates5.java new file mode 100644 index 000000000000..05197ad38bf1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates5.java @@ -0,0 +1,30 @@ +class D {} +class C extends D { + int myField = 10; + int myOtherField = 10; + + { + int i = 5; + myField = i; + myOtherField = i; + + C c = new C(); + + c.myField = 12; + c.myOtherField = 12; + + C c1 = new C(); + c1.myField = 12; + myOtherField = 12; + + + //not a duplicate: method is not visible with qualifer class + D d1 = new D(); + d1.myField = 12; + d1.myOtherField = 12; + + + c.myField = 15; + c1.myOtherField = 15; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates5_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates5_after.java new file mode 100644 index 000000000000..f603c3d2844f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates5_after.java @@ -0,0 +1,33 @@ +class D {} +class C extends D { + int myField = 10; + int myOtherField = 10; + + { + int i = 5; + newMethod(i); + + C c = new C(); + + c.newMethod(12); + + C c1 = new C(); + c1.myField = 12; + myOtherField = 12; + + + //not a duplicate: method is not visible with qualifer class + D d1 = new D(); + d1.myField = 12; + d1.myOtherField = 12; + + + c.myField = 15; + c1.myOtherField = 15; + } + + private void newMethod(int i) { + myField = i; + myOtherField = i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesVarargsShouldNotChangeReturnType.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesVarargsShouldNotChangeReturnType.java new file mode 100644 index 000000000000..082875b217b9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesVarargsShouldNotChangeReturnType.java @@ -0,0 +1,12 @@ +class Test { + void foo() { + bar(String.valueOf(1)); + baz(String.valueOf(1)); + } + + private void bar(String s) { + } + + private void baz(String... s) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesVarargsShouldNotChangeReturnType_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesVarargsShouldNotChangeReturnType_after.java new file mode 100644 index 000000000000..cabf2a5a0c1d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesVarargsShouldNotChangeReturnType_after.java @@ -0,0 +1,19 @@ +import org.jetbrains.annotations.NotNull; + +class Test { + void foo() { + bar(newMethod()); + baz(newMethod()); + } + + @NotNull + private String newMethod() { + return String.valueOf(1); + } + + private void bar(String s) { + } + + private void baz(String... s) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithComments.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithComments.java new file mode 100644 index 000000000000..187ead9cf607 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithComments.java @@ -0,0 +1,19 @@ +class Test { + private List list1 = new ArrayList(); + + private List list2 = new ArrayList(); + + public void method1() + { + list1.add(null); + // add to list2 + list2.add(true); + } + + public void method2() + { + list1.add(null); + // add to list2 + list2.add(true); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithComments_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithComments_after.java new file mode 100644 index 000000000000..df261640057e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithComments_after.java @@ -0,0 +1,21 @@ +class Test { + private List list1 = new ArrayList(); + + private List list2 = new ArrayList(); + + public void method1() + { + newMethod(); + } + + public void method2() + { + newMethod(); + } + + private void newMethod() { + list1.add(null); + // add to list2 + list2.add(true); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinue.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinue.java new file mode 100644 index 000000000000..372ad8742899 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinue.java @@ -0,0 +1,14 @@ +class C { + void foo() { + for(int i = 0; i < 10; i++){ + if (i < 10){ continue;} + System.out.println(""); + } + } + + { + for(int i = 0; i < 10; i++){ + if (i < 10){ continue;} + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinueNoReturn.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinueNoReturn.java new file mode 100644 index 000000000000..96c3399df495 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinueNoReturn.java @@ -0,0 +1,13 @@ +class C { + void foo() { + for(int i = 0; i < 10; i++){ + if (i < 10){ continue;} + } + } + + { + for(int i = 0; i < 10; i++){ + if (i < 10){ continue;} + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinueNoReturn_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinueNoReturn_after.java new file mode 100644 index 000000000000..417e5180ff42 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinueNoReturn_after.java @@ -0,0 +1,19 @@ +class C { + void foo() { + for(int i = 0; i < 10; i++){ + newMethod(i); + } + } + + private void newMethod(int i) { + if (i < 10) { + return; + } + } + + { + for(int i = 0; i < 10; i++){ + newMethod(i); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinue_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinue_after.java new file mode 100644 index 000000000000..b9a891ac3ef1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithContinue_after.java @@ -0,0 +1,21 @@ +class C { + void foo() { + for(int i = 0; i < 10; i++){ + if (newMethod(i)) continue; + System.out.println(""); + } + } + + private boolean newMethod(int i) { + if (i < 10) { + return true; + } + return false; + } + + { + for(int i = 0; i < 10; i++){ + if (newMethod(i)) continue; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithEmptyStatementsBlocksParentheses.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithEmptyStatementsBlocksParentheses.java new file mode 100644 index 000000000000..56ecb9c586a2 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithEmptyStatementsBlocksParentheses.java @@ -0,0 +1,15 @@ +class Test { + + public void method1() + { + System.out.println(((1))); + ;; + System.out.println(2); + } + + public void method2() + { + System.out.println(1); + System.out.println(2); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithEmptyStatementsBlocksParentheses_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithEmptyStatementsBlocksParentheses_after.java new file mode 100644 index 000000000000..423e6dac4153 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithEmptyStatementsBlocksParentheses_after.java @@ -0,0 +1,17 @@ +class Test { + + public void method1() + { + newMethod(); + } + + public void method2() + { + newMethod(); + } + + private void newMethod() { + System.out.println(1); + System.out.println(2); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithMultExitPoints.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithMultExitPoints.java new file mode 100644 index 000000000000..2111f4915d4a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithMultExitPoints.java @@ -0,0 +1,7 @@ +class A { + int foo (Object o) { + if (o == null) return 0; + if (o == null) return 0; + return 1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithMultExitPoints_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithMultExitPoints_after.java new file mode 100644 index 000000000000..1678a904987d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithMultExitPoints_after.java @@ -0,0 +1,12 @@ +class A { + int foo (Object o) { + if (newMethod(o)) return 0; + if (newMethod(o)) return 0; + return 1; + } + + private boolean newMethod(Object o) { + if (o == null) return true; + return false; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue.java new file mode 100644 index 000000000000..74a2dfa1639e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue.java @@ -0,0 +1,16 @@ +import java.util.*; + +class C { + { + Object[] array; + + List l1 = new ArrayList(Arrays.asList(array)); + + List l2 = new ArrayList(Arrays.asList(getObjects())); + + System.out.println("l1 = " + l1 + ", l2 = " + l2); + } + + String[] getObjects() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue1.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue1.java new file mode 100644 index 000000000000..549aafd9a137 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue1.java @@ -0,0 +1,19 @@ +import java.util.*; + +class C { + { + Object[] array; + + List l1 = null; + l1 = new ArrayList(Arrays.asList(array)); + + List l2 = null; + l2 = new ArrayList(Arrays.asList(getObjects())); + + System.out.println("l1 = " + l1 + ", l2 = " + l2); + } + + + String[] getObjects() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue1_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue1_after.java new file mode 100644 index 000000000000..6ac023628408 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue1_after.java @@ -0,0 +1,26 @@ +import org.jetbrains.annotations.NotNull; + +import java.util.*; + +class C { + { + Object[] array; + + List l1 = newMethod(array); + + List l2 = newMethod(getObjects()); + + System.out.println("l1 = " + l1 + ", l2 = " + l2); + } + + @NotNull + private List newMethod(Object[] array) { + List l1 = null; + l1 = new ArrayList(Arrays.asList(array)); + return l1; + } + + + String[] getObjects() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue_after.java new file mode 100644 index 000000000000..bd8e0b719009 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithOutputValue_after.java @@ -0,0 +1,23 @@ +import org.jetbrains.annotations.NotNull; + +import java.util.*; + +class C { + { + Object[] array; + + List l1 = newMethod(array); + + List l2 = newMethod(getObjects()); + + System.out.println("l1 = " + l1 + ", l2 = " + l2); + } + + @NotNull + private List newMethod(Object[] array) { + return new ArrayList(Arrays.asList(array)); + } + + String[] getObjects() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn.java new file mode 100644 index 000000000000..451960db33b3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn.java @@ -0,0 +1,13 @@ +class C { + String method(Object o) { + System.out.println(o); + Integer i = new Integer(o.hashCode()); + return i.toString(); + } + + { + String k; + Integer j = new Integer(Boolean.TRUE.hashCode()); + k = j.toString(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn2.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn2.java new file mode 100644 index 000000000000..81b99174c307 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn2.java @@ -0,0 +1,12 @@ +class C { + String method(Object o) { + System.out.println(o); + Integer i = new Integer(o.hashCode()); + return i.toString(); + } + + { + Integer j = new Integer(Boolean.TRUE.hashCode()); + String k = j.toString(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn2_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn2_after.java new file mode 100644 index 000000000000..e6bc2850b072 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn2_after.java @@ -0,0 +1,18 @@ +import org.jetbrains.annotations.NotNull; + +class C { + String method(Object o) { + System.out.println(o); + return newMethod(o); + } + + @NotNull + private String newMethod(Object o) { + Integer i = new Integer(o.hashCode()); + return i.toString(); + } + + { + String k = newMethod(Boolean.TRUE); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturnInAnonymous.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturnInAnonymous.java new file mode 100644 index 000000000000..688138296ada --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturnInAnonymous.java @@ -0,0 +1,15 @@ +class Test10 { + void test() { + new Object() { + int get() { + return 0; + } + }; + + new Object() { + int get() { + return 0; + } + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturnInAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturnInAnonymous_after.java new file mode 100644 index 000000000000..b2f56a228e2c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturnInAnonymous_after.java @@ -0,0 +1,15 @@ +class Test10 { + void test() { + newMethod(); + + newMethod(); + } + + private void newMethod() { + new Object() { + int get() { + return 0; + } + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn_after.java new file mode 100644 index 000000000000..86c3e46763be --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithReturn_after.java @@ -0,0 +1,19 @@ +import org.jetbrains.annotations.NotNull; + +class C { + String method(Object o) { + System.out.println(o); + return newMethod(o); + } + + @NotNull + private String newMethod(Object o) { + Integer i = new Integer(o.hashCode()); + return i.toString(); + } + + { + String k; + k = newMethod(Boolean.TRUE); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithStaticInitializer.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithStaticInitializer.java new file mode 100644 index 000000000000..8fba585317ce --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithStaticInitializer.java @@ -0,0 +1,11 @@ +class C { + static C c; + static { + java.util.ArrayList l = null; + l.add(c); + } + + void foo() { + System.out.println(c); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithStaticInitializer_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithStaticInitializer_after.java new file mode 100644 index 000000000000..d7fcf48c0828 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicatesWithStaticInitializer_after.java @@ -0,0 +1,15 @@ +class C { + static C c; + static { + java.util.ArrayList l = null; + l.add(newMethod()); + } + + void foo() { + System.out.println(newMethod()); + } + + private static C newMethod() { + return c; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates_after.java new file mode 100644 index 000000000000..e6b481d2e84a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CodeDuplicates_after.java @@ -0,0 +1,12 @@ +class C { + { + int i; + + newMethod(i); + newMethod(128); + } + + private void newMethod(int i) { + System.out.println(i); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ComplexTypeParams.java b/java/java-tests/testData/refactoring/extractMethodNew/ComplexTypeParams.java new file mode 100644 index 000000000000..c42f2268547d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ComplexTypeParams.java @@ -0,0 +1,9 @@ +import java.util.List; + +public class Test +{ + void foo(List> tr){ + tr.add(null); + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ComplexTypeParams_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ComplexTypeParams_after.java new file mode 100644 index 000000000000..9253419d1838 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ComplexTypeParams_after.java @@ -0,0 +1,13 @@ +import java.util.List; + +public class Test +{ + void foo(List> tr){ + newMethod(tr); + } + + private void newMethod(List> tr) { + tr.add(null); + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConditionalExitCombinedWithNullabilityShouldPreserveVarsUsedInExitStatements.java b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalExitCombinedWithNullabilityShouldPreserveVarsUsedInExitStatements.java new file mode 100644 index 000000000000..831178c21123 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalExitCombinedWithNullabilityShouldPreserveVarsUsedInExitStatements.java @@ -0,0 +1,12 @@ +class X { + static String guessTestDataName(String method, String testName, String[] methods) { + for (String psiMethod : methods) { + String strings = method; + if (strings != null && !strings.isEmpty()) { + return strings.substring(0) + testName; + } + + } + return null; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConditionalExitCombinedWithNullabilityShouldPreserveVarsUsedInExitStatements_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalExitCombinedWithNullabilityShouldPreserveVarsUsedInExitStatements_after.java new file mode 100644 index 000000000000..97296a730145 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalExitCombinedWithNullabilityShouldPreserveVarsUsedInExitStatements_after.java @@ -0,0 +1,21 @@ +import org.jetbrains.annotations.Nullable; + +class X { + static String guessTestDataName(String method, String testName, String[] methods) { + for (String psiMethod : methods) { + String strings = newMethod(method, testName); + if (strings != null) return strings; + + } + return null; + } + + @Nullable + private static String newMethod(String method, String testName) { + String strings = method; + if (strings != null && !strings.isEmpty()) { + return strings.substring(0) + testName; + } + return null; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnInDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnInDuplicate.java new file mode 100644 index 000000000000..b5e4fb9d2df4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnInDuplicate.java @@ -0,0 +1,24 @@ +class Conditional { + int[] bar(String[] s) { + + if (s != null) { + int[] n = new int[s.length]; + for (int i = 0; i < s.length; i++) { + n[i] = s[i].length(); + } + return n; + } + return new int[0]; + } + + int[] baz(String[] z) { + if (z != null) { + int[] n = new int[z.length]; + for (int i = 0; i < z.length; i++) { + n[i] = z[i].length(); + } + return n; + } + return new int[0]; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnInDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnInDuplicate_after.java new file mode 100644 index 000000000000..1c0a814f0d4a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnInDuplicate_after.java @@ -0,0 +1,25 @@ +class Conditional { + int[] bar(String[] s) { + + int[] n = newMethod(s); + if (n != null) return n; + return new int[0]; + } + + private int[] newMethod(String[] s) { + if (s != null) { + int[] n = new int[s.length]; + for (int i = 0; i < s.length; i++) { + n[i] = s[i].length(); + } + return n; + } + return null; + } + + int[] baz(String[] z) { + int[] n = newMethod(z); + if (n != null) return n; + return new int[0]; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnVsAssignDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnVsAssignDuplicate.java new file mode 100644 index 000000000000..41c3c0d4f3ba --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnVsAssignDuplicate.java @@ -0,0 +1,18 @@ +class Conditional { + int bar(String s) { + if (s != null) { + int n = s.length; + return n; + } + return 0; + } + + int baz(String z) { + int x = -1; + if (z != null) { + int n = z.length; + x = n; + } + return 0; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnVsAssignDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnVsAssignDuplicate_after.java new file mode 100644 index 000000000000..866809c7145f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalReturnVsAssignDuplicate_after.java @@ -0,0 +1,27 @@ +import org.jetbrains.annotations.Nullable; + +class Conditional { + int bar(String s) { + Integer n = newMethod(s); + if (n != null) return n; + return 0; + } + + @Nullable + private Integer newMethod(String s) { + if (s != null) { + int n = s.length; + return n; + } + return null; + } + + int baz(String z) { + int x = -1; + if (z != null) { + int n = z.length; + x = n; + } + return 0; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConditionalWithTwoParameters.java b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalWithTwoParameters.java new file mode 100644 index 000000000000..75181f8acdc3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalWithTwoParameters.java @@ -0,0 +1,27 @@ +class RenamedParameter { + private boolean c; + + public void foo() { + String a = "s"; + String b = "t"; + if (c) { + String t = b; + x(t); + } else if (!b.equals(a)) { + x(b); + } + } + + public void bar() { + String a = "t"; + String b = "s"; + if (c) { + String t = b; + x(t); + } else if (!b.equals(a)) { + x(b); + } + } + + void x(String s) {} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConditionalWithTwoParameters_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalWithTwoParameters_after.java new file mode 100644 index 000000000000..b7b10c07323b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConditionalWithTwoParameters_after.java @@ -0,0 +1,26 @@ +class RenamedParameter { + private boolean c; + + public void foo() { + String a = "s"; + String b = "t"; + newMethod(a, b); + } + + private void newMethod(String a, String b) { + if (c) { + String t = b; + x(t); + } else if (!b.equals(a)) { + x(b); + } + } + + public void bar() { + String a = "t"; + String b = "s"; + newMethod(a, b); + } + + void x(String s) {} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConflictingAnonymous.java b/java/java-tests/testData/refactoring/extractMethodNew/ConflictingAnonymous.java new file mode 100644 index 000000000000..9b9f4e280df1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConflictingAnonymous.java @@ -0,0 +1,10 @@ +public class Test { + void foo() { + new A() { + void fe() {System.out.println("");} + } + } +} +class A { + void newMethod(){} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConflictingAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ConflictingAnonymous_after.java new file mode 100644 index 000000000000..4b206009a893 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConflictingAnonymous_after.java @@ -0,0 +1,16 @@ +public class Test { + void foo() { + new A() { + void fe() { + Test.this.newMethod(); + } + } + } + + private void newMethod() { + System.out.println(""); + } +} +class A { + void newMethod(){} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow.java b/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow.java new file mode 100644 index 000000000000..f00e84b5673a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow.java @@ -0,0 +1,9 @@ +public /*abstract*/ class WillWorkTest { + int opera() { + int i = 0; + + int k; + if (true) k = i; + return k; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow1.java b/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow1.java new file mode 100644 index 000000000000..f03fb56d7841 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow1.java @@ -0,0 +1,13 @@ +class Test { + + public void test(boolean b) { + int a = 1; + if (true) { + System.out.println(a); + } else { + System.out.println(a); + } + } + + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow1_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow1_after.java new file mode 100644 index 000000000000..5d57d125f39e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow1_after.java @@ -0,0 +1,17 @@ +class Test { + + public void test(boolean b) { + int a = 1; + if (true) { + newMethod(a); + } else { + newMethod(a); + } + } + + private void newMethod(int a) { + System.out.println(a); + } + + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow_after.java new file mode 100644 index 000000000000..2876225a3660 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ConstantConditionsAffectingControlFlow_after.java @@ -0,0 +1,13 @@ +public /*abstract*/ class WillWorkTest { + int opera() { + int i = 0; + + return newMethod(i); + } + + private int newMethod(int i) { + int k; + if (true) k = i; + return k; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ContinueInside.java b/java/java-tests/testData/refactoring/extractMethodNew/ContinueInside.java new file mode 100644 index 000000000000..892e22d93a9c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ContinueInside.java @@ -0,0 +1,12 @@ +class Test { + String foo(String[] args) { + + for(String arg : args) { + if (arg == null) continue; + System.out.println(arg); + } + if (args.length == 0) return null; + + return null; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ContinueInside_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ContinueInside_after.java new file mode 100644 index 000000000000..a8e17f76c123 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ContinueInside_after.java @@ -0,0 +1,17 @@ +class Test { + String foo(String[] args) { + + if (newMethod(args)) return null; + + return null; + } + + private boolean newMethod(String[] args) { + for(String arg : args) { + if (arg == null) continue; + System.out.println(arg); + } + if (args.length == 0) return true; + return false; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CopyParamAnnotations.java b/java/java-tests/testData/refactoring/extractMethodNew/CopyParamAnnotations.java new file mode 100644 index 000000000000..cc5146486e4e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CopyParamAnnotations.java @@ -0,0 +1,21 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class X { + @NotNull + public X fun1(int x) { + return this; + } + + public X fun2(@Nullable @SuppressWarnings("unused") String b) { + + if (b != null) { + int x = 1; + return fun1(x); + } + + + int x = 0; + return null; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/CopyParamAnnotations_after.java b/java/java-tests/testData/refactoring/extractMethodNew/CopyParamAnnotations_after.java new file mode 100644 index 000000000000..f7c2c1fb43ec --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/CopyParamAnnotations_after.java @@ -0,0 +1,28 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class X { + @NotNull + public X fun1(int x) { + return this; + } + + public X fun2(@Nullable @SuppressWarnings("unused") String b) { + + X x1 = newMethod(b); + if (x1 != null) return x1; + + + int x = 0; + return null; + } + + @Nullable + private X newMethod(@Nullable String b) { + if (b != null) { + int x = 1; + return fun1(x); + } + return null; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentChainedFieldsDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentChainedFieldsDuplicate.java new file mode 100644 index 000000000000..17003b7082a2 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentChainedFieldsDuplicate.java @@ -0,0 +1,22 @@ +class DecrementDifferentChainedFieldsDuplicate { + static class C { + int x; + int y; + } + public static final C c; + + private void foo() { + + if (c.x > 0) { + bar(c.x); + c.x--; + } + + if (c.y > 0) { + bar(c.y); + c.y--; + } + } + + private void bar(int i) { } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentChainedFieldsDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentChainedFieldsDuplicate_after.java new file mode 100644 index 000000000000..2d68632257ff --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentChainedFieldsDuplicate_after.java @@ -0,0 +1,26 @@ +class DecrementDifferentChainedFieldsDuplicate { + static class C { + int x; + int y; + } + public static final C c; + + private void foo() { + + newMethod(); + + if (c.y > 0) { + bar(c.y); + c.y--; + } + } + + private void newMethod() { + if (c.x > 0) { + bar(c.x); + c.x--; + } + } + + private void bar(int i) { } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentFieldsDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentFieldsDuplicate.java new file mode 100644 index 000000000000..d21050cb73b6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentFieldsDuplicate.java @@ -0,0 +1,19 @@ +class DecrementDifferentFieldsDuplicate { + int x; + int y; + + private void foo() { + + if (x > 0) { + bar(x); + x--; + } + + if (y > 0) { + bar(y); + y--; + } + } + + private void bar(int i) { } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentFieldsDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentFieldsDuplicate_after.java new file mode 100644 index 000000000000..0590921b3e10 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentFieldsDuplicate_after.java @@ -0,0 +1,23 @@ +class DecrementDifferentFieldsDuplicate { + int x; + int y; + + private void foo() { + + newMethod(); + + if (y > 0) { + bar(y); + y--; + } + } + + private void newMethod() { + if (x > 0) { + bar(x); + x--; + } + } + + private void bar(int i) { } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentInnerFieldsDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentInnerFieldsDuplicate.java new file mode 100644 index 000000000000..0ee6e3ef76bb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentInnerFieldsDuplicate.java @@ -0,0 +1,21 @@ +class DecrementDifferentInnerFieldsDuplicate { + class C { + int x; + int y; + } + + private void foo(C a, C b) { + + if (a.x > 0) { + bar(a.x); + a.x--; + } + + if (b.y > 0) { + bar(b.y); + b.y--; + } + } + + private void bar(int i) { } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentInnerFieldsDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentInnerFieldsDuplicate_after.java new file mode 100644 index 000000000000..476c262a699a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentInnerFieldsDuplicate_after.java @@ -0,0 +1,25 @@ +class DecrementDifferentInnerFieldsDuplicate { + class C { + int x; + int y; + } + + private void foo(C a, C b) { + + newMethod(a); + + if (b.y > 0) { + bar(b.y); + b.y--; + } + } + + private void newMethod(C a) { + if (a.x > 0) { + bar(a.x); + a.x--; + } + } + + private void bar(int i) { } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentOuterFieldsDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentOuterFieldsDuplicate.java new file mode 100644 index 000000000000..94c564b59d5a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentOuterFieldsDuplicate.java @@ -0,0 +1,21 @@ +class DecrementDifferentOuterFieldsDuplicate { + int x; + int y; + + class C { + private void foo() { + + if (x > 0) { + bar(x); + DecrementDifferentOuterFieldsDuplicate.this.x--; + } + + if (y > 0) { + bar(y); + DecrementDifferentOuterFieldsDuplicate.this.y--; + } + } + } + + private void bar(int i) { } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentOuterFieldsDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentOuterFieldsDuplicate_after.java new file mode 100644 index 000000000000..cca7398cf88c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentOuterFieldsDuplicate_after.java @@ -0,0 +1,25 @@ +class DecrementDifferentOuterFieldsDuplicate { + int x; + int y; + + class C { + private void foo() { + + newMethod(); + + if (y > 0) { + bar(y); + DecrementDifferentOuterFieldsDuplicate.this.y--; + } + } + + private void newMethod() { + if (x > 0) { + bar(x); + DecrementDifferentOuterFieldsDuplicate.this.x--; + } + } + } + + private void bar(int i) { } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentStaticFieldsDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentStaticFieldsDuplicate.java new file mode 100644 index 000000000000..376a16dc9dab --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentStaticFieldsDuplicate.java @@ -0,0 +1,21 @@ +class DecrementDifferentStaticFieldsDuplicate { + static class C { + static int x; + static int y; + } + + private void foo() { + + if (C.x > 0) { + bar(C.x); + C.x--; + } + + if (C.y > 0) { + bar(C.y); + C.y--; + } + } + + private void bar(int i) { } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentStaticFieldsDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentStaticFieldsDuplicate_after.java new file mode 100644 index 000000000000..5423d3bc95bb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DecrementDifferentStaticFieldsDuplicate_after.java @@ -0,0 +1,25 @@ +class DecrementDifferentStaticFieldsDuplicate { + static class C { + static int x; + static int y; + } + + private void foo() { + + newMethod(); + + if (C.y > 0) { + bar(C.y); + C.y--; + } + } + + private void newMethod() { + if (C.x > 0) { + bar(C.x); + C.x--; + } + } + + private void bar(int i) { } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DefaultNamesConflictResolution.java b/java/java-tests/testData/refactoring/extractMethodNew/DefaultNamesConflictResolution.java new file mode 100644 index 000000000000..9acf21ea6efb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DefaultNamesConflictResolution.java @@ -0,0 +1,7 @@ +class X { + public static void main(String[] args) { + boolean _user = true; + String user = "foo"; + System.out.println(_user + " " + user); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DefaultNamesConflictResolution_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DefaultNamesConflictResolution_after.java new file mode 100644 index 000000000000..0749b6ad85a7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DefaultNamesConflictResolution_after.java @@ -0,0 +1,11 @@ +class X { + public static void main(String[] args) { + boolean _user = true; + String user = "foo"; + newMethod(_user, user); + } + + private static void newMethod(boolean user, String user2) { + System.out.println(user + " " + user2); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DifferentAnnotations.java b/java/java-tests/testData/refactoring/extractMethodNew/DifferentAnnotations.java new file mode 100644 index 000000000000..31b93b3c3667 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DifferentAnnotations.java @@ -0,0 +1,13 @@ +class C { + { + @A int i = 0; + System.out.println(i); + } + + void f() { + @B int j = 0; + System.out.println(j); + } +} +@interface A {} +@interface B {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DifferentAnnotations_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DifferentAnnotations_after.java new file mode 100644 index 000000000000..41510f5c31bd --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DifferentAnnotations_after.java @@ -0,0 +1,17 @@ +class C { + { + @A int i = 0; + System.out.println(i); + } + + void f() { + newMethod(); + } + + private void newMethod() { + @B int j = 0; + System.out.println(j); + } +} +@interface A {} +@interface B {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DisabledParam.java b/java/java-tests/testData/refactoring/extractMethodNew/DisabledParam.java new file mode 100644 index 000000000000..a64da7565d1e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DisabledParam.java @@ -0,0 +1,22 @@ +/* + * Copyright 2000-2012 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. + */ +class Fest { + public static void main(String[] args) { + String f = ""; + String bar = "" + System.out.println(f + ";" + bar); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DisabledParam_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DisabledParam_after.java new file mode 100644 index 000000000000..c83eb274a692 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DisabledParam_after.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2012 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. + */ +class Fest { + public static void main(String[] args) { + String f = ""; + String bar = "" + newMethod(bar); + } + + private static void newMethod(String bar) { + String f = ; + System.out.println(f + ";" + bar); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DisjunctionType.java b/java/java-tests/testData/refactoring/extractMethodNew/DisjunctionType.java new file mode 100644 index 000000000000..ff09847a4aa6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DisjunctionType.java @@ -0,0 +1,12 @@ +public class DisjunctionType { + static void test() { + try { + foo(); + } + catch (NoSuchFieldException | NoSuchMethodException ex) { + + System.out.println(ex.getCause()); + + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DisjunctionType_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DisjunctionType_after.java new file mode 100644 index 000000000000..440d0247c32d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DisjunctionType_after.java @@ -0,0 +1,16 @@ +public class DisjunctionType { + static void test() { + try { + foo(); + } + catch (NoSuchFieldException | NoSuchMethodException ex) { + + newMethod(ex); + + } + } + + private static void newMethod(ReflectiveOperationException ex) { + System.out.println(ex.getCause()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DontMakeParametersFinalDueToUsagesInsideAnonymous.java b/java/java-tests/testData/refactoring/extractMethodNew/DontMakeParametersFinalDueToUsagesInsideAnonymous.java new file mode 100644 index 000000000000..20edcc5e6b05 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DontMakeParametersFinalDueToUsagesInsideAnonymous.java @@ -0,0 +1,20 @@ +class Box { + private void test(String str1, String str2) { + Data data = new Data() { + @Override + public String getA() { + return str1; + } + @Override + public String getB() { + return str2; + } + }; + System.out.println(data); + } + + static interface Data { + String getA(); + String getB(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DontMakeParametersFinalDueToUsagesInsideAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DontMakeParametersFinalDueToUsagesInsideAnonymous_after.java new file mode 100644 index 000000000000..86a55fec2408 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DontMakeParametersFinalDueToUsagesInsideAnonymous_after.java @@ -0,0 +1,27 @@ +import org.jetbrains.annotations.NotNull; + +class Box { + private void test(String str1, String str2) { + Data data = newMethod(str1, str2); + System.out.println(data); + } + + @NotNull + private Data newMethod(String str1, String str2) { + return new Data() { + @Override + public String getA() { + return str1; + } + @Override + public String getB() { + return str2; + } + }; + } + + static interface Data { + String getA(); + String getB(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DontSkipVariablesUsedInLeftSideOfAssignments.java b/java/java-tests/testData/refactoring/extractMethodNew/DontSkipVariablesUsedInLeftSideOfAssignments.java new file mode 100644 index 000000000000..b88ace05d7a4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DontSkipVariablesUsedInLeftSideOfAssignments.java @@ -0,0 +1,22 @@ + +import java.util.List; + +class Test { + + boolean m(Object[] parsed, String[] parameters, List args) { + int i = 1; + String parameter = parameters[i]; + try { + parsed[i] = parseValue(args.get(i), parameter.getClass()); + } catch (Exception e) { + return false; + } + + return false; + } + + private static Object parseValue(String stringValue, Class type) { + return "1"; + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DontSkipVariablesUsedInLeftSideOfAssignments_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DontSkipVariablesUsedInLeftSideOfAssignments_after.java new file mode 100644 index 000000000000..5f584067383f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DontSkipVariablesUsedInLeftSideOfAssignments_after.java @@ -0,0 +1,27 @@ + +import java.util.List; + +class Test { + + boolean m(Object[] parsed, String[] parameters, List args) { + int i = 1; + if (newMethod(parsed, parameters[i], args.get(i), i)) return false; + + return false; + } + + private boolean newMethod(Object[] parsed, String parameter1, String stringValue, int i) { + String parameter = parameter1; + try { + parsed[i] = parseValue(stringValue, parameter.getClass()); + } catch (Exception e) { + return true; + } + return false; + } + + private static Object parseValue(String stringValue, Class type) { + return "1"; + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicateInUnreachableCode.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateInUnreachableCode.java new file mode 100644 index 000000000000..4c9a70dab283 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateInUnreachableCode.java @@ -0,0 +1,16 @@ + +class A { + private static final boolean ourOverrideFinalFields = false; + + public static String createShared(char[] chars) { + + if (ourOverrideFinalFields) { + String s = new String(); + return s; + } + String s = new String(); + return new String(chars); + } + + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicateInUnreachableCode_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateInUnreachableCode_after.java new file mode 100644 index 000000000000..a9317e39db5f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateInUnreachableCode_after.java @@ -0,0 +1,22 @@ +import org.jetbrains.annotations.NotNull; + +class A { + private static final boolean ourOverrideFinalFields = false; + + public static String createShared(char[] chars) { + + if (ourOverrideFinalFields) { + String s = newMethod(); + return s; + } + String s = newMethod(); + return new String(chars); + } + + @NotNull + private static String newMethod() { + return new String(); + } + + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicatePreserveComments.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatePreserveComments.java new file mode 100644 index 000000000000..9e490316aed5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatePreserveComments.java @@ -0,0 +1,13 @@ +class C { + void foo() { + /*a*/ // b + System.out.println(1); + /*c*/ // d + } + + void bar() { + /*x*/ + System.out.println(1); + /*z*/ + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicatePreserveComments_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatePreserveComments_after.java new file mode 100644 index 000000000000..d1657300d5dc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatePreserveComments_after.java @@ -0,0 +1,17 @@ +class C { + void foo() { + newMethod(); + } + + private void newMethod() { + /*a*/ // b + System.out.println(1); + /*c*/ // d + } + + void bar() { + /*x*/ + newMethod(); + /*z*/ + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpression.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpression.java new file mode 100644 index 000000000000..d527018d7cfd --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpression.java @@ -0,0 +1,19 @@ +class C { + int x; + + int b(boolean[] b, C[] c, int n) { + int i = n; + while (i >= 0 && (b[i] || c[n].x == c[i].x)) { + i--; + } + return i; + } + + int a(boolean[] b, C[] c, int n) { + int i = n; + while (i < c.length && (b[i] || c[n].x == c[i].x)) { + i++; + } + return i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpressionWithParentheses.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpressionWithParentheses.java new file mode 100644 index 000000000000..30d032e5c8c1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpressionWithParentheses.java @@ -0,0 +1,19 @@ +class C { + int x; + + int b(boolean[] b, C[] c, int n) { + int i = n; + while (i >= 0 && (b[i] || c[n].x == c[i].x)) { + i--; + } + return i; + } + + int a(boolean[] b, C[] c, int n) { + int i = n; + while (i < c.length && (b[i] || c[n].x == c[i].x)) { + i++; + } + return i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpressionWithParentheses_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpressionWithParentheses_after.java new file mode 100644 index 000000000000..aea445a87196 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpressionWithParentheses_after.java @@ -0,0 +1,23 @@ +class C { + int x; + + int b(boolean[] b, C[] c, int n) { + int i = n; + while (i >= 0 && newMethod(b[i], c[n].x == c[i].x)) { + i--; + } + return i; + } + + private boolean newMethod(boolean b2, boolean b1) { + return b2 || b1; + } + + int a(boolean[] b, C[] c, int n) { + int i = n; + while (i < c.length && (newMethod(b[i], c[n].x == c[i].x))) { + i++; + } + return i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpression_after.java new file mode 100644 index 000000000000..aea445a87196 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicateSubexpression_after.java @@ -0,0 +1,23 @@ +class C { + int x; + + int b(boolean[] b, C[] c, int n) { + int i = n; + while (i >= 0 && newMethod(b[i], c[n].x == c[i].x)) { + i--; + } + return i; + } + + private boolean newMethod(boolean b2, boolean b1) { + return b2 || b1; + } + + int a(boolean[] b, C[] c, int n) { + int i = n; + while (i < c.length && (newMethod(b[i], c[n].x == c[i].x))) { + i++; + } + return i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFromAnonymous.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFromAnonymous.java new file mode 100644 index 000000000000..bc0df8f53d7d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFromAnonymous.java @@ -0,0 +1,16 @@ +import java.util.*; + +class Main { + + private final Map> myScheduledUpdates = null; + + void foo() { + new Runnable() { + @Override + public void run() { + myScheduledUpdates.keySet().toArray(new Object[myScheduledUpdates.keySet().size()]); + } + }; + myScheduledUpdates.keySet().toArray(new Object[myScheduledUpdates.keySet().size()]); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFromAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFromAnonymous_after.java new file mode 100644 index 000000000000..6b9757bf3e88 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFromAnonymous_after.java @@ -0,0 +1,23 @@ +import org.jetbrains.annotations.NotNull; + +import java.util.*; + +class Main { + + private final Map> myScheduledUpdates = null; + + void foo() { + new Runnable() { + @Override + public void run() { + newMethod(); + } + }; + newMethod(); + } + + @NotNull + private Object[] newMethod() { + return myScheduledUpdates.keySet().toArray(new Object[myScheduledUpdates.keySet().size()]); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFullyQualifiedType.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFullyQualifiedType.java new file mode 100644 index 000000000000..0d9767f4d691 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFullyQualifiedType.java @@ -0,0 +1,31 @@ +public class FullyQualifiedType { + void foo(String s) { + try { + java.net.URL url = parse(s, java.net.URL.class); + System.out.println(url); + if (url != null) { + System.out.println(url.toExternalForm()); + System.out.println(url.getProtocol()); + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } + + void bar(String s) { + try { + java.net.URL url = parse(s, java.net.URL.class); + System.out.println(url); + if (url != null) { + System.out.println(url.toExternalForm()); + System.out.println(url.getProtocol()); + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } + + private static T parse(String s, Class aClass) throws Exception { + return aClass.getDeclaredConstructor(String.class).newInstance(s); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFullyQualifiedType_after.java b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFullyQualifiedType_after.java new file mode 100644 index 000000000000..9b4d724ca11b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/DuplicatesFullyQualifiedType_after.java @@ -0,0 +1,30 @@ +public class FullyQualifiedType { + void foo(String s) { + try { + newMethod(s); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } + + private void newMethod(String s) throws Exception { + java.net.URL url = parse(s, java.net.URL.class); + System.out.println(url); + if (url != null) { + System.out.println(url.toExternalForm()); + System.out.println(url.getProtocol()); + } + } + + void bar(String s) { + try { + newMethod(s); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } + + private static T parse(String s, Class aClass) throws Exception { + return aClass.getDeclaredConstructor(String.class).newInstance(s); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalVariables.java b/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalVariables.java new file mode 100644 index 000000000000..1e549dd4ea83 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalVariables.java @@ -0,0 +1,48 @@ +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Scanner; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class EffectivelyLocalVariables { + void test() { + Scanner inputStreamScanner = null; + String theFirstLineFromDestinationFile; + String originContent = "aaa"; + String fileName = "bbb"; + + ddd(originContent, fileName); + } + + private void ddd(String originContent, String fileName) { + Scanner inputStreamScanner; + String theFirstLineFromDestinationFile; + try { + inputStreamScanner = + new Scanner(new File(fileName)); + theFirstLineFromDestinationFile = inputStreamScanner.nextLine(); + assertEquals(theFirstLineFromDestinationFile, originContent); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + void dup() { + Scanner inputStreamScanner = null; + String theFirstLineFromDestinationFile; + String originContent = ""; + String fileName = ""; + + try { + inputStreamScanner = + new Scanner( + new File(fileName)); + theFirstLineFromDestinationFile = inputStreamScanner.nextLine(); + // destination should contain original file's content + assertEquals(theFirstLineFromDestinationFile, originContent); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalVariables_after.java b/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalVariables_after.java new file mode 100644 index 000000000000..6b48a12b36cf --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalVariables_after.java @@ -0,0 +1,45 @@ +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Scanner; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class EffectivelyLocalVariables { + void test() { + Scanner inputStreamScanner = null; + String theFirstLineFromDestinationFile; + String originContent = "aaa"; + String fileName = "bbb"; + + ddd(originContent, fileName); + } + + private void ddd(String originContent, String fileName) { + Scanner inputStreamScanner; + String theFirstLineFromDestinationFile; + newMethod(originContent, fileName); + } + + private void newMethod(String originContent, String fileName) { + Scanner inputStreamScanner; + String theFirstLineFromDestinationFile; + try { + inputStreamScanner = + new Scanner(new File(fileName)); + theFirstLineFromDestinationFile = inputStreamScanner.nextLine(); + assertEquals(theFirstLineFromDestinationFile, originContent); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + void dup() { + Scanner inputStreamScanner = null; + String theFirstLineFromDestinationFile; + String originContent = ""; + String fileName = ""; + + newMethod(originContent, fileName); + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalWithinExpression.java b/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalWithinExpression.java new file mode 100644 index 000000000000..108f2d6801ca --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalWithinExpression.java @@ -0,0 +1,19 @@ +public class EffectivelyLocalWithinExpression { + void foo() { + int n; + if ((n = z()) > 0 && n < 100) { + System.out.println(); + } + } + + void bar() { + int n; + if ((n = z()) > 1 && n < 100) { + System.out.println(); + } + } + + int z() { + return 1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalWithinExpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalWithinExpression_after.java new file mode 100644 index 000000000000..bbea90248f7c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/EffectivelyLocalWithinExpression_after.java @@ -0,0 +1,24 @@ +public class EffectivelyLocalWithinExpression { + void foo() { + int n; + if (newMethod(0)) { + System.out.println(); + } + } + + private boolean newMethod(int i) { + int n; + return (n = z()) > i && n < 100; + } + + void bar() { + int n; + if (newMethod(1)) { + System.out.println(); + } + } + + int z() { + return 1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/EmptyBlockStatement.java b/java/java-tests/testData/refactoring/extractMethodNew/EmptyBlockStatement.java new file mode 100644 index 000000000000..d7bcdcc32e50 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/EmptyBlockStatement.java @@ -0,0 +1,5 @@ +class ExtractEmptyBlock { + void foo() { + {} + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/EmptyParenthesis.java b/java/java-tests/testData/refactoring/extractMethodNew/EmptyParenthesis.java new file mode 100644 index 000000000000..7baad2adddbe --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/EmptyParenthesis.java @@ -0,0 +1,6 @@ + +class C { + void foo() { + int x = (); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateDeclaredReusedVariable.java b/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateDeclaredReusedVariable.java new file mode 100644 index 000000000000..db222a680117 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateDeclaredReusedVariable.java @@ -0,0 +1,21 @@ +import java.util.List; + +class DeclaredOutputVariable { + void foo(List a) { + + String s = a.get(1); + if (s == null) return; + System.out.println(s.charAt(1)); + + s = ""; + System.out.println(s.length()); + } + + void bar(List a) { + String s = a.get(1); + if (s == null) return; + System.out.println(s.charAt(1)); + s = ""; + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateDeclaredReusedVariable_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateDeclaredReusedVariable_after.java new file mode 100644 index 000000000000..9075b9162235 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateDeclaredReusedVariable_after.java @@ -0,0 +1,26 @@ +import java.util.List; + +class DeclaredOutputVariable { + void foo(List a) { + + if (newMethod(a)) return; + String s; + + s = ""; + System.out.println(s.length()); + } + + private boolean newMethod(List a) { + String s = a.get(1); + if (s == null) return true; + System.out.println(s.charAt(1)); + return false; + } + + void bar(List a) { + if (newMethod(a)) return; + String s; + s = ""; + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateTwoDeclaredReusedVariables.java b/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateTwoDeclaredReusedVariables.java new file mode 100644 index 000000000000..18fad96719b0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateTwoDeclaredReusedVariables.java @@ -0,0 +1,25 @@ +import java.util.List; + +class DeclaredOutputVariable { + void foo(List a) { + + int n = 1; + String s = a.get(n); + if (s == null) return; + System.out.println(s.charAt(n)); + + s = ""; + n = 2; + System.out.println(s.length() + n); + } + + void bar(List a) { + int n = 1; + String s = a.get(n); + if (s == null) return; + System.out.println(s.charAt(n)); + s = ""; + n = 2; + System.out.println(s.length() + n); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateTwoDeclaredReusedVariables_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateTwoDeclaredReusedVariables_after.java new file mode 100644 index 000000000000..225a151a6d2f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExactDuplicateTwoDeclaredReusedVariables_after.java @@ -0,0 +1,31 @@ +import java.util.List; + +class DeclaredOutputVariable { + void foo(List a) { + + if (newMethod(a)) return; + String s; + int n; + + s = ""; + n = 2; + System.out.println(s.length() + n); + } + + private boolean newMethod(List a) { + int n = 1; + String s = a.get(n); + if (s == null) return true; + System.out.println(s.charAt(n)); + return false; + } + + void bar(List a) { + if (newMethod(a)) return; + int n; + String s; + s = ""; + n = 2; + System.out.println(s.length() + n); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints1.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints1.java new file mode 100644 index 000000000000..c6436dc7e56f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints1.java @@ -0,0 +1,9 @@ +class Test{ + public void foo() { + if (cond1){ + if (cond2) return; + } + else if (cond3){ + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints10.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints10.java new file mode 100644 index 000000000000..93f0474872a2 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints10.java @@ -0,0 +1,16 @@ +class C { + private int[] list; + + private Integer find(int id) { + + int n = 0; + for (int n1 : list) { + n = n1; + if (n == id) { + return n <= 0 ? null : n; + } + } + + throw new RuntimeException(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints11.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints11.java new file mode 100644 index 000000000000..e2f3f809fa4b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints11.java @@ -0,0 +1,12 @@ +class C { + private int[] list; + + private int find(int id) { + for (int n : list) { + if (n == id) { + return n <= 0 ? 0 : n; + } + } + throw new RuntimeException(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints11_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints11_after.java new file mode 100644 index 000000000000..d4bcf6c334b1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints11_after.java @@ -0,0 +1,21 @@ +import org.jetbrains.annotations.Nullable; + +class C { + private int[] list; + + private int find(int id) { + Integer n = newMethod(id); + if (n != null) return n; + throw new RuntimeException(); + } + + @Nullable + private Integer newMethod(int id) { + for (int n : list) { + if (n == id) { + return n <= 0 ? 0 : n; + } + } + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints2.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints2.java new file mode 100644 index 000000000000..d291d24c451d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints2.java @@ -0,0 +1,10 @@ +class Test{ + public void foo() { + if (cond1){ + if (cond2) return; + } + else if (cond3){ + } + x(); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints2_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints2_after.java new file mode 100644 index 000000000000..196bcde15a8f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints2_after.java @@ -0,0 +1,15 @@ +class Test{ + public void foo() { + if (cond1){ + if (newMethod()) return; + } + else if (cond3){ + } + x(); + } + + private boolean newMethod() { + if (cond2) return true; + return false; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints3.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints3.java new file mode 100644 index 000000000000..acc314bad83f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints3.java @@ -0,0 +1,10 @@ +class Test{ + void foo() { + if (cond1){ + if (cond2) return; + x(); + } + else if (cond3){ + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints4.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints4.java new file mode 100644 index 000000000000..6c6c395cb81b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints4.java @@ -0,0 +1,12 @@ +class Test { + int method() { + try { + if(cond1) return 0; + else if(cond2) return 1; + System.out.println("Text"); + } finally { + doSomething(); + } + return 12; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints4Nullable.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints4Nullable.java new file mode 100644 index 000000000000..577dc8b66ae7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints4Nullable.java @@ -0,0 +1,12 @@ +class Test { + Integer method() { + try { + if(cond1) return 0; + else if(cond2) return null; + System.out.println("Text"); + } finally { + doSomething(); + } + return 12; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints4_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints4_after.java new file mode 100644 index 000000000000..6d81150b09c3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints4_after.java @@ -0,0 +1,21 @@ +import org.jetbrains.annotations.Nullable; + +class Test { + int method() { + Integer x = newMethod(); + if (x != null) return x; + return 12; + } + + @Nullable + private Integer newMethod() { + try { + if(cond1) return 0; + else if(cond2) return 1; + System.out.println("Text"); + } finally { + doSomething(); + } + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints5.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints5.java new file mode 100644 index 000000000000..954782bed34f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints5.java @@ -0,0 +1,12 @@ +class Test { + int method() { + try { + if(cond1) return 0; + else if(cond2) return 1; + return 27; + } finally { + doSomething(); + } + return 12; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints5_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints5_after.java new file mode 100644 index 000000000000..217c29dd44c4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints5_after.java @@ -0,0 +1,16 @@ +class Test { + int method() { + return newMethod(); + return 12; + } + + private int newMethod() { + try { + if(cond1) return 0; + else if(cond2) return 1; + return 27; + } finally { + doSomething(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints6.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints6.java new file mode 100644 index 000000000000..b0887cb7c497 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints6.java @@ -0,0 +1,10 @@ +// multiple output values: one for modelling control flow + output value +class K { + int f(Object o) { + if (o == null) return 0; + o = new Object(); + Object oo = o; + + return 1; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints7.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints7.java new file mode 100644 index 000000000000..c4a897510faf --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints7.java @@ -0,0 +1,27 @@ +class Foo { + public Object createBean(Object parent) { + try { + if (parent != null) { + try { + } + catch (Exception e) { + return null; + } + } + + + Object tag = null; + + tag = foo(tag); + } + catch (Exception e) { + throw new RuntimeException(e); + } + + return null; + } + + private Object foo(final Object tag) { + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints8.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints8.java new file mode 100644 index 000000000000..cdee0bf663db --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints8.java @@ -0,0 +1,10 @@ +class C { + public Object m() { + for (Object o : new ArrayList()) { + if (o != null) { + return o; + } + } + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints8_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints8_after.java new file mode 100644 index 000000000000..07fd497cbfbc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints8_after.java @@ -0,0 +1,19 @@ +import org.jetbrains.annotations.Nullable; + +class C { + public Object m() { + Object o = newMethod(); + if (o != null) return o; + return null; + } + + @Nullable + private Object newMethod() { + for (Object o : new ArrayList()) { + if (o != null) { + return o; + } + } + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints9.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints9.java new file mode 100644 index 000000000000..e4558a44fb1f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints9.java @@ -0,0 +1,25 @@ +class Result { + private String _message; + + public Result(String _message) { + this._message = _message; + } +} + +class Main { + public static Result doIt(String name) { + Result result; + + if (name == null) { + result = new Result("Name is null"); + return result; + } + if (name.length() == 0) { + result = new Result("Name is empty"); + return result; + } + + result = new Result("Name is " + name); + return result; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints9_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints9_after.java new file mode 100644 index 000000000000..a1d04f76241b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPoints9_after.java @@ -0,0 +1,35 @@ +import org.jetbrains.annotations.Nullable; + +class Result { + private String _message; + + public Result(String _message) { + this._message = _message; + } +} + +class Main { + public static Result doIt(String name) { + Result result; + + Result result1 = newMethod(name); + if (result1 != null) return result1; + + result = new Result("Name is " + name); + return result; + } + + @Nullable + private static Result newMethod(String name) { + Result result; + if (name == null) { + result = new Result("Name is null"); + return result; + } + if (name.length() == 0) { + result = new Result("Name is empty"); + return result; + } + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExitPointsInsideLoop.java b/java/java-tests/testData/refactoring/extractMethodNew/ExitPointsInsideLoop.java new file mode 100644 index 000000000000..938c66db8140 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExitPointsInsideLoop.java @@ -0,0 +1,9 @@ +class s { + void f(boolean b) { + for (;;) { + if (b) { + break; + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Expression.java b/java/java-tests/testData/refactoring/extractMethodNew/Expression.java new file mode 100644 index 000000000000..452a7b9c8519 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Expression.java @@ -0,0 +1,35 @@ +public class AnnotationArgConverter { + public GrAnnotationMemberValue convert(PsiAnnotationMemberValue value) { + final StringBuilder buffer = new StringBuilder(); + + buffer.append("@A("); + + value.accept(new JavaElementVisitor() { + @Override + public void visitExpression(PsiExpression expression) { + buffer.append(expression.getText()); + } + + @Override + public void visitNewExpression(PsiNewExpression expression) { + PsiArrayInitializerExpression arrayInitializer = expression.getArrayInitializer(); + if (arrayInitializer == null) { + super.visitNewExpression(expression); + } + else { + buffer.append(")"); + } + } + + }); + + buffer.append(")"); + + try { + return GroovyPsiElementFactory.getInstance(value.getProject()).createAnnotationFromText(buffer.toString()); + } + catch (IncorrectOperationException e) { + return null; + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExpressionDuplicates.java b/java/java-tests/testData/refactoring/extractMethodNew/ExpressionDuplicates.java new file mode 100644 index 000000000000..fe163dc3cc6c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExpressionDuplicates.java @@ -0,0 +1,10 @@ +import java.util.*; + +class C { + { + Object[] o = null; + List l = new ArrayList(Arrays.asList(o)); + + List l1 = new ArrayList(Arrays.asList(new Object[0])); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExpressionDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExpressionDuplicates_after.java new file mode 100644 index 000000000000..83aa1d0b7f68 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExpressionDuplicates_after.java @@ -0,0 +1,17 @@ +import org.jetbrains.annotations.NotNull; + +import java.util.*; + +class C { + { + Object[] o = null; + List l = newMethod(o); + + List l1 = newMethod(new Object[0]); + } + + @NotNull + private ArrayList newMethod(Object[] o) { + return new ArrayList(Arrays.asList(o)); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Expression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/Expression_after.java new file mode 100644 index 000000000000..03f14023885c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Expression_after.java @@ -0,0 +1,39 @@ +public class AnnotationArgConverter { + public GrAnnotationMemberValue convert(PsiAnnotationMemberValue value) { + final StringBuilder buffer = new StringBuilder(); + + buffer.append("@A("); + + newMethod(value, buffer); + + buffer.append(")"); + + try { + return GroovyPsiElementFactory.getInstance(value.getProject()).createAnnotationFromText(buffer.toString()); + } + catch (IncorrectOperationException e) { + return null; + } + } + + private void newMethod(PsiAnnotationMemberValue value, final StringBuilder buffer) { + value.accept(new JavaElementVisitor() { + @Override + public void visitExpression(PsiExpression expression) { + buffer.append(expression.getText()); + } + + @Override + public void visitNewExpression(PsiNewExpression expression) { + PsiArrayInitializerExpression arrayInitializer = expression.getArrayInitializer(); + if (arrayInitializer == null) { + super.visitNewExpression(expression); + } + else { + buffer.append(")"); + } + } + + }); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpression.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpression.java new file mode 100644 index 000000000000..03b33f061927 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpression.java @@ -0,0 +1,6 @@ +class Foo { + void foo() { + int x = 0; + int y = x = 1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpressionFromStatement.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpressionFromStatement.java new file mode 100644 index 000000000000..2a7bc85b23fa --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpressionFromStatement.java @@ -0,0 +1,7 @@ + +class Foo { + void foo() { + int x = 0; + x = 1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpressionFromStatement_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpressionFromStatement_after.java new file mode 100644 index 000000000000..d19a09975128 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpressionFromStatement_after.java @@ -0,0 +1,12 @@ + +class Foo { + void foo() { + int x = 0; + newMethod(); + } + + private void newMethod() { + int x; + x = 1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpression_after.java new file mode 100644 index 000000000000..468caa9d1eb6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractAssignmentExpression_after.java @@ -0,0 +1,11 @@ +class Foo { + void foo() { + int x = 0; + int y = x = newMethod(); + } + + private int newMethod() { + int x; + return x = 1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareDoWhileBody.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareDoWhileBody.java new file mode 100644 index 000000000000..cc769416e611 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareDoWhileBody.java @@ -0,0 +1,14 @@ +class DoIfWhile { + String foo(int a, boolean b) { + int x = 0; + do /*comment*/ if (b) { + String s = bar(x); + if (s != null) return s; + } + while (++x < a); + + return null; + } + + String bar(int x) { return "";} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareDoWhileBody_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareDoWhileBody_after.java new file mode 100644 index 000000000000..272af52483b6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareDoWhileBody_after.java @@ -0,0 +1,26 @@ +import org.jetbrains.annotations.Nullable; + +class DoIfWhile { + String foo(int a, boolean b) { + int x = 0; + do { + String s = newMethod(b, x); + if (s != null) return s; + } + while (++x < a); + + return null; + } + + @Nullable + private String newMethod(boolean b, int x) { + /*comment*/ + if (b) { + String s = bar(x); + if (s != null) return s; + } + return null; + } + + String bar(int x) { return "";} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareElseBranch.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareElseBranch.java new file mode 100644 index 000000000000..203ba38d7b44 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareElseBranch.java @@ -0,0 +1,14 @@ +class ElseIf { + String foo(boolean a, boolean b) { + if (a) { + + } else if (b) { + String s = bar(); + if (s != null) return s; + } + + return null; + } + + String bar() { return "";} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareElseBranch_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareElseBranch_after.java new file mode 100644 index 000000000000..fc80f4f367b6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareElseBranch_after.java @@ -0,0 +1,25 @@ +import org.jetbrains.annotations.Nullable; + +class ElseIf { + String foo(boolean a, boolean b) { + if (a) { + + } else { + String s = newMethod(b); + if (s != null) return s; + } + + return null; + } + + @Nullable + private String newMethod(boolean b) { + if (b) { + String s = bar(); + if (s != null) return s; + } + return null; + } + + String bar() { return "";} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareForBody.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareForBody.java new file mode 100644 index 000000000000..585dfddef1a8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareForBody.java @@ -0,0 +1,12 @@ +class ForIf { + String foo(int[] a, boolean b) { + for (int x : a) if (b) { + String s = bar(x); + if (s != null) return s; + } + + return null; + } + + String bar(int x) { return "";} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareForBody_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareForBody_after.java new file mode 100644 index 000000000000..8f2c98e49f0f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareForBody_after.java @@ -0,0 +1,23 @@ +import org.jetbrains.annotations.Nullable; + +class ForIf { + String foo(int[] a, boolean b) { + for (int x : a) { + String s = newMethod(b, x); + if (s != null) return s; + } + + return null; + } + + @Nullable + private String newMethod(boolean b, int x) { + if (b) { + String s = bar(x); + if (s != null) return s; + } + return null; + } + + String bar(int x) { return "";} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareThenBranch.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareThenBranch.java new file mode 100644 index 000000000000..2730e96498dc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareThenBranch.java @@ -0,0 +1,12 @@ +class ElseIf { + String foo(boolean a, boolean b) { + if (a) if (b) { + String s = bar(); + if (s != null) return s; + } + + return null; + } + + String bar() { return "";} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareThenBranch_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareThenBranch_after.java new file mode 100644 index 000000000000..7fc6b4ff6bd7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBareThenBranch_after.java @@ -0,0 +1,23 @@ +import org.jetbrains.annotations.Nullable; + +class ElseIf { + String foo(boolean a, boolean b) { + if (a) { + String s = newMethod(b); + if (s != null) return s; + } + + return null; + } + + @Nullable + private String newMethod(boolean b) { + if (b) { + String s = bar(); + if (s != null) return s; + } + return null; + } + + String bar() { return "";} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedDoWhileBody.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedDoWhileBody.java new file mode 100644 index 000000000000..3f43bf8f1dba --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedDoWhileBody.java @@ -0,0 +1,16 @@ +class DoIfWhile { + String foo(int a, boolean b) { + int x = 0; + do { + /*comment*/ if (b) { + String s = bar(x); + if (s != null) return s; + } + } + while (++x < a); + + return null; + } + + String bar(int x) { return "";} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedDoWhileBody_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedDoWhileBody_after.java new file mode 100644 index 000000000000..272af52483b6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedDoWhileBody_after.java @@ -0,0 +1,26 @@ +import org.jetbrains.annotations.Nullable; + +class DoIfWhile { + String foo(int a, boolean b) { + int x = 0; + do { + String s = newMethod(b, x); + if (s != null) return s; + } + while (++x < a); + + return null; + } + + @Nullable + private String newMethod(boolean b, int x) { + /*comment*/ + if (b) { + String s = bar(x); + if (s != null) return s; + } + return null; + } + + String bar(int x) { return "";} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedElseBranch.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedElseBranch.java new file mode 100644 index 000000000000..0ed9ceb96b3b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedElseBranch.java @@ -0,0 +1,16 @@ +class ElseIf { + String foo(boolean a, boolean b) { + if (a) { + + } else { + if (b) { + String s = bar(); + if (s != null) return s; + } + } + + return null; + } + + String bar() { return "";} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedElseBranch_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedElseBranch_after.java new file mode 100644 index 000000000000..fc80f4f367b6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractBracedElseBranch_after.java @@ -0,0 +1,25 @@ +import org.jetbrains.annotations.Nullable; + +class ElseIf { + String foo(boolean a, boolean b) { + if (a) { + + } else { + String s = newMethod(b); + if (s != null) return s; + } + + return null; + } + + @Nullable + private String newMethod(boolean b) { + if (b) { + String s = bar(); + if (s != null) return s; + } + return null; + } + + String bar() { return "";} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnnotation.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnnotation.java new file mode 100644 index 000000000000..a5f8f92ecc35 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnnotation.java @@ -0,0 +1,3 @@ +@SuppressWarnings("bar") +class Foo { +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnnotation1.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnnotation1.java new file mode 100644 index 000000000000..5403957de47e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnnotation1.java @@ -0,0 +1 @@ +@SuppressWarnings("bar") \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnonymous.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnonymous.java new file mode 100644 index 000000000000..fff145495819 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnonymous.java @@ -0,0 +1,9 @@ +class Test { + public static void main() { + new Runnable() { + public void run() { + System.out.println("Text"); + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnonymous_after.java new file mode 100644 index 000000000000..e4ccd5ab4ba7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromAnonymous_after.java @@ -0,0 +1,15 @@ +import java.io.PrintStream; + +class Test { + public static void main() { + new Runnable() { + public void run() { + newMethod().println("Text"); + } + } + } + + private static PrintStream newMethod() { + return System.out; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromCodeBlock.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromCodeBlock.java new file mode 100644 index 000000000000..60d31d8650e7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromCodeBlock.java @@ -0,0 +1,10 @@ +class Test { + void method() { + System.out.println("1"); + { + System.out.println("2"); + System.out.println("3"); + } + System.out.println("4"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromCodeBlock_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromCodeBlock_after.java new file mode 100644 index 000000000000..505534408b40 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromCodeBlock_after.java @@ -0,0 +1,12 @@ +class Test { + void method() { + System.out.println("1"); + newMethod(); + System.out.println("4"); + } + + private void newMethod() { + System.out.println("2"); + System.out.println("3"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromFinally.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromFinally.java new file mode 100644 index 000000000000..f398c31b5af5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromFinally.java @@ -0,0 +1,11 @@ +public class Test { + int method() { + try { + System.out.println("Text"); + return 0; + } finally { + System.out.println("!!!"); + return 1; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromFinally_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromFinally_after.java new file mode 100644 index 000000000000..561cc007c248 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromFinally_after.java @@ -0,0 +1,15 @@ +public class Test { + int method() { + try { + System.out.println("Text"); + return 0; + } finally { + return newMethod(); + } + } + + private int newMethod() { + System.out.println("!!!"); + return 1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally.java new file mode 100644 index 000000000000..ca866c1671e7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally.java @@ -0,0 +1,10 @@ +public class S { + { + String s; + try { + s = ""; + } finally { + } + System.out.print(s); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally2.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally2.java new file mode 100644 index 000000000000..15bf8c64515a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally2.java @@ -0,0 +1,12 @@ +class Tester { + String x() { + String o = ""; + String s; + try { + s = o; + } + finally { + } + return s; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally2_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally2_after.java new file mode 100644 index 000000000000..54274f1f15f4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally2_after.java @@ -0,0 +1,16 @@ +class Tester { + String x() { + String o = ""; + return newMethod(o); + } + + private String newMethod(String o) { + String s; + try { + s = o; + } + finally { + } + return s; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally_after.java new file mode 100644 index 000000000000..fae271959f7d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractFromTryFinally_after.java @@ -0,0 +1,19 @@ +import org.jetbrains.annotations.NotNull; + +public class S { + { + String s; + try { + s = newMethod(); + } finally { + } + System.out.print(s); + } + + @NotNull + private String newMethod() { + String s; + s = ""; + return s; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaExpression.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaExpression.java new file mode 100644 index 000000000000..016c43a73e8c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaExpression.java @@ -0,0 +1,12 @@ +import java.util.function.Supplier; +class Test { + + private void a() + { + b((s) -> { + System.out.println(s); + }); + } + + void b(Supplier s) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaExpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaExpression_after.java new file mode 100644 index 000000000000..4e179290fe53 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaExpression_after.java @@ -0,0 +1,19 @@ +import org.jetbrains.annotations.NotNull; + +import java.util.function.Supplier; +class Test { + + private void a() + { + b(newMethod()); + } + + @NotNull + private Supplier newMethod() { + return (s) -> { + System.out.println(s); + }; + } + + void b(Supplier s) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaParameter.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaParameter.java new file mode 100644 index 000000000000..b273927c2d1d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaParameter.java @@ -0,0 +1,12 @@ +import java.util.function.Supplier; +class Test { + + private void a() + { + b((s) -> { + System.out.println(s); + }); + } + + void b(Supplier s) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaParameter_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaParameter_after.java new file mode 100644 index 000000000000..668b9ede9be4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractUnresolvedLambdaParameter_after.java @@ -0,0 +1,16 @@ +import java.util.function.Supplier; +class Test { + + private void a() + { + b((s) -> { + System.out.println(newMethod((Object) s)); + }); + } + + private boolean newMethod(Object s) { + return s; + } + + void b(Supplier s) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractWithLeadingComment.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractWithLeadingComment.java new file mode 100644 index 000000000000..a2519de1d143 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractWithLeadingComment.java @@ -0,0 +1,12 @@ +class Test { + public void method2() { + if (true) { + + // add to list2 + list2.add(true); + + } else { + + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractWithLeadingComment_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractWithLeadingComment_after.java new file mode 100644 index 000000000000..2059bcb249a6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractWithLeadingComment_after.java @@ -0,0 +1,15 @@ +class Test { + public void method2() { + if (true) { + newMethod(); + + } else { + + } + } + + private void newMethod() { + // add to list2 + list2.add(true); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractedVariableReused.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractedVariableReused.java new file mode 100644 index 000000000000..072d871605e3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractedVariableReused.java @@ -0,0 +1,22 @@ +public class OutputVariableReused { + + static class X { + X(String s) {} + } + + String convert(String s, String s1, String s2) { + return s + s1 + s2; + } + + public X test(String s, String left, String right) { + String res = convert(s, left, right); + if (res != null) { + return new X(res); + } + res = convert(s, right, left); + if (res != null) { + return new X(res); + } + return null; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ExtractedVariableReused_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ExtractedVariableReused_after.java new file mode 100644 index 000000000000..c7a858b4de46 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ExtractedVariableReused_after.java @@ -0,0 +1,32 @@ +import org.jetbrains.annotations.Nullable; + +public class OutputVariableReused { + + static class X { + X(String s) {} + } + + String convert(String s, String s1, String s2) { + return s + s1 + s2; + } + + public X test(String s, String left, String right) { + X res1 = newMethod(s, left, right); + if (res1 != null) return res1; + String res; + res = convert(s, right, left); + if (res != null) { + return new X(res); + } + return null; + } + + @Nullable + private X newMethod(String s, String left, String right) { + String res = convert(s, left, right); + if (res != null) { + return new X(res); + } + return null; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FinalOutputVar.java b/java/java-tests/testData/refactoring/extractMethodNew/FinalOutputVar.java new file mode 100644 index 000000000000..61758edefc58 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FinalOutputVar.java @@ -0,0 +1,8 @@ +class C { + { + final int i = 128; + System.out.println("i = " + i); + + final int j = 128; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FinalOutputVar_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FinalOutputVar_after.java new file mode 100644 index 000000000000..b1ab68d09414 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FinalOutputVar_after.java @@ -0,0 +1,12 @@ +class C { + { + final int i = newMethod(); + System.out.println("i = " + i); + + final int j = newMethod(); + } + + private int newMethod() { + return 128; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FinalParamUsedInsideAnon.java b/java/java-tests/testData/refactoring/extractMethodNew/FinalParamUsedInsideAnon.java new file mode 100644 index 000000000000..a89876427ff5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FinalParamUsedInsideAnon.java @@ -0,0 +1,11 @@ +public class Test { + public static void main(String[] args) { + final String s = "dude"; + Runnable runnable = new Runnable() { + public void run() { + System.out.println(s); + } + }; + new Thread(runnable).start(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FinalParamUsedInsideAnon_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FinalParamUsedInsideAnon_after.java new file mode 100644 index 000000000000..283161aabd33 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FinalParamUsedInsideAnon_after.java @@ -0,0 +1,15 @@ +public class Test { + public static void main(String[] args) { + final String s = "dude"; + newMethod(s); + } + + private static void newMethod(final String s) { + Runnable runnable = new Runnable() { + public void run() { + System.out.println(s); + } + }; + new Thread(runnable).start(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FinalParams4LocalClasses.java b/java/java-tests/testData/refactoring/extractMethodNew/FinalParams4LocalClasses.java new file mode 100644 index 000000000000..8f1cbe4e99b1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FinalParams4LocalClasses.java @@ -0,0 +1,11 @@ +class Test { + + public static void main(String[] args) { + final String s = "text"; + class A { + { + System.out.println(s); + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FinalParams4LocalClasses_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FinalParams4LocalClasses_after.java new file mode 100644 index 000000000000..e887d2ec5bbe --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FinalParams4LocalClasses_after.java @@ -0,0 +1,15 @@ +class Test { + + public static void main(String[] args) { + final String s = "text"; + newMethod(s); + } + + private static void newMethod(final String s) { + class A { + { + System.out.println(s); + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Finally.java b/java/java-tests/testData/refactoring/extractMethodNew/Finally.java new file mode 100644 index 000000000000..1b2b12d68851 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Finally.java @@ -0,0 +1,22 @@ +class Test { + void method(){ + try { + process.waitFor(); + } + catch(InterruptedException e) { + process.destroy(); + } + finally { + try { + myParsingThread.join(); + } + catch(InterruptedException e) { + } + compilerHandler.processTerminated(); + } + synchronized (this) { + myParsingThread = null; + } + someOtherCode(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Finally_after.java b/java/java-tests/testData/refactoring/extractMethodNew/Finally_after.java new file mode 100644 index 000000000000..73485d3a386b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Finally_after.java @@ -0,0 +1,26 @@ +class Test { + void method(){ + newMethod(); + someOtherCode(); + } + + private void newMethod() { + try { + process.waitFor(); + } + catch(InterruptedException e) { + process.destroy(); + } + finally { + try { + myParsingThread.join(); + } + catch(InterruptedException e) { + } + compilerHandler.processTerminated(); + } + synchronized (this) { + myParsingThread = null; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldInWhile.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldInWhile.java new file mode 100644 index 000000000000..a19b9d99bdd4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldInWhile.java @@ -0,0 +1,17 @@ +class Test { + String[] foo() { + return null; + } + + boolean bar(String s) { + return false; + } + + void foooooo() { + String[] modules = foo(); + int i = 0; + while (i < modules.length && !bar(modules[i])) { + i++; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldInWhile_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldInWhile_after.java new file mode 100644 index 000000000000..40434f681442 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldInWhile_after.java @@ -0,0 +1,21 @@ +class Test { + String[] foo() { + return null; + } + + boolean bar(String s) { + return false; + } + + void foooooo() { + String[] modules = foo(); + int i = 0; + while (i < modules.length && newMethod(modules[i])) { + i++; + } + } + + private boolean newMethod(String module) { + return !bar(module); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldedParamNameSuggestion.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldedParamNameSuggestion.java new file mode 100644 index 000000000000..ac556b896a0e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldedParamNameSuggestion.java @@ -0,0 +1,6 @@ +class Test { + String get(String[] args) { + String arg = args[0]; + return arg; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldedParamNameSuggestion_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldedParamNameSuggestion_after.java new file mode 100644 index 000000000000..86bb448af472 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldedParamNameSuggestion_after.java @@ -0,0 +1,10 @@ +class Test { + String get(String[] args) { + return newMethod(args[0]); + } + + private String newMethod(String arg1) { + String arg = arg1; + return arg; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithConflictedNames.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithConflictedNames.java new file mode 100644 index 000000000000..3cc92a3f0436 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithConflictedNames.java @@ -0,0 +1,12 @@ +class Test { + void bar() { + int size = 10; + int array[] = new int[size]; + int array2[] = new int[size]; + + int i = 0; + + int sum = array[i]; + sum += array2[i]; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithConflictedNames_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithConflictedNames_after.java new file mode 100644 index 000000000000..c40e376fa754 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithConflictedNames_after.java @@ -0,0 +1,16 @@ +class Test { + void bar() { + int size = 10; + int array[] = new int[size]; + int array2[] = new int[size]; + + int i = 0; + + newMethod(array[i], array2, i); + } + + private void newMethod(int sum1, int[] array2, int i) { + int sum = sum1; + sum += array2[i]; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithNestedExpressions.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithNestedExpressions.java new file mode 100644 index 000000000000..f4e3b563c155 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithNestedExpressions.java @@ -0,0 +1,7 @@ +class Test { + void h(int i, String[] s, String[] t) { + System.out.println(t[i]); + final String s1 = s[t[i].length()]; + System.out.println(s1); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithNestedExpressions_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithNestedExpressions_after.java new file mode 100644 index 000000000000..9eb8ccd66250 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldedWithNestedExpressions_after.java @@ -0,0 +1,11 @@ +class Test { + void h(int i, String[] s, String[] t) { + final String s1 = newMethod(t[i], s[t[i].length()]); + System.out.println(s1); + } + + private String newMethod(String s2, String s11) { + System.out.println(s2); + return s11; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFieldInvolved.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFieldInvolved.java new file mode 100644 index 000000000000..afc0fbae65fa --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFieldInvolved.java @@ -0,0 +1,10 @@ +class Main { + private String [] args; + + void foo(Main m, int i) { + if (m.args[i] != null) { + System.out.println(m.args[i]); + } + + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFieldInvolved_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFieldInvolved_after.java new file mode 100644 index 000000000000..25a204b87b8d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFieldInvolved_after.java @@ -0,0 +1,14 @@ +class Main { + private String [] args; + + void foo(Main m, int i) { + newMethod(m, i); + + } + + private void newMethod(Main m, int i) { + if (m.args[i] != null) { + System.out.println(m.args[i]); + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFunctionCall.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFunctionCall.java new file mode 100644 index 000000000000..e9ddaf23e8d6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFunctionCall.java @@ -0,0 +1,12 @@ +import java.util.List; +class C { + void foo(int[] a, List b) { + int i = 1; + int n = bar(a[i], b.get(i)); + System.out.println(n); + } + + int bar(int a, int b) { + return a + b; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFunctionCall_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFunctionCall_after.java new file mode 100644 index 000000000000..a2cd90389ab9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FoldingWithFunctionCall_after.java @@ -0,0 +1,16 @@ +import java.util.List; +class C { + void foo(int[] a, List b) { + int i = 1; + int n = newMethod(a[i], b.get(i)); + System.out.println(n); + } + + private int newMethod(int a, Integer b) { + return bar(a, b); + } + + int bar(int a, int b) { + return a + b; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ForEach.java b/java/java-tests/testData/refactoring/extractMethodNew/ForEach.java new file mode 100644 index 000000000000..38a27a6bcbc1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ForEach.java @@ -0,0 +1,9 @@ +class Foo { + { + String[] args = getArgs(); + + for(String arg : args) { + System.out.println("arg = " + arg); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ForEach_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ForEach_after.java new file mode 100644 index 000000000000..27a92aeba2d3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ForEach_after.java @@ -0,0 +1,13 @@ +class Foo { + { + String[] args = getArgs(); + + for(String arg : args) { + newMethod(arg); + } + } + + private void newMethod(String arg) { + System.out.println("arg = " + arg); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ForceBraces.java b/java/java-tests/testData/refactoring/extractMethodNew/ForceBraces.java new file mode 100644 index 000000000000..eb66fa5edfda --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ForceBraces.java @@ -0,0 +1,9 @@ +class Xtract { + void me(int i) { + if (i ==10) { + return; + } + + System.out.println("i: " + i); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ForceBraces_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ForceBraces_after.java new file mode 100644 index 000000000000..31c104410c1d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ForceBraces_after.java @@ -0,0 +1,16 @@ +class Xtract { + void me(int i) { + if (newMethod(i)) { + return; + } + + System.out.println("i: " + i); + } + + private boolean newMethod(int i) { + if (i ==10) { + return true; + } + return false; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromDefaultMethodInInterface.java b/java/java-tests/testData/refactoring/extractMethodNew/FromDefaultMethodInInterface.java new file mode 100644 index 000000000000..cfac0579dd3d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromDefaultMethodInInterface.java @@ -0,0 +1,8 @@ +public interface FromDefaultMethodInInterface { + default void test(String a, String b) { + + String c = a + b; + System.out.println(c); + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromDefaultMethodInInterface_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FromDefaultMethodInInterface_after.java new file mode 100644 index 000000000000..827ad105da14 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromDefaultMethodInInterface_after.java @@ -0,0 +1,12 @@ +public interface FromDefaultMethodInInterface { + default void test(String a, String b) { + + newMethod(a, b); + + } + + private void newMethod(String a, String b) { + String c = a + b; + System.out.println(c); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody.java new file mode 100644 index 000000000000..eba4ec178fd7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody.java @@ -0,0 +1,23 @@ +/* + * Copyright 2000-2012 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. + */ +class Test { + public void foo() { + Runnable r = () -> { + String hello = "hello"; + System.out.println(hello); + }; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody1.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody1.java new file mode 100644 index 000000000000..fcb14a849657 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody1.java @@ -0,0 +1,22 @@ +/* + * Copyright 2000-2012 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. + */ +class Test { + public void foo(int ii) { + Runnable r = () -> { + System.out.println(ii); + }; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody1_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody1_after.java new file mode 100644 index 000000000000..6debfdee24db --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody1_after.java @@ -0,0 +1,26 @@ +/* + * Copyright 2000-2012 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. + */ +class Test { + public void foo(int ii) { + Runnable r = () -> { + newMethod(ii); + }; + } + + private void newMethod(int ii) { + System.out.println(ii); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyCapturedWildcardParams.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyCapturedWildcardParams.java new file mode 100644 index 000000000000..c1727073c4af --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyCapturedWildcardParams.java @@ -0,0 +1,8 @@ +import java.util.stream.Stream; + +class Foo { + public static void main(Stream s) { + s.filter(ss -> ss.startsWith("")); + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyCapturedWildcardParams_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyCapturedWildcardParams_after.java new file mode 100644 index 000000000000..d82d904e84fd --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyCapturedWildcardParams_after.java @@ -0,0 +1,12 @@ +import java.util.stream.Stream; + +class Foo { + public static void main(Stream s) { + s.filter(ss -> newMethod(ss)); + } + + private static boolean newMethod(String ss) { + return ss.startsWith(""); + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToAnonymous.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToAnonymous.java new file mode 100644 index 000000000000..a8456bdf56ec --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToAnonymous.java @@ -0,0 +1,31 @@ +/* + * Copyright 2000-2012 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. + */ + +public class Foo { + public void update(int i) {} +} + +class FooBar { + void foo(int value){ + Foo tm = new Foo() { + { + Runnable r = () -> { + update(value); + }; + } + }; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToAnonymous_after.java new file mode 100644 index 000000000000..03ac902fe43c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToAnonymous_after.java @@ -0,0 +1,35 @@ +/* + * Copyright 2000-2012 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. + */ + +public class Foo { + public void update(int i) {} +} + +class FooBar { + void foo(int value){ + Foo tm = new Foo() { + { + Runnable r = () -> { + newMethod(); + }; + } + + private void newMethod() { + update(value); + } + }; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToToplevelInsideCodeBlock.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToToplevelInsideCodeBlock.java new file mode 100644 index 000000000000..8fd33244505f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToToplevelInsideCodeBlock.java @@ -0,0 +1,9 @@ +class Test { + void foo(Object o) { + try { + Runnable r = () -> { + System.out.println(o); + }; + } catch (Throwable e) {} + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToToplevelInsideCodeBlock_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToToplevelInsideCodeBlock_after.java new file mode 100644 index 000000000000..bd272305fece --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyToToplevelInsideCodeBlock_after.java @@ -0,0 +1,13 @@ +class Test { + void foo(Object o) { + try { + Runnable r = () -> { + newMethod(o); + }; + } catch (Throwable e) {} + } + + private void newMethod(Object o) { + System.out.println(o); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyWithReturn.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyWithReturn.java new file mode 100644 index 000000000000..c3ba26d9f751 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyWithReturn.java @@ -0,0 +1,10 @@ +class Test { + interface I { + String foo(); + } + public void foo(int ii) { + I r = () -> { + return "42"; + }; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyWithReturn_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyWithReturn_after.java new file mode 100644 index 000000000000..f3441791c8bd --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBodyWithReturn_after.java @@ -0,0 +1,17 @@ +import org.jetbrains.annotations.NotNull; + +class Test { + interface I { + String foo(); + } + public void foo(int ii) { + I r = () -> { + return newMethod(); + }; + } + + @NotNull + private String newMethod() { + return "42"; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody_after.java new file mode 100644 index 000000000000..b8f419191a62 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromLambdaBody_after.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2012 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. + */ +class Test { + public void foo() { + Runnable r = () -> { + String hello = "hello"; + newMethod(hello); + }; + } + + private void newMethod(String hello) { + System.out.println(hello); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromPrivateMethodInInterface.java b/java/java-tests/testData/refactoring/extractMethodNew/FromPrivateMethodInInterface.java new file mode 100644 index 000000000000..5eaceab59e6b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromPrivateMethodInInterface.java @@ -0,0 +1,8 @@ +public interface FromPrivateMethodInInterface { + private void test(String a, String b) { + + String c = a + b; + System.out.println(c); + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromPrivateMethodInInterface_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FromPrivateMethodInInterface_after.java new file mode 100644 index 000000000000..2b0e5697dbe0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromPrivateMethodInInterface_after.java @@ -0,0 +1,12 @@ +public interface FromPrivateMethodInInterface { + private void test(String a, String b) { + + newMethod(a, b); + + } + + private void newMethod(String a, String b) { + String c = a + b; + System.out.println(c); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromStaticMethodInInterface.java b/java/java-tests/testData/refactoring/extractMethodNew/FromStaticMethodInInterface.java new file mode 100644 index 000000000000..7cdcfa5e967f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromStaticMethodInInterface.java @@ -0,0 +1,8 @@ +public interface FromStaticMethodInInterface { + static void test(String a, String b) { + + String c = a + b; + System.out.println(c); + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FromStaticMethodInInterface_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FromStaticMethodInInterface_after.java new file mode 100644 index 000000000000..da109de13892 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/FromStaticMethodInInterface_after.java @@ -0,0 +1,12 @@ +public interface FromStaticMethodInInterface { + static void test(String a, String b) { + + newMethod(a, b); + + } + + static void newMethod(String a, String b) { + String c = a + b; + System.out.println(c); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/GenericsParameters.java b/java/java-tests/testData/refactoring/extractMethodNew/GenericsParameters.java new file mode 100644 index 000000000000..35ffd9d3558a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/GenericsParameters.java @@ -0,0 +1,5 @@ +class Test { + public final Class findClass(final String className) throws ClassNotFoundException { + return (Class)Class.forName(className, true, getClass().getClassLoader()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/GenericsParameters_after.java b/java/java-tests/testData/refactoring/extractMethodNew/GenericsParameters_after.java new file mode 100644 index 000000000000..eab388c1ca47 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/GenericsParameters_after.java @@ -0,0 +1,9 @@ +class Test { + public final Class findClass(final String className) throws ClassNotFoundException { + return (Class)Class.forName(className, true, newMethod()); + } + + private ClassLoader newMethod() { + return getClass().getClassLoader(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates.java b/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates.java new file mode 100644 index 000000000000..4afdf00d13a6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates.java @@ -0,0 +1,18 @@ +class Test +{ + public Object foo() { + Object result = null; + if(test1()) return null; + if(test2()) return null; + return result; + } + public int foo1() { + int result = 1; + if(test1()) return 0; + if(test2()) return 0; + return result; + } + + private boolean test1() {return false;} + private boolean test2() {return false;} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates1.java b/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates1.java new file mode 100644 index 000000000000..07b7567de916 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates1.java @@ -0,0 +1,29 @@ +public class Test { + public Object foo() { + Object result = null; // line1 + if (test1()) return result; + if (test2()) return result; + if (test3()) return result; // line4 + return result; + } + + public int foo1() { + Object result = null; // line1 + if (test1()) return 1; // ssss + if (test2()) return 1; //eee + if (test3()) return 2; // line4 + return 3; + } + + private boolean test1() { + return false; + } + + private boolean test2() { + return false; + } + + private boolean test3() { + return false; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates1_after.java b/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates1_after.java new file mode 100644 index 000000000000..37d1a9bdcca9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates1_after.java @@ -0,0 +1,33 @@ +public class Test { + public Object foo() { + Object result = null; // line1 + if (newMethod()) return result; + if (test3()) return result; // line4 + return result; + } + + private boolean newMethod() { + if (test1()) return true; + if (test2()) return true; + return false; + } + + public int foo1() { + Object result = null; // line1 + if (newMethod()) return 1; + if (test3()) return 2; // line4 + return 3; + } + + private boolean test1() { + return false; + } + + private boolean test2() { + return false; + } + + private boolean test3() { + return false; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates_after.java b/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates_after.java new file mode 100644 index 000000000000..95308c9201a3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/GuardMethodDuplicates_after.java @@ -0,0 +1,23 @@ +class Test +{ + public Object foo() { + Object result = null; + if (newMethod()) return null; + return result; + } + + private boolean newMethod() { + if (test1()) return true; + if (test2()) return true; + return false; + } + + public int foo1() { + int result = 1; + if (newMethod()) return 0; + return result; + } + + private boolean test1() {return false;} + private boolean test2() {return false;} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11036.java b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11036.java new file mode 100644 index 000000000000..f1b43c031d65 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11036.java @@ -0,0 +1,9 @@ +class MyClass { + public void newMethod(long i) { + } + { + int i = 0; + System.out.println(i); + newMethod(14); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11036_after.java b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11036_after.java new file mode 100644 index 000000000000..66f19a384ae5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11036_after.java @@ -0,0 +1,13 @@ +class MyClass { + public void newMethod(long i) { + } + { + int i = 0; + newMethod(i); + newMethod((long) 14); + } + + private void newMethod(int i) { + System.out.println(i); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11748.java b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11748.java new file mode 100644 index 000000000000..0f2ab076a986 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11748.java @@ -0,0 +1,14 @@ +class Test { + public static String bar(int x , int y) { + while (true) { + if (x == y) { + continue; + } + System.out.println("HW"); + } + } + + private static int g() { + return 0; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11748_after.java b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11748_after.java new file mode 100644 index 000000000000..5a93390b2a0b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11748_after.java @@ -0,0 +1,18 @@ +class Test { + public static String bar(int x , int y) { + while (true) { + newMethod(x, y); + } + } + + private static void newMethod(int x, int y) { + if (x == y) { + return; + } + System.out.println("HW"); + } + + private static int g() { + return 0; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11848.java b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11848.java new file mode 100644 index 000000000000..bd9df7146bfb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11848.java @@ -0,0 +1,11 @@ +class Container { + static class X { + boolean x = false; + + void foo(String s, String t) { + x = true; + + x = true; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11848_after.java b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11848_after.java new file mode 100644 index 000000000000..d0c7e57c8d13 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV11848_after.java @@ -0,0 +1,15 @@ +class Container { + static class X { + boolean x = false; + + void foo(String s, String t) { + newMethod(); + + newMethod(); + } + + private void newMethod() { + x = true; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV33368.java b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV33368.java new file mode 100644 index 000000000000..bd8bfa8c5cbc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/IDEADEV33368.java @@ -0,0 +1,16 @@ +class Test { + void m(boolean b) { + int x = 42; + try { + + if(b) { + x = 23; + throw new Exception(); + } + + } catch(Exception e) { + System.out.println(x); + } + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/IdeaDev2291.java b/java/java-tests/testData/refactoring/extractMethodNew/IdeaDev2291.java new file mode 100644 index 000000000000..5b14d4535ce0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/IdeaDev2291.java @@ -0,0 +1,6 @@ +class Tester { + void method(Object... array) { + Object object = null; + array.equals(object); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/IdeaDev2291_after.java b/java/java-tests/testData/refactoring/extractMethodNew/IdeaDev2291_after.java new file mode 100644 index 000000000000..d9746602212e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/IdeaDev2291_after.java @@ -0,0 +1,10 @@ +class Tester { + void method(Object... array) { + Object object = null; + newMethod(object, array); + } + + private void newMethod(Object object, Object[] array) { + array.equals(object); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/IncompleteExpression.java b/java/java-tests/testData/refactoring/extractMethodNew/IncompleteExpression.java new file mode 100644 index 000000000000..dce6c4b7d49c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/IncompleteExpression.java @@ -0,0 +1,7 @@ +class Test { + + public static void main(String[] args) { + final Test s = new Test(); + System.out.println(s.callAbsentMethod().toString()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/IncompleteExpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/IncompleteExpression_after.java new file mode 100644 index 000000000000..a1a007ae7884 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/IncompleteExpression_after.java @@ -0,0 +1,11 @@ +class Test { + + public static void main(String[] args) { + final Test s = new Test(); + System.out.println(newMethod(s)); + } + + private static Object newMethod(Test s) { + return s.callAbsentMethod().toString(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNull.java b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNull.java new file mode 100644 index 000000000000..a3f4a7fea69d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNull.java @@ -0,0 +1,14 @@ +import org.jetbrains.annotations.NotNull; + +class X { + public static String main(String[] args) { + System.out.println(); + return f(); + + } + + @NotNull + String f() { + return ""; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatement.java b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatement.java new file mode 100644 index 000000000000..8fa043e81efb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatement.java @@ -0,0 +1,13 @@ +class X { + void foo(java.util.List l) { + for (Object o : l) { + if (o == null) continue; + Object x = bar(o); + System.out.println(x); + } + } + + private String bar(Object o) { + return ""; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatementDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatementDuplicate.java new file mode 100644 index 000000000000..70d85e71d26b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatementDuplicate.java @@ -0,0 +1,20 @@ +public class InferredNotNullInReturnStatementDuplicate { + void foo(java.util.List l) { + for (Object o : l) { + + if (o == null) continue; + Object x = bar(o); + System.out.println(x); + } + } + + void bar(java.util.List l) { + for (Object o : l) { + if (o == null) continue; + Object x = bar(o); + System.out.println(x); + } + } + + private String bar(Object o) {return "";} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatementDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatementDuplicate_after.java new file mode 100644 index 000000000000..af4ccf92aa4f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatementDuplicate_after.java @@ -0,0 +1,29 @@ +import org.jetbrains.annotations.Nullable; + +public class InferredNotNullInReturnStatementDuplicate { + void foo(java.util.List l) { + for (Object o : l) { + + Object x = newMethod(o); + if (x == null) continue; + System.out.println(x); + } + } + + @Nullable + private Object newMethod(Object o) { + if (o == null) return null; + Object x = bar(o); + return x; + } + + void bar(java.util.List l) { + for (Object o : l) { + Object x = newMethod(o); + if (x == null) continue; + System.out.println(x); + } + } + + private String bar(Object o) {return "";} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatement_after.java b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatement_after.java new file mode 100644 index 000000000000..49c74ca6d02f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNullInReturnStatement_after.java @@ -0,0 +1,22 @@ +import org.jetbrains.annotations.Nullable; + +class X { + void foo(java.util.List l) { + for (Object o : l) { + Object x = newMethod(o); + if (x == null) continue; + System.out.println(x); + } + } + + @Nullable + private Object newMethod(Object o) { + if (o == null) return null; + Object x = bar(o); + return x; + } + + private String bar(Object o) { + return ""; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNull_after.java b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNull_after.java new file mode 100644 index 000000000000..be3e8f54be9f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InferredNotNull_after.java @@ -0,0 +1,19 @@ +import org.jetbrains.annotations.NotNull; + +class X { + public static String main(String[] args) { + return newMethod(); + + } + + @NotNull + private static String newMethod() { + System.out.println(); + return f(); + } + + @NotNull + String f() { + return ""; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InlineCreated2ReturnLocalVariablesOnly.java b/java/java-tests/testData/refactoring/extractMethodNew/InlineCreated2ReturnLocalVariablesOnly.java new file mode 100644 index 000000000000..91101ceea604 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InlineCreated2ReturnLocalVariablesOnly.java @@ -0,0 +1,8 @@ +class Test { + void foo() { + int j = 0; + int i = 0; + j = 9; + System.out.println(i); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InlineCreated2ReturnLocalVariablesOnly_after.java b/java/java-tests/testData/refactoring/extractMethodNew/InlineCreated2ReturnLocalVariablesOnly_after.java new file mode 100644 index 000000000000..e1a3b82e724e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InlineCreated2ReturnLocalVariablesOnly_after.java @@ -0,0 +1,13 @@ +class Test { + void foo() { + int i = newMethod(); + System.out.println(i); + } + + private int newMethod() { + int j = 0; + int i = 0; + j = 9; + return i; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InsideCommentAfterSelectedFragment.java b/java/java-tests/testData/refactoring/extractMethodNew/InsideCommentAfterSelectedFragment.java new file mode 100644 index 000000000000..bc063b530557 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InsideCommentAfterSelectedFragment.java @@ -0,0 +1,10 @@ +class CommentAfterSelectedFragment { + foo(boolean debugMode) { + int i= 0; + + if (debugMode) { + i = 1; + } /* comment */ + System.out.println(i); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InsideCommentAfterSelectedFragment_after.java b/java/java-tests/testData/refactoring/extractMethodNew/InsideCommentAfterSelectedFragment_after.java new file mode 100644 index 000000000000..970f5f31f6f9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InsideCommentAfterSelectedFragment_after.java @@ -0,0 +1,15 @@ +class CommentAfterSelectedFragment { + foo(boolean debugMode) { + int i= 0; + + i = newMethod(debugMode, i); + System.out.println(i); + } + + private int newMethod(boolean debugMode, int i) { + if (debugMode) { + i = 1; + } /* comment */ + return i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InstanceMethodDuplicatesInStaticContext.java b/java/java-tests/testData/refactoring/extractMethodNew/InstanceMethodDuplicatesInStaticContext.java new file mode 100644 index 000000000000..145d22715436 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InstanceMethodDuplicatesInStaticContext.java @@ -0,0 +1,14 @@ +class Class1 { + public static int staticMethod() { + int a = 1; + int b = 2; + + int temp = a + b; + return temp * 2; + } + + public int foo(int a, int b) { + int temp = a + b; + return temp * 2; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InstanceMethodDuplicatesInStaticContext_after.java b/java/java-tests/testData/refactoring/extractMethodNew/InstanceMethodDuplicatesInStaticContext_after.java new file mode 100644 index 000000000000..4c639dd854a6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InstanceMethodDuplicatesInStaticContext_after.java @@ -0,0 +1,17 @@ +class Class1 { + public static int staticMethod() { + int a = 1; + int b = 2; + + return newMethod(a, b); + } + + public int foo(int a, int b) { + return newMethod(a, b); + } + + private static int newMethod(int a, int b) { + int temp = a + b; + return temp * 2; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InterfaceMethodVisibility.java b/java/java-tests/testData/refactoring/extractMethodNew/InterfaceMethodVisibility.java new file mode 100644 index 000000000000..a4d43011c84d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InterfaceMethodVisibility.java @@ -0,0 +1,15 @@ +interface TweetParser { + static String getTweetMessageFrom(String fullTweet) { + String fieldName = "\"text\":\""; + int indexOfField = fullTweet.indexOf(fieldName) + fieldName.length(); + int indexOfEndOfField = fullTweet.indexOf("\"", indexOfField); + return fullTweet.substring(indexOfField, indexOfEndOfField); + } + + static String getTwitterHandleFromTweet(String fullTweet) { + String twitterHandleFieldName = "\"screen_name\":\""; + int indexOfTwitterHandleField = fullTweet.indexOf(twitterHandleFieldName) + twitterHandleFieldName.length(); + int indexOfEndOfTwitterHandle = fullTweet.indexOf("\"", indexOfTwitterHandleField); + return fullTweet.substring(indexOfTwitterHandleField, indexOfEndOfTwitterHandle); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InterfaceMethodVisibility_after.java b/java/java-tests/testData/refactoring/extractMethodNew/InterfaceMethodVisibility_after.java new file mode 100644 index 000000000000..96473d5f021e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InterfaceMethodVisibility_after.java @@ -0,0 +1,17 @@ +interface TweetParser { + static String getTweetMessageFrom(String fullTweet) { + String fieldName = "\"text\":\""; + return newMethod(fullTweet, fieldName); + } + + static String newMethod(String fullTweet, String fieldName) { + int indexOfField = fullTweet.indexOf(fieldName) + fieldName.length(); + int indexOfEndOfField = fullTweet.indexOf("\"", indexOfField); + return fullTweet.substring(indexOfField, indexOfEndOfField); + } + + static String getTwitterHandleFromTweet(String fullTweet) { + String twitterHandleFieldName = "\"screen_name\":\""; + return newMethod(fullTweet, twitterHandleFieldName); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InvalidReference.java b/java/java-tests/testData/refactoring/extractMethodNew/InvalidReference.java new file mode 100644 index 000000000000..b2addd97207c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InvalidReference.java @@ -0,0 +1,7 @@ +import java.io.IOException; + +class Test { + void foo(Exception targetElement) { + PsiPackage aPack = JavaDirectoryService.getInstance().getPackage((IOException)targetElement); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/InvalidReference_after.java b/java/java-tests/testData/refactoring/extractMethodNew/InvalidReference_after.java new file mode 100644 index 000000000000..99c0c39f210c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/InvalidReference_after.java @@ -0,0 +1,11 @@ +import java.io.IOException; + +class Test { + void foo(Exception targetElement) { + PsiPackage aPack = newMethod((IOException) targetElement); + } + + private PsiPackage newMethod(IOException targetElement) { + return JavaDirectoryService.getInstance().getPackage(targetElement); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LValueNotDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/LValueNotDuplicate.java new file mode 100644 index 000000000000..316f1bc89220 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LValueNotDuplicate.java @@ -0,0 +1,11 @@ +class UUU { + int myValue; + + UUU() { + System.out.println(myValue); + } + + void init() { + myValue = 0; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LValueNotDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/LValueNotDuplicate_after.java new file mode 100644 index 000000000000..f73a57a7c2df --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LValueNotDuplicate_after.java @@ -0,0 +1,15 @@ +class UUU { + int myValue; + + UUU() { + System.out.println(newMethod()); + } + + private int newMethod() { + return myValue; + } + + void init() { + myValue = 0; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LeaveCommentsWhenExpressionExtracted.java b/java/java-tests/testData/refactoring/extractMethodNew/LeaveCommentsWhenExpressionExtracted.java new file mode 100644 index 000000000000..05c61afc6bea --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LeaveCommentsWhenExpressionExtracted.java @@ -0,0 +1,6 @@ +class Test { + void bar(){} + void foo() { + bar();//some comment here + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LeaveCommentsWhenExpressionExtracted_after.java b/java/java-tests/testData/refactoring/extractMethodNew/LeaveCommentsWhenExpressionExtracted_after.java new file mode 100644 index 000000000000..8a064f101475 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LeaveCommentsWhenExpressionExtracted_after.java @@ -0,0 +1,10 @@ +class Test { + void bar(){} + void foo() { + newMethod();//some comment here + } + + private void newMethod() { + bar(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LesyaBug.java b/java/java-tests/testData/refactoring/extractMethodNew/LesyaBug.java new file mode 100644 index 000000000000..a292e860e1f8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LesyaBug.java @@ -0,0 +1,15 @@ +import java.io.OutputStream; + +class A { + { + try { + OutputStream out = null; + + try { + } finally { + out.close(); + } + } catch(Throwable t) { + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LesyaBug_after.java b/java/java-tests/testData/refactoring/extractMethodNew/LesyaBug_after.java new file mode 100644 index 000000000000..609225573903 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LesyaBug_after.java @@ -0,0 +1,20 @@ +import java.io.IOException; +import java.io.OutputStream; + +class A { + { + try { + OutputStream out = null; + + newMethod(out); + } catch(Throwable t) { + } + } + + private void newMethod(OutputStream out) throws IOException { + try { + } finally { + out.close(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LocalClass.java b/java/java-tests/testData/refactoring/extractMethodNew/LocalClass.java new file mode 100644 index 000000000000..9f61b16101a4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LocalClass.java @@ -0,0 +1,7 @@ +class Test{ + public void foo() { + class A { + } + new A(); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LocalClassDefinedInMethodWhichIsUsedLater.java b/java/java-tests/testData/refactoring/extractMethodNew/LocalClassDefinedInMethodWhichIsUsedLater.java new file mode 100644 index 000000000000..7f33f347b3fd --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LocalClassDefinedInMethodWhichIsUsedLater.java @@ -0,0 +1,8 @@ +class Test { + void foo() { + class X {} + X x; + + x = null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LocalClassUsage.java b/java/java-tests/testData/refactoring/extractMethodNew/LocalClassUsage.java new file mode 100644 index 000000000000..7910c9f16a53 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LocalClassUsage.java @@ -0,0 +1,7 @@ +class Test{ + public void foo() { + class A { + } + new A(); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableAnnotationsOrder.java b/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableAnnotationsOrder.java new file mode 100644 index 000000000000..7fa69c17de76 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableAnnotationsOrder.java @@ -0,0 +1,13 @@ +class C { + { + @B @A int i = 0; + System.out.println(i); + } + + void f() { + @A @B int j = 0; + System.out.println(j); + } +} +@interface A {} +@interface B {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableAnnotationsOrder_after.java b/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableAnnotationsOrder_after.java new file mode 100644 index 000000000000..54630c858b1d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableAnnotationsOrder_after.java @@ -0,0 +1,16 @@ +class C { + { + newMethod(); + } + + void f() { + newMethod(); + } + + private void newMethod() { + @A @B int j = 0; + System.out.println(j); + } +} +@interface A {} +@interface B {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableModifierList.java b/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableModifierList.java new file mode 100644 index 000000000000..d9d2f99e4e0b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableModifierList.java @@ -0,0 +1,11 @@ +class C { + { + int i = 0; + System.out.println(i); + } + + void f() { + final int j = 0; + System.out.println(j); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableModifierList_after.java b/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableModifierList_after.java new file mode 100644 index 000000000000..e6792368059f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/LocalVariableModifierList_after.java @@ -0,0 +1,14 @@ +class C { + { + newMethod(); + } + + void f() { + newMethod(); + } + + private void newMethod() { + final int j = 0; + System.out.println(j); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/MakeVoidMethodReturnVariable.java b/java/java-tests/testData/refactoring/extractMethodNew/MakeVoidMethodReturnVariable.java new file mode 100644 index 000000000000..894c81cfd965 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/MakeVoidMethodReturnVariable.java @@ -0,0 +1,5 @@ +class X { + void foo() { + int x = 0; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/MakeVoidMethodReturnVariable_after.java b/java/java-tests/testData/refactoring/extractMethodNew/MakeVoidMethodReturnVariable_after.java new file mode 100644 index 000000000000..bd8821fd26b1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/MakeVoidMethodReturnVariable_after.java @@ -0,0 +1,10 @@ +class X { + void foo() { + int x = newMethod(); + } + + private int newMethod() { + int x = 0; + return x; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Method2Interface.java b/java/java-tests/testData/refactoring/extractMethodNew/Method2Interface.java new file mode 100644 index 000000000000..0c9a1c7a0523 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Method2Interface.java @@ -0,0 +1,5 @@ +interface I { + default void foo () { + System.out.println("hello"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromConstant.java b/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromConstant.java new file mode 100644 index 000000000000..3ea40ddcabfd --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromConstant.java @@ -0,0 +1,3 @@ +interface I { + String FOO = "hello"; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromConstant_after.java b/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromConstant_after.java new file mode 100644 index 000000000000..6913f366b8a6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromConstant_after.java @@ -0,0 +1,10 @@ +import org.jetbrains.annotations.NotNull; + +interface I { + String FOO = newMethod(); + + @NotNull + static String newMethod() { + return "hello"; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromStatic.java b/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromStatic.java new file mode 100644 index 000000000000..1272d81384aa --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromStatic.java @@ -0,0 +1,5 @@ +interface I { + static void foo () { + System.out.println("hello"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromStatic_after.java b/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromStatic_after.java new file mode 100644 index 000000000000..32a49ca4f894 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Method2InterfaceFromStatic_after.java @@ -0,0 +1,9 @@ +interface I { + static void foo () { + newMethod(); + } + + static void newMethod() { + System.out.println("hello"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Method2Interface_after.java b/java/java-tests/testData/refactoring/extractMethodNew/Method2Interface_after.java new file mode 100644 index 000000000000..e50867b0d977 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Method2Interface_after.java @@ -0,0 +1,9 @@ +interface I { + default void foo () { + newMethod(); + } + + default void newMethod() { + System.out.println("hello"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/MethodAnnotations.java b/java/java-tests/testData/refactoring/extractMethodNew/MethodAnnotations.java new file mode 100644 index 000000000000..a21035126650 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/MethodAnnotations.java @@ -0,0 +1,21 @@ +class Test10 { + void test() { + new Super() { + int get() { + return 0; + } + }; + + new Super() { + @Override + int get() { + return 0; + } + }; + } +} +class Super { + int get() { + return 1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/MethodAnnotations_after.java b/java/java-tests/testData/refactoring/extractMethodNew/MethodAnnotations_after.java new file mode 100644 index 000000000000..9de71d9c4be0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/MethodAnnotations_after.java @@ -0,0 +1,20 @@ +class Test10 { + void test() { + newMethod(); + + newMethod(); + } + + private void newMethod() { + new Super() { + int get() { + return 0; + } + }; + } +} +class Super { + int get() { + return 1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/MultipleVarsInMethodNoReturnStatementAndAssignment.java b/java/java-tests/testData/refactoring/extractMethodNew/MultipleVarsInMethodNoReturnStatementAndAssignment.java new file mode 100644 index 000000000000..6f57cbf63da3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/MultipleVarsInMethodNoReturnStatementAndAssignment.java @@ -0,0 +1,7 @@ +class X { + void foo() { + int x = 0; + int y = 42; + + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/MultipleVarsInMethodNoReturnStatementAndAssignment_after.java b/java/java-tests/testData/refactoring/extractMethodNew/MultipleVarsInMethodNoReturnStatementAndAssignment_after.java new file mode 100644 index 000000000000..70563df6be59 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/MultipleVarsInMethodNoReturnStatementAndAssignment_after.java @@ -0,0 +1,11 @@ +class X { + void foo() { + newMethod(); + + } + + private int newMethod() { + int x = 0; + int y = 42; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NearComment.java b/java/java-tests/testData/refactoring/extractMethodNew/NearComment.java new file mode 100644 index 000000000000..54d855f0e61d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NearComment.java @@ -0,0 +1,18 @@ +public class ExtractMethods { + public void processLine(String line) { + + //final Charset charset = myProcessHandler.getCharset(); + final OutputStream outputStream = null;//myProcessHandler.getProcessInput(); + try { + //byte[] bytes = (line + "\n").getBytes(charset.name()); + byte[] bytes = (line + "\n").getBytes(); + outputStream.write(bytes); + outputStream.flush(); + } + catch (IOException e) { + // ignore + } + + } + +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NearComment_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NearComment_after.java new file mode 100644 index 000000000000..171161b42039 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NearComment_after.java @@ -0,0 +1,21 @@ +public class ExtractMethods { + public void processLine(String line) { + newMethod(line); + + } + + private void newMethod(String line) { + //final Charset charset = myProcessHandler.getCharset(); + final OutputStream outputStream = null;//myProcessHandler.getProcessInput(); + try { + //byte[] bytes = (line + "\n").getBytes(charset.name()); + byte[] bytes = (line + "\n").getBytes(); + outputStream.write(bytes); + outputStream.flush(); + } + catch (IOException e) { + // ignore + } + } + +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NoNPE1.java b/java/java-tests/testData/refactoring/extractMethodNew/NoNPE1.java new file mode 100644 index 000000000000..6150f3d359b4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NoNPE1.java @@ -0,0 +1,17 @@ +package extractMethod; + +class Zzz { + + protected void doAction(C c, boolean b) { + if (b) { + c.foo(() -> c.bar()); + } + else { + c.foo(() -> c.bar()); + } + } + private class C { + void foo(Runnable r) {} + void bar() {} + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NoNPE1_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NoNPE1_after.java new file mode 100644 index 000000000000..6c7711325c22 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NoNPE1_after.java @@ -0,0 +1,25 @@ +package extractMethod; + +import org.jetbrains.annotations.NotNull; + +class Zzz { + + protected void doAction(C c, boolean b) { + if (b) { + c.foo(newMethod(c)); + } + else { + c.foo(newMethod(c)); + } + } + + @NotNull + private Runnable newMethod(C c) { + return () -> c.bar(); + } + + private class C { + void foo(Runnable r) {} + void bar() {} + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NoNPE2.java b/java/java-tests/testData/refactoring/extractMethodNew/NoNPE2.java new file mode 100644 index 000000000000..beafddbd53e5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NoNPE2.java @@ -0,0 +1,25 @@ +import java.util.Iterator; +public class ConcatIterables { + class ConcatenatingIterable implements Iterable { + ImmutableQueue> iterables; + public ConcatenatingIterable(Iterable xs, Iterable ys) { + ((ConcatenatingIterable) ys).iterables.pushFront(xs); + } + @Override + public Iterator iterator() { + return null; + } + } + static class ImmutableQueue implements Iterable { + public static ImmutableQueue empty() { + return new ImmutableQueue<>(); + } + @Override + public Iterator iterator() { + return null; + } + ImmutableQueue pushFront(A a) { + return null; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NoNPE2_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NoNPE2_after.java new file mode 100644 index 000000000000..8b1a72673c76 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NoNPE2_after.java @@ -0,0 +1,30 @@ +import java.util.Iterator; +public class ConcatIterables { + class ConcatenatingIterable implements Iterable { + ImmutableQueue> iterables; + public ConcatenatingIterable(Iterable xs, Iterable ys) { + newMethod(xs, (ConcatenatingIterable) ys); + } + + private ImmutableQueue> newMethod(Iterable xs, ConcatenatingIterable ys) { + return ys.iterables.pushFront(xs); + } + + @Override + public Iterator iterator() { + return null; + } + } + static class ImmutableQueue implements Iterable { + public static ImmutableQueue empty() { + return new ImmutableQueue<>(); + } + @Override + public Iterator iterator() { + return null; + } + ImmutableQueue pushFront(A a) { + return null; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NoReturnTypesSuggested.java b/java/java-tests/testData/refactoring/extractMethodNew/NoReturnTypesSuggested.java new file mode 100644 index 000000000000..317a44b48be9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NoReturnTypesSuggested.java @@ -0,0 +1,7 @@ +class X { + void foo() { + if (true) return; + System.out.println(); + + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NoReturnTypesSuggested_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NoReturnTypesSuggested_after.java new file mode 100644 index 000000000000..f339dbd04b55 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NoReturnTypesSuggested_after.java @@ -0,0 +1,11 @@ +class X { + void foo() { + newMethod(); + + } + + private int newMethod() { + if (true) return; + System.out.println(); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NoShortCircuit.java b/java/java-tests/testData/refactoring/extractMethodNew/NoShortCircuit.java new file mode 100644 index 000000000000..5fbc2f02297b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NoShortCircuit.java @@ -0,0 +1,7 @@ +public class Test { + public static void foo(char c) { + if (c == '\n' || c == '\r' || c == '\u0000') { + System.out.println(""); + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NoShortCircuit_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NoShortCircuit_after.java new file mode 100644 index 000000000000..a29a6f310ccc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NoShortCircuit_after.java @@ -0,0 +1,11 @@ +public class Test { + public static void foo(char c) { + if (newMethod(c) || c == '\u0000') { + System.out.println(""); + } + } + + private static boolean newMethod(char c) { + return c == '\n' || c == '\r'; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NonFinalWritableParam.java b/java/java-tests/testData/refactoring/extractMethodNew/NonFinalWritableParam.java new file mode 100644 index 000000000000..8d459592174f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NonFinalWritableParam.java @@ -0,0 +1,6 @@ +public class Test { + public static void main(String[] args) { + String s = "dude"; + s = s; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NonFinalWritableParam_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NonFinalWritableParam_after.java new file mode 100644 index 000000000000..43f9b3c23c71 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NonFinalWritableParam_after.java @@ -0,0 +1,10 @@ +public class Test { + public static void main(String[] args) { + String s = "dude"; + newMethod(s); + } + + private static void newMethod(String s) { + s = s; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NonFoldInIfBody.java b/java/java-tests/testData/refactoring/extractMethodNew/NonFoldInIfBody.java new file mode 100644 index 000000000000..b92769d879c2 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NonFoldInIfBody.java @@ -0,0 +1,7 @@ +class Test { + void foo(String[] a, int i, boolean b) { + if (b) { + System.out.println(a[i]); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NonFoldInIfBody_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NonFoldInIfBody_after.java new file mode 100644 index 000000000000..b6b5edaf0df3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NonFoldInIfBody_after.java @@ -0,0 +1,11 @@ +class Test { + void foo(String[] a, int i, boolean b) { + newMethod(a, i, b); + } + + private void newMethod(String[] a, int i, boolean b) { + if (b) { + System.out.println(a[i]); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NonPhysicalAssumptions.java b/java/java-tests/testData/refactoring/extractMethodNew/NonPhysicalAssumptions.java new file mode 100644 index 000000000000..1ba26fc99846 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NonPhysicalAssumptions.java @@ -0,0 +1,26 @@ +class Test { + { + UrlClassLoader loader = UrlClassLoader.build(). + useCache(new UrlClassLoader.I() { + @Override + public void m() {} + }).get(); + + System.out.println(loader); + } + + static class UrlClassLoader { + static UrlClassLoader build() {return new UrlClassLoader();} + UrlClassLoader useCache(I i) { + return this; + } + + interface I { + void m(); + } + + UrlClassLoader get() { + return this; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NonPhysicalAssumptions_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NonPhysicalAssumptions_after.java new file mode 100644 index 000000000000..90f2fa01ca54 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NonPhysicalAssumptions_after.java @@ -0,0 +1,30 @@ +class Test { + { + UrlClassLoader loader = newMethod(); + + System.out.println(loader); + } + + private UrlClassLoader newMethod() { + return UrlClassLoader.build(). + useCache(new UrlClassLoader.I() { + @Override + public void m() {} + }).get(); + } + + static class UrlClassLoader { + static UrlClassLoader build() {return new UrlClassLoader();} + UrlClassLoader useCache(I i) { + return this; + } + + interface I { + void m(); + } + + UrlClassLoader get() { + return this; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NormalExitIf.java b/java/java-tests/testData/refactoring/extractMethodNew/NormalExitIf.java new file mode 100644 index 000000000000..72ce352f6baf --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NormalExitIf.java @@ -0,0 +1,17 @@ +class Test { + + private static void f(boolean a, boolean b) { + if (a) { + if (b) { + System.out.println(""); + return; + } else { + System.out.println(""); + return; + } + } else { + System.out.println(""); + } + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NormalExitIf_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NormalExitIf_after.java new file mode 100644 index 000000000000..e17024e677a6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NormalExitIf_after.java @@ -0,0 +1,22 @@ +class Test { + + private static void f(boolean a, boolean b) { + if (a) { + newMethod(b); + return; + } else { + System.out.println(""); + } + } + + private static void newMethod(boolean b) { + if (b) { + System.out.println(""); + return; + } else { + System.out.println(""); + return; + } + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NormalExitTry.java b/java/java-tests/testData/refactoring/extractMethodNew/NormalExitTry.java new file mode 100644 index 000000000000..d170445f5624 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NormalExitTry.java @@ -0,0 +1,17 @@ +class Test { + + private static void f(boolean a, boolean b) { + if (a) { + try { + System.out.println(); + return; + } + catch (Exception e) { + return; + } + } else { + System.out.println(""); + } + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NormalExitTry_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NormalExitTry_after.java new file mode 100644 index 000000000000..9f0a21499dbb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NormalExitTry_after.java @@ -0,0 +1,22 @@ +class Test { + + private static void f(boolean a, boolean b) { + if (a) { + newMethod(); + return; + } else { + System.out.println(""); + } + } + + private static void newMethod() { + try { + System.out.println(); + return; + } + catch (Exception e) { + return; + } + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotInitializedInsideFinally.java b/java/java-tests/testData/refactoring/extractMethodNew/NotInitializedInsideFinally.java new file mode 100644 index 000000000000..17d0a1653a15 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotInitializedInsideFinally.java @@ -0,0 +1,14 @@ +class Tester { + String x() { + String o = ""; + + String s; + try { + s = o; + } + finally { + + } + return s; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotInitializedInsideFinally_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotInitializedInsideFinally_after.java new file mode 100644 index 000000000000..5c6cc93430f4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotInitializedInsideFinally_after.java @@ -0,0 +1,18 @@ +class Tester { + String x() { + String o = ""; + + return newMethod(o); + } + + private String newMethod(String o) { + String s; + try { + s = o; + } + finally { + + } + return s; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument0.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument0.java new file mode 100644 index 000000000000..c140f34fef43 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument0.java @@ -0,0 +1,13 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f(@Nullable Object o) { + if (o != null) { + g(o); + } + } + + void g(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument0_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument0_after.java new file mode 100644 index 000000000000..2998cf4143bb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument0_after.java @@ -0,0 +1,17 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f(@Nullable Object o) { + if (o != null) { + newMethod(o); + } + } + + private void newMethod(@NotNull Object o) { + g(o); + } + + void g(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument1.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument1.java new file mode 100644 index 000000000000..d2e6bdb3f777 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument1.java @@ -0,0 +1,18 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f(@Nullable Object o) { + if (o != null) { + if (o instanceof String) { + o = 1; + } else { + System.out.println(o); + } + g(o); + } + } + + void g(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument1_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument1_after.java new file mode 100644 index 000000000000..b404d0396802 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument1_after.java @@ -0,0 +1,22 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f(@Nullable Object o) { + if (o != null) { + newMethod(o); + } + } + + private void newMethod(@NotNull Object o) { + if (o instanceof String) { + o = 1; + } else { + System.out.println(o); + } + g(o); + } + + void g(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument2.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument2.java new file mode 100644 index 000000000000..4bd157e273c9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument2.java @@ -0,0 +1,27 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f() { + I i = new I() { + @Override + public void m(@Nullable Object o) { + if (o != null) { + if (o instanceof String) { + o = 2; + } else { + System.out.println(o); + } + g(o); + } + } + }; + } + + void g(@NotNull Object o) { + } + + interface I { + void m(Object o); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument2_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument2_after.java new file mode 100644 index 000000000000..9d7bd8e22367 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument2_after.java @@ -0,0 +1,31 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f() { + I i = new I() { + @Override + public void m(@Nullable Object o) { + if (o != null) { + newMethod(o); + } + } + }; + } + + private void newMethod(@NotNull Object o) { + if (o instanceof String) { + o = 2; + } else { + System.out.println(o); + } + g(o); + } + + void g(@NotNull Object o) { + } + + interface I { + void m(Object o); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument3.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument3.java new file mode 100644 index 000000000000..e7044849c3f7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument3.java @@ -0,0 +1,26 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f() { + I i = (@Nullable Object o) -> { + if (o != null) { + if (o instanceof String) { + o = 3; + } + else { + System.out.println(o); + } + g(o); + } + }; + + } + + void g(@NotNull Object o) { + } + + interface I { + void m(Object o); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument3_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument3_after.java new file mode 100644 index 000000000000..cb9d5ee20d8d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument3_after.java @@ -0,0 +1,30 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f() { + I i = (@Nullable Object o) -> { + if (o != null) { + newMethod(o); + } + }; + + } + + private void newMethod(@NotNull Object o) { + if (o instanceof String) { + o = 3; + } + else { + System.out.println(o); + } + g(o); + } + + void g(@NotNull Object o) { + } + + interface I { + void m(Object o); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument4.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument4.java new file mode 100644 index 000000000000..d45ea5fad989 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument4.java @@ -0,0 +1,27 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f() { + I i = (@Nullable String o) -> { + if (o != null) { + if (o instanceof String) { + o = "4"; + } + else { + System.out.println(o); + } + g(o); + } + return ""; + }; + + } + + void g(@NotNull Object o) { + } + + interface I { + R m(T t); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument4_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument4_after.java new file mode 100644 index 000000000000..4eaffb2c7a93 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument4_after.java @@ -0,0 +1,31 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f() { + I i = (@Nullable String o) -> { + if (o != null) { + newMethod(o); + } + return ""; + }; + + } + + private void newMethod(@NotNull String o) { + if (o instanceof String) { + o = "4"; + } + else { + System.out.println(o); + } + g(o); + } + + void g(@NotNull Object o) { + } + + interface I { + R m(T t); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument5.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument5.java new file mode 100644 index 000000000000..7bb38219dce8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument5.java @@ -0,0 +1,13 @@ +import org.jetbrains.annotations.NotNull; + +class C { + void f(@NotNull Object o, boolean b) { + if (b) { + o = null; + } + g(o); + } + + void g(Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument5_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument5_after.java new file mode 100644 index 000000000000..3db2701c3d42 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument5_after.java @@ -0,0 +1,18 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f(@NotNull Object o, boolean b) { + if (b) { + o = null; + } + newMethod(o); + } + + private void newMethod(@Nullable Object o) { + g(o); + } + + void g(Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument6.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument6.java new file mode 100644 index 000000000000..246ebaf0c729 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument6.java @@ -0,0 +1,13 @@ +import org.jetbrains.annotations.Nullable; + +class C { + void f(@Nullable Object o, boolean b) { + if (b) { + o = null; + } + g(o); + } + + void g(Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument6_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument6_after.java new file mode 100644 index 000000000000..a6673f287084 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument6_after.java @@ -0,0 +1,17 @@ +import org.jetbrains.annotations.Nullable; + +class C { + void f(@Nullable Object o, boolean b) { + if (b) { + o = null; + } + newMethod(o); + } + + private void newMethod(@Nullable Object o) { + g(o); + } + + void g(Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument7.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument7.java new file mode 100644 index 000000000000..9c555c7d4b7d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument7.java @@ -0,0 +1,15 @@ +import org.jetbrains.annotations.Nullable; + +class C { + void f(@Nullable Object o, boolean b) { + while (o != null) { + if (b) { + o = 7; + } + g(o); + } + } + + void g(Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument7_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument7_after.java new file mode 100644 index 000000000000..a1ad2fc1e0d1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgument7_after.java @@ -0,0 +1,20 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void f(@Nullable Object o, boolean b) { + while (o != null) { + if (b) { + o = 7; + } + newMethod(o); + } + } + + private void newMethod(@NotNull Object o) { + g(o); + } + + void g(Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassBare.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassBare.java new file mode 100644 index 000000000000..f27ea26ab6dc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassBare.java @@ -0,0 +1,13 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class X { + void foo(@NotNull Object o) { + Runnable r = new Runnable() { + @Override + public void run() { + System.out.println(o); + } + }; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassBare_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassBare_after.java new file mode 100644 index 000000000000..c02db1e1dca5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassBare_after.java @@ -0,0 +1,17 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class X { + void foo(@NotNull Object o) { + newMethod(o); + } + + private void newMethod(@NotNull Object o) { + Runnable r = new Runnable() { + @Override + public void run() { + System.out.println(o); + } + }; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIf.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIf.java new file mode 100644 index 000000000000..3edba906e5d4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIf.java @@ -0,0 +1,18 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) { + Runnable r = new Runnable() { + @Override + public void run() { + bar(o); + } + }; + } + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIfNoBlock.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIfNoBlock.java new file mode 100644 index 000000000000..38b2e80473fa --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIfNoBlock.java @@ -0,0 +1,17 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) + new Runnable() { + @Override + public void run() { + bar(o); + } + }.run(); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIfNoBlock_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIfNoBlock_after.java new file mode 100644 index 000000000000..c5cf7ad4168d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIfNoBlock_after.java @@ -0,0 +1,22 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) + newMethod(o).run(); + } + + @NotNull + private Runnable newMethod(@NotNull Object o) { + return new Runnable() { + @Override + public void run() { + bar(o); + } + }; + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIf_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIf_after.java new file mode 100644 index 000000000000..01d4236c686f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentAnonymousClassInIf_after.java @@ -0,0 +1,22 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) { + newMethod(o); + } + } + + private void newMethod(@NotNull Object o) { + Runnable r = new Runnable() { + @Override + public void run() { + bar(o); + } + }; + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaBare.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaBare.java new file mode 100644 index 000000000000..92abf400a806 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaBare.java @@ -0,0 +1,11 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@NotNull Object o) { + Runnable r = () -> bar(o); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaBare_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaBare_after.java new file mode 100644 index 000000000000..aeaff5b97e22 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaBare_after.java @@ -0,0 +1,15 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@NotNull Object o) { + newMethod(o); + } + + private void newMethod(@NotNull Object o) { + Runnable r = () -> bar(o); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInForInitializer.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInForInitializer.java new file mode 100644 index 000000000000..1dcdab123c0c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInForInitializer.java @@ -0,0 +1,12 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) + for(Runnable r = () -> bar(o); ; r.run()) {} + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInForInitializer_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInForInitializer_after.java new file mode 100644 index 000000000000..4fc7d2687fb9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInForInitializer_after.java @@ -0,0 +1,16 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) + for(Runnable r = () -> newMethod(o); ; r.run()) {} + } + + private void newMethod(@NotNull Object o) { + bar(o); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIf.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIf.java new file mode 100644 index 000000000000..ae413819d426 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIf.java @@ -0,0 +1,13 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) { + Runnable r = () -> bar(o); + } + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfInsideBody.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfInsideBody.java new file mode 100644 index 000000000000..e658ad5940b0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfInsideBody.java @@ -0,0 +1,12 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) + ((Runnable) (() -> bar(o))).run(); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfInsideBody_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfInsideBody_after.java new file mode 100644 index 000000000000..978573f685d2 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfInsideBody_after.java @@ -0,0 +1,16 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) + ((Runnable) (() -> newMethod(o))).run(); + } + + private void newMethod(@NotNull Object o) { + bar(o); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfNoBlock.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfNoBlock.java new file mode 100644 index 000000000000..11e403c6b6e1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfNoBlock.java @@ -0,0 +1,12 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) + ((Runnable)(() -> bar(o))).run(); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfNoBlock_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfNoBlock_after.java new file mode 100644 index 000000000000..af3f2fcfd3e8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIfNoBlock_after.java @@ -0,0 +1,17 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) + newMethod(o).run(); + } + + @NotNull + private Runnable newMethod(@NotNull Object o) { + return (Runnable)(() -> bar(o)); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIf_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIf_after.java new file mode 100644 index 000000000000..e751bb782c7e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInIf_after.java @@ -0,0 +1,17 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + if (o != null) { + newMethod(o); + } + } + + private void newMethod(@NotNull Object o) { + Runnable r = () -> bar(o); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInWhileNoBlock.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInWhileNoBlock.java new file mode 100644 index 000000000000..2538c7ceb899 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInWhileNoBlock.java @@ -0,0 +1,12 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + while (o != null) + ((Runnable)(() -> bar(o))).run(); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInWhileNoBlock_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInWhileNoBlock_after.java new file mode 100644 index 000000000000..927416cea2b7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInWhileNoBlock_after.java @@ -0,0 +1,17 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@Nullable Object o) { + while (o != null) + newMethod(o).run(); + } + + @NotNull + private Runnable newMethod(@NotNull Object o) { + return (Runnable)(() -> bar(o)); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInsideBody.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInsideBody.java new file mode 100644 index 000000000000..ffec52bb2c5e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInsideBody.java @@ -0,0 +1,11 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@NotNull Object o) { + Runnable r = () -> bar(o); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInsideBody_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInsideBody_after.java new file mode 100644 index 000000000000..db02f0938a7b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentLambdaInsideBody_after.java @@ -0,0 +1,15 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class C { + void foo(@NotNull Object o) { + Runnable r = () -> newMethod(o); + } + + private void newMethod(@NotNull Object o) { + bar(o); + } + + void bar(@NotNull Object o) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentTooComplexCode.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentTooComplexCode.java new file mode 100644 index 000000000000..9b5dff80608b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentTooComplexCode.java @@ -0,0 +1,29 @@ +import org.jetbrains.annotations.NotNull; + +class TooComplexCode { + static class X { @NotNull X get() { return this; }} + static class A extends X { @NotNull X get() { return new B(); }} + static class B extends X { @NotNull X get() { return new C(); }} + static class C extends X { @NotNull X get() { return new A(); }} + + void tooComplex(@NotNull X x) { + if (x instanceof A) { + X y = x.get(); + if (y instanceof A) { + System.out.println("A A "+x+' '+y); + } + if (y instanceof B) { + System.out.println("A B "+x+' '+y); + } + } + if (x instanceof B) { + X y = x.get(); + if (y instanceof A) { + System.out.println("B A "+x+' '+y); + } + if (y instanceof B) { + System.out.println("B B "+x+' '+y); + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentTooComplexCode_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentTooComplexCode_after.java new file mode 100644 index 000000000000..593440394294 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullArgumentTooComplexCode_after.java @@ -0,0 +1,34 @@ +import org.jetbrains.annotations.NotNull; + +class TooComplexCode { + static class X { @NotNull X get() { return this; }} + static class A extends X { @NotNull X get() { return new B(); }} + static class B extends X { @NotNull X get() { return new C(); }} + static class C extends X { @NotNull X get() { return new A(); }} + + void tooComplex(@NotNull X x) { + if (x instanceof A) { + X y = newMethod(x); + if (y instanceof A) { + System.out.println("A A "+x+' '+y); + } + if (y instanceof B) { + System.out.println("A B "+x+' '+y); + } + } + if (x instanceof B) { + X y = newMethod(x); + if (y instanceof A) { + System.out.println("B A "+x+' '+y); + } + if (y instanceof B) { + System.out.println("B B "+x+' '+y); + } + } + } + + @NotNull + private X newMethod(@NotNull X x) { + return x.get(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullCheckNameConflicts.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullCheckNameConflicts.java new file mode 100644 index 000000000000..c0ff1577b712 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullCheckNameConflicts.java @@ -0,0 +1,30 @@ +import org.jetbrains.annotations.NotNull; + +class X { + @NotNull + public X fun1(int x) { + return this; + } + + public X fun2(boolean b) { + + if (b) { + int x = 1; + return fun1(x); + } + + int x = 0; + return null; + } + + + + + void foo(int i, int j) { + bar(i, j); + } + + private void bar(int i, int j) { + + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NotNullCheckNameConflicts_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NotNullCheckNameConflicts_after.java new file mode 100644 index 000000000000..54cdd6f72cbc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NotNullCheckNameConflicts_after.java @@ -0,0 +1,36 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class X { + @NotNull + public X fun1(int x) { + return this; + } + + public X fun2(boolean b) { + + X x1 = newMethod(b); + if (x1 != null) return x1; + + int x = 0; + return null; + } + + @Nullable + private X newMethod(boolean b) { + if (b) { + int x = 1; + return fun1(x); + } + return null; + } + + + void foo(int i, int j) { + bar(i, j); + } + + private void bar(int i, int j) { + + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck.java new file mode 100644 index 000000000000..d1bb611764da --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck.java @@ -0,0 +1,15 @@ +class Test { + Object foo() { + Object o = ""; + for (int i = 0; i < 5; i++) { + if (i == 10){ + o = null; + } + } + if (o == null) { + return null; + } + System.out.println(o); + return o; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck1.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck1.java new file mode 100644 index 000000000000..600e3c65eeb7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck1.java @@ -0,0 +1,16 @@ +class Test { + String foo(int i, boolean flag) { + + String xxx = ""; + if (flag) { + for (int j = 0; j < 100; j++) { + if (i == j) { + return null; + } + } + } + + System.out.println(xxx); + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck1_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck1_after.java new file mode 100644 index 000000000000..e5b0bb430818 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck1_after.java @@ -0,0 +1,25 @@ +import org.jetbrains.annotations.Nullable; + +class Test { + String foo(int i, boolean flag) { + + String xxx = newMethod(i, flag); + if (xxx == null) return null; + + System.out.println(xxx); + return null; + } + + @Nullable + private String newMethod(int i, boolean flag) { + String xxx = ""; + if (flag) { + for (int j = 0; j < 100; j++) { + if (i == j) { + return null; + } + } + } + return xxx; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreak.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreak.java new file mode 100644 index 000000000000..08ef1b515dc5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreak.java @@ -0,0 +1,24 @@ +import java.util.List; + +class Test { + List things; + + void foo() { + while(true) { + Pojo x = things.get(0); + + if(x.it > 0) { + break; + } + things.remove(x); + System.out.println(x.it); + } + } + + static class Pojo { + double it; + Pojo(double w) { + it = w; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreakDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreakDuplicate.java new file mode 100644 index 000000000000..3a4784164751 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreakDuplicate.java @@ -0,0 +1,31 @@ +import java.util.List; + +public class NullableCheckBreakDuplicate { + List things; + + void foo() { + while (true) { + + Pojo x = things.get(0); + + if (x.it > 0) break; + things.remove(x); + System.out.println(x.it); + } + } + + void baz() { + while (true) { + Pojo x = things.get(0); + + if (x.it > 0) break; + things.remove(x); + System.out.println(x.it); + } + } + + static class Pojo { + double it; + Pojo(double w) { it = w; } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreakDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreakDuplicate_after.java new file mode 100644 index 000000000000..e23d2eb3c3f8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreakDuplicate_after.java @@ -0,0 +1,38 @@ +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class NullableCheckBreakDuplicate { + List things; + + void foo() { + while (true) { + + Pojo x = newMethod(); + if (x == null) break; + System.out.println(x.it); + } + } + + @Nullable + private Pojo newMethod() { + Pojo x = things.get(0); + + if (x.it > 0) return null; + things.remove(x); + return x; + } + + void baz() { + while (true) { + Pojo x = newMethod(); + if (x == null) break; + System.out.println(x.it); + } + } + + static class Pojo { + double it; + Pojo(double w) { it = w; } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreak_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreak_after.java new file mode 100644 index 000000000000..7e3350cae579 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckBreak_after.java @@ -0,0 +1,33 @@ +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +class Test { + List things; + + void foo() { + while(true) { + Pojo x = newMethod(); + if (x == null) break; + System.out.println(x.it); + } + } + + @Nullable + private Pojo newMethod() { + Pojo x = things.get(0); + + if(x.it > 0) { + return null; + } + things.remove(x); + return x; + } + + static class Pojo { + double it; + Pojo(double w) { + it = w; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckDontMissFinal.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckDontMissFinal.java new file mode 100644 index 000000000000..0ffc6a60e273 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckDontMissFinal.java @@ -0,0 +1,13 @@ +class Test { + void foo() { + final String str = ""; + if (str == "a") { + return; + } + new Runnable() { + public void run() { + System.out.println(str); + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckDontMissFinal_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckDontMissFinal_after.java new file mode 100644 index 000000000000..8f3374d9ef5a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckDontMissFinal_after.java @@ -0,0 +1,22 @@ +import org.jetbrains.annotations.Nullable; + +class Test { + void foo() { + final String str = newMethod(); + if (str == null) return; + new Runnable() { + public void run() { + System.out.println(str); + } + } + } + + @Nullable + private String newMethod() { + final String str = ""; + if (str == "a") { + return null; + } + return str; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoid.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoid.java new file mode 100644 index 000000000000..d0e404daf1f6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoid.java @@ -0,0 +1,14 @@ +class Test { + void foo() { + Object o = ""; + for (int i = 0; i < 5; i++) { + if (i == 10){ + o = null; + } + } + if (o == null) { + return; + } + System.out.println(o); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoidDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoidDuplicate.java new file mode 100644 index 000000000000..daa8e9c75c30 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoidDuplicate.java @@ -0,0 +1,27 @@ +public class NullableCheckVoidDuplicate { + void foo() { + Object o = ""; + for (int i = 0; i < 5; i++) { + if (i == 10) { + o = null; + } + } + if (o == null) { + return; + } + System.out.println(o); + } + + void bar() { + Object o = ""; + for (int i = 0; i < 5; i++) { + if (i == 10) { + o = null; + } + } + if (o == null) { + return; + } + System.out.println(o); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoidDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoidDuplicate_after.java new file mode 100644 index 000000000000..d8806dbca852 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoidDuplicate_after.java @@ -0,0 +1,29 @@ +import org.jetbrains.annotations.Nullable; + +public class NullableCheckVoidDuplicate { + void foo() { + Object o = newMethod(); + if (o == null) return; + System.out.println(o); + } + + @Nullable + private Object newMethod() { + Object o = ""; + for (int i = 0; i < 5; i++) { + if (i == 10) { + o = null; + } + } + if (o == null) { + return null; + } + return o; + } + + void bar() { + Object o = newMethod(); + if (o == null) return; + System.out.println(o); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoid_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoid_after.java new file mode 100644 index 000000000000..6fda0613bdfc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheckVoid_after.java @@ -0,0 +1,23 @@ +import org.jetbrains.annotations.Nullable; + +class Test { + void foo() { + Object o = newMethod(); + if (o == null) return; + System.out.println(o); + } + + @Nullable + private Object newMethod() { + Object o = ""; + for (int i = 0; i < 5; i++) { + if (i == 10){ + o = null; + } + } + if (o == null) { + return null; + } + return o; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck_after.java new file mode 100644 index 000000000000..bfbef5990962 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/NullableCheck_after.java @@ -0,0 +1,24 @@ +import org.jetbrains.annotations.Nullable; + +class Test { + Object foo() { + Object o = newMethod(); + if (o == null) return null; + System.out.println(o); + return o; + } + + @Nullable + private Object newMethod() { + Object o = ""; + for (int i = 0; i < 5; i++) { + if (i == 10){ + o = null; + } + } + if (o == null) { + return null; + } + return o; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OneBranchAssignment.java b/java/java-tests/testData/refactoring/extractMethodNew/OneBranchAssignment.java new file mode 100644 index 000000000000..6f6504888b74 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OneBranchAssignment.java @@ -0,0 +1,13 @@ +class A{ + public static Object test(Object a) { + boolean value; + + if (a == null){ + value = true; + } + else{ + } + + return Boolean.valueOf(value); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OneBranchAssignment_after.java b/java/java-tests/testData/refactoring/extractMethodNew/OneBranchAssignment_after.java new file mode 100644 index 000000000000..bd5ba223522d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OneBranchAssignment_after.java @@ -0,0 +1,19 @@ +class A{ + public static Object test(Object a) { + boolean value; + + if (a == null){ + value = newMethod(); + } + else{ + } + + return Boolean.valueOf(value); + } + + private static boolean newMethod() { + boolean value; + value = true; + return value; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OneLineLambda.java b/java/java-tests/testData/refactoring/extractMethodNew/OneLineLambda.java new file mode 100644 index 000000000000..db109ef4b5cd --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OneLineLambda.java @@ -0,0 +1,5 @@ +class Test { + public void foo() { + Comparable c = o -> o.indexOf("foo"); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OneLineLambda_after.java b/java/java-tests/testData/refactoring/extractMethodNew/OneLineLambda_after.java new file mode 100644 index 000000000000..c5196b4e9ced --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OneLineLambda_after.java @@ -0,0 +1,9 @@ +class Test { + public void foo() { + Comparable c = o -> newMethod(o); + } + + private int newMethod(String o) { + return o.indexOf("foo"); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OneVariableExpression.java b/java/java-tests/testData/refactoring/extractMethodNew/OneVariableExpression.java new file mode 100644 index 000000000000..a2cefaaa50be --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OneVariableExpression.java @@ -0,0 +1,12 @@ +import java.util.List; + +class C { + void m(List list) { + int i = 0; + System.out.println(i); + + if (list.size() > 0) { + System.out.println(list.size()); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OneVariableExpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/OneVariableExpression_after.java new file mode 100644 index 000000000000..01349d8f84b2 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OneVariableExpression_after.java @@ -0,0 +1,16 @@ +import java.util.List; + +class C { + void m(List list) { + int i = 0; + System.out.println(newMethod(i)); + + if (list.size() > 0) { + System.out.println(list.size()); + } + } + + private int newMethod(int i) { + return i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OutputVariableDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/OutputVariableDuplicate.java new file mode 100644 index 000000000000..09ea5f21f156 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OutputVariableDuplicate.java @@ -0,0 +1,19 @@ +public class OutputVariableDuplicate { + String foo() { + String var = ""; + if (var == null) { + return null; + } + System.out.println(var); + return var; + } + + String bar() { + String var = ""; + if (var == null) { + return null; + } + System.out.println(var); + return var; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OutputVariableDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/OutputVariableDuplicate_after.java new file mode 100644 index 000000000000..17444e84d50a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OutputVariableDuplicate_after.java @@ -0,0 +1,26 @@ +import org.jetbrains.annotations.Nullable; + +public class OutputVariableDuplicate { + String foo() { + String var = newMethod(); + if (var == null) return null; + System.out.println(var); + return var; + } + + @Nullable + private String newMethod() { + String var = ""; + if (var == null) { + return null; + } + return var; + } + + String bar() { + String var = newMethod(); + if (var == null) return null; + System.out.println(var); + return var; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OverlappingDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/OverlappingDuplicate.java new file mode 100644 index 000000000000..8a58bf8921cf --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OverlappingDuplicate.java @@ -0,0 +1,13 @@ +public class OverlappingDuplicate { + private void build(String fieldName, StringBuilder builder) { + builder.append(""); + builder.append(fieldName); + builder.append(""); + + builder.append("a"); + builder.append("b"); + builder.append("c"); + builder.append("d"); + builder.append(""); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OverlappingDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/OverlappingDuplicate_after.java new file mode 100644 index 000000000000..4c072057954e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OverlappingDuplicate_after.java @@ -0,0 +1,17 @@ +public class OverlappingDuplicate { + private void build(String fieldName, StringBuilder builder) { + builder.append(""); + builder.append(fieldName); + builder.append(""); + + newMethod(builder); + builder.append(""); + } + + private void newMethod(StringBuilder builder) { + builder.append("a"); + builder.append("b"); + builder.append("c"); + builder.append("d"); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OverloadedMethods.java b/java/java-tests/testData/refactoring/extractMethodNew/OverloadedMethods.java new file mode 100644 index 000000000000..a951ea0568bf --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OverloadedMethods.java @@ -0,0 +1,21 @@ +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + + +public class Test { + public void myTest(List list, String s1, String s2) { + } + + public void myTest(Collection list, String s1, String s2) { + } + + public void usage() { + List list = new ArrayList(); + String aa = "AA"; + String bb = "bb"; + myTest(list, aa, bb); + Collection col = new ArrayList(); + myTest(col, aa, bb); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OverloadedMethods_after.java b/java/java-tests/testData/refactoring/extractMethodNew/OverloadedMethods_after.java new file mode 100644 index 000000000000..dd8e4c5ae446 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OverloadedMethods_after.java @@ -0,0 +1,25 @@ +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + + +public class Test { + public void myTest(List list, String s1, String s2) { + } + + public void myTest(Collection list, String s1, String s2) { + } + + public void usage() { + List list = new ArrayList(); + String aa = "AA"; + String bb = "bb"; + myTest(list, aa, bb); + Collection col = new ArrayList(); + newMethod(aa, bb, col); + } + + private void newMethod(String aa, String bb, Collection col) { + myTest(col, aa, bb); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OxfordBug.java b/java/java-tests/testData/refactoring/extractMethodNew/OxfordBug.java new file mode 100644 index 000000000000..b3ef4f7646eb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OxfordBug.java @@ -0,0 +1,13 @@ +class OxfordBug { + private int f(int m, int n) throws Exception { + int i = 0; + while (i < n) { + i++; + if (i == m) { + n += m; + throw new Exception("" + n); + } + } + return n; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/OxfordBug_after.java b/java/java-tests/testData/refactoring/extractMethodNew/OxfordBug_after.java new file mode 100644 index 000000000000..ab172bd71e84 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/OxfordBug_after.java @@ -0,0 +1,18 @@ +class OxfordBug { + private int f(int m, int n) throws Exception { + int i = 0; + while (i < n) { + i++; + n = newMethod(m, n, i); + } + return n; + } + + private int newMethod(int m, int n, int i) throws Exception { + if (i == m) { + n += m; + throw new Exception("" + n); + } + return n; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParamDetection.java b/java/java-tests/testData/refactoring/extractMethodNew/ParamDetection.java new file mode 100644 index 000000000000..2bef3d88687d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParamDetection.java @@ -0,0 +1,20 @@ +import java.util.*; + +class Test { + public void foo() { + List trades; + try { + trades = getTrades(); + } + catch (RemoteException e) { + } + + + //probably not assigned !!! + if (trades.isEmpty()) { + } + } + + static class RemoteException extends Exception { + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParamDetection_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParamDetection_after.java new file mode 100644 index 000000000000..8d826c51b59d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParamDetection_after.java @@ -0,0 +1,25 @@ +import java.util.*; + +class Test { + public void foo() { + List trades = newMethod(); + + + //probably not assigned !!! + if (trades.isEmpty()) { + } + } + + private List newMethod() { + List trades; + try { + trades = getTrades(); + } + catch (RemoteException e) { + } + return trades; + } + + static class RemoteException extends Exception { + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametersFromAnonymous.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametersFromAnonymous.java new file mode 100644 index 000000000000..fc9dc3af5e2d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametersFromAnonymous.java @@ -0,0 +1,12 @@ +class Test { + void f() { + new Runnable() { + public void run() { + int j = 0; + if (j == 0 && j < 0 && j > 0) { + assert false; + } + } + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametersFromAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametersFromAnonymous_after.java new file mode 100644 index 000000000000..8768dbc565af --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametersFromAnonymous_after.java @@ -0,0 +1,16 @@ +class Test { + void f() { + new Runnable() { + public void run() { + int j = 0; + if (j == 0 && newMethod(j)) { + assert false; + } + } + }; + } + + private boolean newMethod(int j) { + return j < 0 && j > 0; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredOutputVariable.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredOutputVariable.java new file mode 100644 index 000000000000..926aa7658136 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredOutputVariable.java @@ -0,0 +1,19 @@ +import java.util.List; + +class DeclaredOutputVariable { + void foo(List a) { + + String s = a.get(1); + if (s == null) return; + System.out.println(s.charAt(1)); + + System.out.println(s.length()); + } + + void bar(List a) { + String s = a.get(2); + if (s == null) return; + System.out.println(s.charAt(2)); + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredOutputVariable_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredOutputVariable_after.java new file mode 100644 index 000000000000..8e7e3d9ab6f8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredOutputVariable_after.java @@ -0,0 +1,27 @@ +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +class DeclaredOutputVariable { + void foo(List a) { + + String s = newMethod(a, 1); + if (s == null) return; + + System.out.println(s.length()); + } + + @Nullable + private String newMethod(List a, int i) { + String s = a.get(i); + if (s == null) return null; + System.out.println(s.charAt(i)); + return s; + } + + void bar(List a) { + String s = newMethod(a, 2); + if (s == null) return; + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredReusedVariable.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredReusedVariable.java new file mode 100644 index 000000000000..718ee239f0a6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredReusedVariable.java @@ -0,0 +1,21 @@ +import java.util.List; + +class DeclaredOutputVariable { + void foo(List a) { + + String s = a.get(1); + if (s == null) return; + System.out.println(s.charAt(1)); + + s = ""; + System.out.println(s.length()); + } + + void bar(List a) { + String s = a.get(2); + if (s == null) return; + System.out.println(s.charAt(2)); + s = ""; + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredReusedVariable_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredReusedVariable_after.java new file mode 100644 index 000000000000..1a68487e9031 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateDeclaredReusedVariable_after.java @@ -0,0 +1,26 @@ +import java.util.List; + +class DeclaredOutputVariable { + void foo(List a) { + + if (newMethod(a, 1)) return; + String s; + + s = ""; + System.out.println(s.length()); + } + + private boolean newMethod(List a, int i) { + String s = a.get(i); + if (s == null) return true; + System.out.println(s.charAt(i)); + return false; + } + + void bar(List a) { + if (newMethod(a, 2)) return; + String s; + s = ""; + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExactlyRepeatedArguments.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExactlyRepeatedArguments.java new file mode 100644 index 000000000000..793577290796 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExactlyRepeatedArguments.java @@ -0,0 +1,14 @@ +class C { + void foo(String s, StringBuilder b) { + b.append("repeated"); + b.append("repeated"); + b.append("repeated"); + + + b.append("a"); + b.append("a"); + b.append("a"); + + b.append("d"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExactlyRepeatedArguments_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExactlyRepeatedArguments_after.java new file mode 100644 index 000000000000..4d5a80fdb7f4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExactlyRepeatedArguments_after.java @@ -0,0 +1,16 @@ +class C { + void foo(String s, StringBuilder b) { + newMethod(b, "repeated"); + + + newMethod(b, "a"); + + b.append("d"); + } + + private void newMethod(StringBuilder b, String a) { + b.append(a); + b.append(a); + b.append(a); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExpression.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExpression.java new file mode 100644 index 000000000000..e794a9657c75 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExpression.java @@ -0,0 +1,11 @@ +class C { + void foo(String x, int a, int b) { + String s1 = sum(a, b).substring(2, Math.max(a, b)); + String s2 = sum(a, 0).substring(2, Math.min(a, b) + 1); + String s3 = x.substring(2, a - b); + } + + String sum(int a, int b) { + return a + " " + b; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExpression_after.java new file mode 100644 index 000000000000..8fd42700004e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateExpression_after.java @@ -0,0 +1,18 @@ +import org.jetbrains.annotations.NotNull; + +class C { + void foo(String x, int a, int b) { + String s1 = newMethod(sum(a, b), Math.max(a, b)); + String s2 = newMethod(sum(a, 0), Math.min(a, b) + 1); + String s3 = newMethod(x, a - b); + } + + @NotNull + private String newMethod(String sum, int max) { + return sum.substring(2, max); + } + + String sum(int a, int b) { + return a + " " + b; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElement.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElement.java new file mode 100644 index 000000000000..6ca4c501b336 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElement.java @@ -0,0 +1,17 @@ +class DeclaredOutputVariable { + void foo(String[] a, int j) { + + String s = a[j]; + if (s == null) return; + System.out.println(s.charAt(1) + "X"); + + System.out.println(s.length()); + } + + void bar(String[] a, int k) { + String s = a[k]; + if (s == null) return; + System.out.println(s.charAt(2) + "Y"); + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElementTwoUsages.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElementTwoUsages.java new file mode 100644 index 000000000000..055066698b42 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElementTwoUsages.java @@ -0,0 +1,17 @@ +class DeclaredOutputVariable { + void foo(String[] a, int j) { + + if (a[j] == null) return; + String s = a[j]; + System.out.println(s.charAt(1) + "X"); + + System.out.println(s.length()); + } + + void bar(String[] a, int k) { + if (a[k] == null) return; + String s = a[k]; + System.out.println(s.charAt(2) + "Y"); + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElementTwoUsages_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElementTwoUsages_after.java new file mode 100644 index 000000000000..f96fa63cb3f4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElementTwoUsages_after.java @@ -0,0 +1,25 @@ +import org.jetbrains.annotations.Nullable; + +class DeclaredOutputVariable { + void foo(String[] a, int j) { + + String s = newMethod(a, j, 1, "X"); + if (s == null) return; + + System.out.println(s.length()); + } + + @Nullable + private String newMethod(String[] a, int j, int i, String x) { + if (a[j] == null) return null; + String s = a[j]; + System.out.println(s.charAt(i) + x); + return s; + } + + void bar(String[] a, int k) { + String s = newMethod(a, k, 2, "Y"); + if (s == null) return; + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElement_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElement_after.java new file mode 100644 index 000000000000..0e01e0c96299 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldArrayElement_after.java @@ -0,0 +1,25 @@ +import org.jetbrains.annotations.Nullable; + +class DeclaredOutputVariable { + void foo(String[] a, int j) { + + String s = newMethod(a[j], 1, "X"); + if (s == null) return; + + System.out.println(s.length()); + } + + @Nullable + private String newMethod(String s1, int i, String x) { + String s = s1; + if (s == null) return null; + System.out.println(s.charAt(i) + x); + return s; + } + + void bar(String[] a, int k) { + String s = newMethod(a[k], 2, "Y"); + if (s == null) return; + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldListElement.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldListElement.java new file mode 100644 index 000000000000..b1489e483618 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldListElement.java @@ -0,0 +1,19 @@ +import java.util.List; + +class DeclaredOutputVariable { + void foo(List a, int j) { + + String s = a.get(j); + if (s == null) return; + System.out.println(s.charAt(1) + "X"); + + System.out.println(s.length()); + } + + void bar(List a, int k) { + String s = a.get(k); + if (s == null) return; + System.out.println(s.charAt(2) + "Y"); + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldListElement_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldListElement_after.java new file mode 100644 index 000000000000..984b752ef3c0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateFoldListElement_after.java @@ -0,0 +1,27 @@ +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +class DeclaredOutputVariable { + void foo(List a, int j) { + + String s = newMethod(a, j, 1, "X"); + if (s == null) return; + + System.out.println(s.length()); + } + + @Nullable + private String newMethod(List a, int j, int i, String x) { + String s = a.get(j); + if (s == null) return null; + System.out.println(s.charAt(i) + x); + return s; + } + + void bar(List a, int k) { + String s = newMethod(a, k, 2, "Y"); + if (s == null) return; + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateKeepSignature.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateKeepSignature.java new file mode 100644 index 000000000000..8cb7bb03c7e8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateKeepSignature.java @@ -0,0 +1,7 @@ +class KeepSignature { + void hello() { + System.out.println("Foo"); + System.out.println("Bar"); + System.out.println("Foo"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateKeepSignature_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateKeepSignature_after.java new file mode 100644 index 000000000000..1a34af5fff42 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateKeepSignature_after.java @@ -0,0 +1,11 @@ +class KeepSignature { + void hello() { + newMethod(); + System.out.println("Bar"); + newMethod(); + } + + private void newMethod() { + System.out.println("Foo"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateNestedSubexpression.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateNestedSubexpression.java new file mode 100644 index 000000000000..07b1b2fa6ef2 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateNestedSubexpression.java @@ -0,0 +1,13 @@ +class C { + public void foo(C c, long d, int i, String s) { + b(s, 1).m(d, i()); + b(s, i).m(d, k(d)); + c.m(d, i); + } + + private C b(String s, int i) { return new C(); } + void m(long d, int i) { } + + private int i() { return 0; } + private int k(long d) { return 0; } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateNestedSubexpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateNestedSubexpression_after.java new file mode 100644 index 000000000000..d5afb761f244 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateNestedSubexpression_after.java @@ -0,0 +1,17 @@ +class C { + public void foo(C c, long d, int i, String s) { + newMethod(d, s, 1, i()); + newMethod(d, s, i, k(d)); + c.m(d, i); + } + + private void newMethod(long d, String s, int i, int i2) { + b(s, i).m(d, i2); + } + + private C b(String s, int i) { return new C(); } + void m(long d, int i) { } + + private int i() { return 0; } + private int k(long d) { return 0; } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateRepeatedArguments.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateRepeatedArguments.java new file mode 100644 index 000000000000..e1dd6f88e954 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateRepeatedArguments.java @@ -0,0 +1,14 @@ +class C { + void foo(String s, StringBuilder b) { + b.append("repeated"); + b.append(s); + b.append("repeated"); + + + b.append("a"); + b.append("b"); + b.append("c"); + + b.append("d"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateRepeatedArguments_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateRepeatedArguments_after.java new file mode 100644 index 000000000000..2e3888055434 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateRepeatedArguments_after.java @@ -0,0 +1,16 @@ +class C { + void foo(String s, StringBuilder b) { + newMethod(b, "repeated", s, "repeated"); + + + newMethod(b, "a", "b", "c"); + + b.append("d"); + } + + private void newMethod(StringBuilder b, String a, String b2, String c) { + b.append(a); + b.append(b2); + b.append(c); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateTripleRepeatedArguments.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateTripleRepeatedArguments.java new file mode 100644 index 000000000000..90c047e93c1b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateTripleRepeatedArguments.java @@ -0,0 +1,16 @@ +class C { + void foo(String s, StringBuilder b) { + b.append("repeated"); + b.append("repeated"); + b.append(s); + b.append("repeated"); + + + b.append("a"); + b.append("b"); + b.append("b"); + b.append("c"); + + b.append("d"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateTripleRepeatedArguments_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateTripleRepeatedArguments_after.java new file mode 100644 index 000000000000..22d21134675a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateTripleRepeatedArguments_after.java @@ -0,0 +1,17 @@ +class C { + void foo(String s, StringBuilder b) { + newMethod(b, "repeated", "repeated", s, "repeated"); + + + newMethod(b, "a", "b", "b", "c"); + + b.append("d"); + } + + private void newMethod(StringBuilder b, String a, String b2, String b3, String c) { + b.append(a); + b.append(b2); + b.append(b3); + b.append(c); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateUnfoldArrayArgument.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateUnfoldArrayArgument.java new file mode 100644 index 000000000000..6246b72512d1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateUnfoldArrayArgument.java @@ -0,0 +1,17 @@ +class DeclaredOutputVariable { + void foo(String[] a) { + + String s = a[1]; + if (s == null) return; + System.out.println(s.charAt(1)); + + System.out.println(s.length()); + } + + void bar(String[] a) { + String s = a[2]; + if (s == null) return; + System.out.println(s.charAt(2)); + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateUnfoldArrayArgument_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateUnfoldArrayArgument_after.java new file mode 100644 index 000000000000..af976f4e3a07 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedDuplicateUnfoldArrayArgument_after.java @@ -0,0 +1,25 @@ +import org.jetbrains.annotations.Nullable; + +class DeclaredOutputVariable { + void foo(String[] a) { + + String s = newMethod(a, 1); + if (s == null) return; + + System.out.println(s.length()); + } + + @Nullable + private String newMethod(String[] a, int i) { + String s = a[i]; + if (s == null) return null; + System.out.println(s.charAt(i)); + return s; + } + + void bar(String[] a) { + String s = newMethod(a, 2); + if (s == null) return; + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedMultiDuplicatesFoldArrayElement.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedMultiDuplicatesFoldArrayElement.java new file mode 100644 index 000000000000..dc4106f275a4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedMultiDuplicatesFoldArrayElement.java @@ -0,0 +1,24 @@ +class DeclaredOutputVariable { + void foo(String[] a, int j) { + + String s = a[j]; + if (s == null) return; + System.out.println(s.charAt(1) + "X"); + + System.out.println(s.length()); + } + + void bar(String[] a, int k) { + String s = a[k]; + if (s == null) return; + System.out.println(s.charAt(2) + "Y"); + System.out.println(s.length()); + } + + void bar(String[] a, int n) { + String s = a[n]; + if (s == null) return; + System.out.println(s.charAt(1) + "Z"); + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedMultiDuplicatesFoldArrayElement_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedMultiDuplicatesFoldArrayElement_after.java new file mode 100644 index 000000000000..2fabd5de04ab --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParametrizedMultiDuplicatesFoldArrayElement_after.java @@ -0,0 +1,31 @@ +import org.jetbrains.annotations.Nullable; + +class DeclaredOutputVariable { + void foo(String[] a, int j) { + + String s = newMethod(a[j], 1, "X"); + if (s == null) return; + + System.out.println(s.length()); + } + + @Nullable + private String newMethod(String s1, int i, String x) { + String s = s1; + if (s == null) return null; + System.out.println(s.charAt(i) + x); + return s; + } + + void bar(String[] a, int k) { + String s = newMethod(a[k], 2, "Y"); + if (s == null) return; + System.out.println(s.length()); + } + + void bar(String[] a, int n) { + String s = newMethod(a[n], 1, "Z"); + if (s == null) return; + System.out.println(s.length()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParamsUsedInLocalClass.java b/java/java-tests/testData/refactoring/extractMethodNew/ParamsUsedInLocalClass.java new file mode 100644 index 000000000000..7103fb4f1a76 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParamsUsedInLocalClass.java @@ -0,0 +1,16 @@ +class A { + void foo() { + final int abc = 0; + boolean b = false; + + if (b) { + class T { + void bar() { + System.out.println(abc); + } + } + return; + } + System.out.println(""); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ParamsUsedInLocalClass_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ParamsUsedInLocalClass_after.java new file mode 100644 index 000000000000..c3268ef2b9c2 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ParamsUsedInLocalClass_after.java @@ -0,0 +1,21 @@ +class A { + void foo() { + final int abc = 0; + boolean b = false; + + if (newMethod(abc, b)) return; + System.out.println(""); + } + + private boolean newMethod(final int abc, boolean b) { + if (b) { + class T { + void bar() { + System.out.println(abc); + } + } + return true; + } + return false; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/PassFieldAsParameterAndMakeStatic.java b/java/java-tests/testData/refactoring/extractMethodNew/PassFieldAsParameterAndMakeStatic.java new file mode 100644 index 000000000000..41aad0a7358e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/PassFieldAsParameterAndMakeStatic.java @@ -0,0 +1,6 @@ +class X { + private int myI; + void foo() { + int i = this.myI; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/PassFieldAsParameterAndMakeStatic_after.java b/java/java-tests/testData/refactoring/extractMethodNew/PassFieldAsParameterAndMakeStatic_after.java new file mode 100644 index 000000000000..1ba4ed63953d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/PassFieldAsParameterAndMakeStatic_after.java @@ -0,0 +1,10 @@ +class X { + private int myI; + void foo() { + newMethod(myI); + } + + private static void newMethod(int myI) { + int i = myI; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/PatternVariable.java b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariable.java new file mode 100644 index 000000000000..2ceef69bc6c8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariable.java @@ -0,0 +1,7 @@ +class X { + void test(Object obj) { + if (obj instanceof String a) { + System.out.println(a.length()); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced.java b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced.java new file mode 100644 index 000000000000..6730e57e0f44 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced.java @@ -0,0 +1,7 @@ +class X { + void test(Object obj) { + if (obj instanceof String s && s.length() > 5) { + System.out.println(s); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced2.java b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced2.java new file mode 100644 index 000000000000..d29c9008cafb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced2.java @@ -0,0 +1,7 @@ +class X { + void test(Object obj) { + if (obj instanceof String s && s.length() > 5) { + System.out.println(s); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced3.java b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced3.java new file mode 100644 index 000000000000..e1964923d215 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced3.java @@ -0,0 +1,7 @@ +class X { + void test(Object obj) { + if (obj instanceof String s && s.length() > 5) { + System.out.println("found"); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced3_after.java b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced3_after.java new file mode 100644 index 000000000000..33cd40e7b8e6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariableIntroduced3_after.java @@ -0,0 +1,11 @@ +class X { + void test(Object obj) { + if (newMethod(obj)) { + System.out.println("found"); + } + } + + private boolean newMethod(Object obj) { + return obj instanceof String s && s.length() > 5; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/PatternVariable_after.java b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariable_after.java new file mode 100644 index 000000000000..fb2ef49b8387 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/PatternVariable_after.java @@ -0,0 +1,11 @@ +class X { + void test(Object obj) { + if (obj instanceof String a) { + System.out.println(newMethod(a)); + } + } + + private int newMethod(String a) { + return a.length(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/QualifyWhenConflictingNamePresent.java b/java/java-tests/testData/refactoring/extractMethodNew/QualifyWhenConflictingNamePresent.java new file mode 100644 index 000000000000..ab15ba3e6716 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/QualifyWhenConflictingNamePresent.java @@ -0,0 +1,11 @@ +class A { + public void newMethod() {} +} + +class B { + static class C extends A { + { + System.out.println(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/QualifyWhenConflictingNamePresent_after.java b/java/java-tests/testData/refactoring/extractMethodNew/QualifyWhenConflictingNamePresent_after.java new file mode 100644 index 000000000000..8892139ce8c5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/QualifyWhenConflictingNamePresent_after.java @@ -0,0 +1,15 @@ +class A { + public void newMethod() {} +} + +class B { + static class C extends A { + { + B.newMethod(); + } + } + + private void newMethod() { + System.out.println(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ReassignFinalFieldInside.java b/java/java-tests/testData/refactoring/extractMethodNew/ReassignFinalFieldInside.java new file mode 100644 index 000000000000..77c23b0535c3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ReassignFinalFieldInside.java @@ -0,0 +1,10 @@ +class X { + private final int i; + + public X() { + + i = 0; + System.out.println(i); + + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ReassignFinalFieldInside_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ReassignFinalFieldInside_after.java new file mode 100644 index 000000000000..d2eecd280597 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ReassignFinalFieldInside_after.java @@ -0,0 +1,16 @@ +class X { + private final int i; + + public X() { + + i = newMethod(); + + } + + private int newMethod() { + int i; + i = 0; + System.out.println(i); + return i; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ReassignedVarAfterCall.java b/java/java-tests/testData/refactoring/extractMethodNew/ReassignedVarAfterCall.java new file mode 100644 index 000000000000..852d0f8fbd40 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ReassignedVarAfterCall.java @@ -0,0 +1,8 @@ +class A { + public void test() { + int count=0; + for(int j=0; j<100; j++) count++; + count=0; + for(int j=0; j<100; j++) count++; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ReassignedVarAfterCall_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ReassignedVarAfterCall_after.java new file mode 100644 index 000000000000..d6e671b7e8bd --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ReassignedVarAfterCall_after.java @@ -0,0 +1,13 @@ +class A { + public void test() { + newMethod(); + int count; + count=0; + for(int j=0; j<100; j++) count++; + } + + private void newMethod() { + int count=0; + for(int j=0; j<100; j++) count++; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/RecursiveCallToExtracted.java b/java/java-tests/testData/refactoring/extractMethodNew/RecursiveCallToExtracted.java new file mode 100644 index 000000000000..a6a15ecc0bfc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/RecursiveCallToExtracted.java @@ -0,0 +1,8 @@ +public class ExtractMethods { + void newMethod() { + int i = 0; + if (true) { + newMethod(i); + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/RecursiveCallToExtracted_after.java b/java/java-tests/testData/refactoring/extractMethodNew/RecursiveCallToExtracted_after.java new file mode 100644 index 000000000000..a6ffda7c546d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/RecursiveCallToExtracted_after.java @@ -0,0 +1,12 @@ +public class ExtractMethods { + void newMethod() { + int i = 0; + newMethod(i); + } + + private void newMethod(int i) { + if (true) { + newMethod(i); + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/RedundantCast.java b/java/java-tests/testData/refactoring/extractMethodNew/RedundantCast.java new file mode 100644 index 000000000000..b2f77df6b46b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/RedundantCast.java @@ -0,0 +1,6 @@ +class Test { + void foo () { + int a = 1; + System.out.println("" + (Object)a); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/RedundantCast_after.java b/java/java-tests/testData/refactoring/extractMethodNew/RedundantCast_after.java new file mode 100644 index 000000000000..473819a56792 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/RedundantCast_after.java @@ -0,0 +1,10 @@ +class Test { + void foo () { + int a = 1; + newMethod(a); + } + + private void newMethod(Object a) { + System.out.println("" + a); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/RejectParametrizedDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/RejectParametrizedDuplicate.java new file mode 100644 index 000000000000..38e60c12593b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/RejectParametrizedDuplicate.java @@ -0,0 +1,8 @@ +import java.util.Map; + +class C { + void foo(Map m) { + m.put("a", 1); + m.put("b", 2); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/RejectParametrizedDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/RejectParametrizedDuplicate_after.java new file mode 100644 index 000000000000..a860f7c99576 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/RejectParametrizedDuplicate_after.java @@ -0,0 +1,12 @@ +import java.util.Map; + +class C { + void foo(Map m) { + newMethod(m); + m.put("b", 2); + } + + private void newMethod(Map m) { + m.put("a", 1); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ReturnFromTry.java b/java/java-tests/testData/refactoring/extractMethodNew/ReturnFromTry.java new file mode 100644 index 000000000000..c324de5954e8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ReturnFromTry.java @@ -0,0 +1,16 @@ +class A { + public String method() { + try { + try { + return ""; + } + finally { + System.out.println("f"); + } + } + catch (Error e) { + + } + return ""; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ReturnFromTry_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ReturnFromTry_after.java new file mode 100644 index 000000000000..ce3d365100e9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ReturnFromTry_after.java @@ -0,0 +1,23 @@ +import org.jetbrains.annotations.NotNull; + +class A { + public String method() { + try { + return newMethod(); + } + catch (Error e) { + + } + return ""; + } + + @NotNull + private String newMethod() { + try { + return ""; + } + finally { + System.out.println("f"); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ReturnStatementFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/ReturnStatementFolding.java new file mode 100644 index 000000000000..f99d1da27de7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ReturnStatementFolding.java @@ -0,0 +1,5 @@ +public class Test { + String foo(String[] s, int i) { + return s[i]; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ReturnStatementFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ReturnStatementFolding_after.java new file mode 100644 index 000000000000..9552d6220544 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ReturnStatementFolding_after.java @@ -0,0 +1,9 @@ +public class Test { + String foo(String[] s, int i) { + return newMethod(s, i); + } + + private String newMethod(String[] s, int i) { + return s[i]; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SCR12245.java b/java/java-tests/testData/refactoring/extractMethodNew/SCR12245.java new file mode 100644 index 000000000000..36f799bb5c4d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SCR12245.java @@ -0,0 +1,11 @@ +public class A { + private void foo() { + Runnable a = new Runnable() { + private int a; + + public void run() { + a = 2; + } + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SCR12245_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SCR12245_after.java new file mode 100644 index 000000000000..e7291744cb31 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SCR12245_after.java @@ -0,0 +1,15 @@ +public class A { + private void foo() { + Runnable a = new Runnable() { + private int a; + + public void run() { + newMethod(); + } + + private void newMethod() { + a = 2; + } + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SCR15815.java b/java/java-tests/testData/refactoring/extractMethodNew/SCR15815.java new file mode 100644 index 000000000000..fa7417f9bbc4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SCR15815.java @@ -0,0 +1,10 @@ +public class Foo { + static Foo + f1 = new Foo(){ + public String toString() { + return "a" + "b"; + } + }, + f2 = new Foo(){}; + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SCR15815_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SCR15815_after.java new file mode 100644 index 000000000000..9d0877031ae0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SCR15815_after.java @@ -0,0 +1,18 @@ +import org.jetbrains.annotations.NotNull; + +public class Foo { + static Foo + f1 = new Foo(){ + public String toString() { + return newMethod(); + } + }; + + @NotNull + private static String newMethod() { + return "a" + "b"; + } + + static Foo f2 = new Foo(){}; + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SCR27887.java b/java/java-tests/testData/refactoring/extractMethodNew/SCR27887.java new file mode 100644 index 000000000000..b4a7b33b021a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SCR27887.java @@ -0,0 +1,41 @@ +package extractMethod; + +import java.io.*; +import java.util.Iterator; + +public class SCR27887 { + public int publishx(OutputStream out, boolean includeCode) throws IOException { + if (VERBOSE) System.err.println("PUBLISH: publishing subsystem '" + subsystem.refQualifiedIdentifyingName() + "' with" + (includeCode ? "" : "out") + " code"); + ZippingXMLGeneratorFactory genFac = new ZippingXMLGeneratorFactory(out); +//======== + RefObjectUList included = makeIncludedSet(); + if (!included.isEmpty()) { + ScatteringDocBuilder docBuilder = new MyDocBuilder(repository, included); + new RepositorySaver(repository).saveTo(genFac, docBuilder); + } +//======== + if (includeCode) { + for (Iterator i = subsystem.getModule().iterator(); i.hasNext();) { + OptimalModule module = (OptimalModule) i.next(); + if (module.getPublished()) { + FileObject[] files = getModuleProducts(module); + if (files != null && files.length > 0) { + for (int j = 0; j < files.length; j++) { + FileObject file = files[j]; + OutputStream os = genFac.getOutputStream(file.getFileName()); + InputStream is = file.getInputStream(); + try { + copyStream(is, os); + } finally { + os.close(); + is.close(); + } + } + } + } + } + } + genFac.close(); + return included.size(); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SCR27887_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SCR27887_after.java new file mode 100644 index 000000000000..b2e5e3348534 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SCR27887_after.java @@ -0,0 +1,46 @@ +package extractMethod; + +import java.io.*; +import java.util.Iterator; + +public class SCR27887 { + public int publishx(OutputStream out, boolean includeCode) throws IOException { + if (VERBOSE) System.err.println("PUBLISH: publishing subsystem '" + subsystem.refQualifiedIdentifyingName() + "' with" + (includeCode ? "" : "out") + " code"); + ZippingXMLGeneratorFactory genFac = new ZippingXMLGeneratorFactory(out); +//======== + RefObjectUList included = newMethod(genFac); +//======== + if (includeCode) { + for (Iterator i = subsystem.getModule().iterator(); i.hasNext();) { + OptimalModule module = (OptimalModule) i.next(); + if (module.getPublished()) { + FileObject[] files = getModuleProducts(module); + if (files != null && files.length > 0) { + for (int j = 0; j < files.length; j++) { + FileObject file = files[j]; + OutputStream os = genFac.getOutputStream(file.getFileName()); + InputStream is = file.getInputStream(); + try { + copyStream(is, os); + } finally { + os.close(); + is.close(); + } + } + } + } + } + } + genFac.close(); + return included.size(); + } + + private RefObjectUList newMethod(ZippingXMLGeneratorFactory genFac) { + RefObjectUList included = makeIncludedSet(); + if (!included.isEmpty()) { + ScatteringDocBuilder docBuilder = new MyDocBuilder(repository, included); + new RepositorySaver(repository).saveTo(genFac, docBuilder); + } + return included; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SCR28427.java b/java/java-tests/testData/refactoring/extractMethodNew/SCR28427.java new file mode 100644 index 000000000000..5f91e0ca6a7a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SCR28427.java @@ -0,0 +1,5 @@ +class TestCase { + boolean a = true; + boolean b = false; + boolean x = a && b; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SCR28427_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SCR28427_after.java new file mode 100644 index 000000000000..aabffdfb488b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SCR28427_after.java @@ -0,0 +1,9 @@ +class TestCase { + boolean a = true; + boolean b = false; + boolean x = newMethod(); + + private boolean newMethod() { + return a && b; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SCR32924.java b/java/java-tests/testData/refactoring/extractMethodNew/SCR32924.java new file mode 100644 index 000000000000..1500589a1489 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SCR32924.java @@ -0,0 +1,6 @@ +public class Test { + void m() { + Object x = null; + System.out.println("x = " + x); // [...] = selection + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SCR32924_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SCR32924_after.java new file mode 100644 index 000000000000..edb9a94916c7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SCR32924_after.java @@ -0,0 +1,10 @@ +public class Test { + void m() { + Object x = null; + System.out.println("x = " + newMethod(x)); // [...] = selection + } + + private Object newMethod(Object x) { + return x; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SameAnnotations.java b/java/java-tests/testData/refactoring/extractMethodNew/SameAnnotations.java new file mode 100644 index 000000000000..df38a0616816 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SameAnnotations.java @@ -0,0 +1,19 @@ +class C { + { + @A(value="asdf") int i = 0; + System.out.println(i); + } + + void f() { + @A int j = 0; + System.out.println(j); + } + + void g() { + @A("asdf") int k = 0; + System.out.println(k); + } +} +@interface A { + String value() default "asdf"; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SameAnnotations_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SameAnnotations_after.java new file mode 100644 index 000000000000..adf49fceec02 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SameAnnotations_after.java @@ -0,0 +1,21 @@ +class C { + { + newMethod(); + } + + void f() { + newMethod(); + } + + private void newMethod() { + @A int j = 0; + System.out.println(j); + } + + void g() { + newMethod(); + } +} +@interface A { + String value() default "asdf"; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Scr10464.java b/java/java-tests/testData/refactoring/extractMethodNew/Scr10464.java new file mode 100644 index 000000000000..4e1d36314cba --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Scr10464.java @@ -0,0 +1,9 @@ +class Test { + public Object method() { + bar(); + return null; + } + + public void bar() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Scr10464_after.java b/java/java-tests/testData/refactoring/extractMethodNew/Scr10464_after.java new file mode 100644 index 000000000000..1cf0b588c23d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Scr10464_after.java @@ -0,0 +1,13 @@ +class Test { + public Object method() { + newMethod(); + return null; + } + + private void newMethod() { + bar(); + } + + public void bar() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Scr6241.java b/java/java-tests/testData/refactoring/extractMethodNew/Scr6241.java new file mode 100644 index 000000000000..e7c8a2ed2d99 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Scr6241.java @@ -0,0 +1,7 @@ +import java.util.*; + +class Test extends GregorianCalendar { + public boolean isSaturday() { + return get( Calendar.DAY_OF_WEEK ) == SATURDAY; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Scr6241_after.java b/java/java-tests/testData/refactoring/extractMethodNew/Scr6241_after.java new file mode 100644 index 000000000000..6dc9793981d6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Scr6241_after.java @@ -0,0 +1,11 @@ +import java.util.*; + +class Test extends GregorianCalendar { + public boolean isSaturday() { + return newMethod() == SATURDAY; + } + + private int newMethod() { + return get( Calendar.DAY_OF_WEEK ); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Scr7091.java b/java/java-tests/testData/refactoring/extractMethodNew/Scr7091.java new file mode 100644 index 000000000000..b625d62521b4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Scr7091.java @@ -0,0 +1,29 @@ +public class IdeaTestBug { + public static final int MAP_HEIGHT = 1000; + + Object[][] _map; + + public int checkAndRemoveConditions() { + int conditionsFound = 0; + for (int y = 0; y < MAP_HEIGHT; y++) { + while (isCheckCondition(y)) { + ++conditionsFound; + + final Object[] temp = _map[y]; + for (int x = 0; x < temp.length; x++) { + temp[x] = null; + } + for (int yy = y + 1; yy < MAP_HEIGHT; ++yy) { + _map[yy - 1] = _map[yy]; + } + _map[MAP_HEIGHT - 1] = temp; + } + } + return conditionsFound; + } + + private boolean isCheckCondition(int y) { + return false; + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Scr7091_after.java b/java/java-tests/testData/refactoring/extractMethodNew/Scr7091_after.java new file mode 100644 index 000000000000..da55234fb0b8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Scr7091_after.java @@ -0,0 +1,33 @@ +public class IdeaTestBug { + public static final int MAP_HEIGHT = 1000; + + Object[][] _map; + + public int checkAndRemoveConditions() { + int conditionsFound = 0; + for (int y = 0; y < MAP_HEIGHT; y++) { + while (isCheckCondition(y)) { + ++conditionsFound; + + newMethod(y); + } + } + return conditionsFound; + } + + private void newMethod(int y) { + final Object[] temp = _map[y]; + for (int x = 0; x < temp.length; x++) { + temp[x] = null; + } + for (int yy = y + 1; yy < MAP_HEIGHT; ++yy) { + _map[yy - 1] = _map[yy]; + } + _map[MAP_HEIGHT - 1] = temp; + } + + private boolean isCheckCondition(int y) { + return false; + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Scr9852.java b/java/java-tests/testData/refactoring/extractMethodNew/Scr9852.java new file mode 100644 index 000000000000..2ea69e412954 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Scr9852.java @@ -0,0 +1,9 @@ +class Test { + int f() { + try { + int k = 0; + return k; + } finally { + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/Scr9852_after.java b/java/java-tests/testData/refactoring/extractMethodNew/Scr9852_after.java new file mode 100644 index 000000000000..5d301c54b021 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/Scr9852_after.java @@ -0,0 +1,13 @@ +class Test { + int f() { + try { + return newMethod(); + } finally { + } + } + + private int newMethod() { + int k = 0; + return k; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ShortCircuit.java b/java/java-tests/testData/refactoring/extractMethodNew/ShortCircuit.java new file mode 100644 index 000000000000..e69e73361578 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ShortCircuit.java @@ -0,0 +1,6 @@ +public class Test { + void foo(String container) { + String parent; + if (container == null && (parent = null) != null && parent != null) {} + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ShortCircuit_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ShortCircuit_after.java new file mode 100644 index 000000000000..f3d7545c1c49 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ShortCircuit_after.java @@ -0,0 +1,10 @@ +public class Test { + void foo(String container) { + newMethod(container); + } + + private void newMethod(String container) { + String parent; + if (container == null && (parent = null) != null && parent != null) {} + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ShortenClassRefsInNewReturnType.java b/java/java-tests/testData/refactoring/extractMethodNew/ShortenClassRefsInNewReturnType.java new file mode 100644 index 000000000000..80fc8ee5008d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ShortenClassRefsInNewReturnType.java @@ -0,0 +1,8 @@ +import java.util.ArrayList; + +class Test { + Object foo() { + Object list = new ArrayList(); + return list; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ShortenClassRefsInNewReturnType_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ShortenClassRefsInNewReturnType_after.java new file mode 100644 index 000000000000..9dd120ab2db4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ShortenClassRefsInNewReturnType_after.java @@ -0,0 +1,16 @@ +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Collection; + +class Test { + Object foo() { + Object list = newMethod(); + return list; + } + + @NotNull + private Collection newMethod() { + return new ArrayList(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SimpleArrayAccess.java b/java/java-tests/testData/refactoring/extractMethodNew/SimpleArrayAccess.java new file mode 100644 index 000000000000..8a8b85f2e151 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SimpleArrayAccess.java @@ -0,0 +1,5 @@ +class Test { + void foo(String[] ss) { + System.out.println(ss[0]); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SimpleArrayAccess_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SimpleArrayAccess_after.java new file mode 100644 index 000000000000..c1e0b27e22cf --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SimpleArrayAccess_after.java @@ -0,0 +1,9 @@ +class Test { + void foo(String[] ss) { + newMethod(ss[0]); + } + + private void newMethod(String s) { + System.out.println(s); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SimpleMethodsInOneLine.java b/java/java-tests/testData/refactoring/extractMethodNew/SimpleMethodsInOneLine.java new file mode 100644 index 000000000000..f2f573262d76 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SimpleMethodsInOneLine.java @@ -0,0 +1,8 @@ +public class NewTestXl { + + public static void main(String[] args) { + int b = 100 + 1222; + System.out.println("ASfsdf"); + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SimpleMethodsInOneLine_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SimpleMethodsInOneLine_after.java new file mode 100644 index 000000000000..1d919ccb184c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SimpleMethodsInOneLine_after.java @@ -0,0 +1,12 @@ +public class NewTestXl { + + public static void main(String[] args) { + int b = newMethod(); + System.out.println("ASfsdf"); + } + + private static int newMethod() { + return 100 + 1222; + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SingleExitPOintWithTryFinally.java b/java/java-tests/testData/refactoring/extractMethodNew/SingleExitPOintWithTryFinally.java new file mode 100644 index 000000000000..87b625c5e88f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SingleExitPOintWithTryFinally.java @@ -0,0 +1,12 @@ +class C { + private void foo() { + System.out.println(); + try {} + finally { + while (true) { + break; + } + } + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SingleExitPOintWithTryFinally_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SingleExitPOintWithTryFinally_after.java new file mode 100644 index 000000000000..86a06fb7abad --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SingleExitPOintWithTryFinally_after.java @@ -0,0 +1,16 @@ +class C { + private void foo() { + System.out.println(); + newMethod(); + + } + + private void newMethod() { + try {} + finally { + while (true) { + break; + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SkipComments.java b/java/java-tests/testData/refactoring/extractMethodNew/SkipComments.java new file mode 100644 index 000000000000..67326c9207da --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SkipComments.java @@ -0,0 +1,5 @@ +class Test { + public static void main(String[] args) { + String arg = args[0]; //comment + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SkipComments_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SkipComments_after.java new file mode 100644 index 000000000000..cb8ea7ece801 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SkipComments_after.java @@ -0,0 +1,9 @@ +class Test { + public static void main(String[] args) { + String arg = newMethod(args); //comment + } + + private static String newMethod(String[] args) { + return args[0]; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SkipThrowsDeclaredInLambda.java b/java/java-tests/testData/refactoring/extractMethodNew/SkipThrowsDeclaredInLambda.java new file mode 100644 index 000000000000..6eb7f17d2622 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SkipThrowsDeclaredInLambda.java @@ -0,0 +1,20 @@ +import java.io.IOException; +class Issue { + + public static void main(String[] args) { + swallow(() -> { + throw new IOException(); + }); + } + + private static void swallow(ThrowsUnchecked r) { + try { + r.doAction(); + } catch (IOException ignored) { + } + } +} + +interface ThrowsUnchecked { + void doAction() throws IOException; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SkipThrowsDeclaredInLambda_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SkipThrowsDeclaredInLambda_after.java new file mode 100644 index 000000000000..1692f1efe987 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SkipThrowsDeclaredInLambda_after.java @@ -0,0 +1,24 @@ +import java.io.IOException; +class Issue { + + public static void main(String[] args) { + newMethod(); + } + + private static void newMethod() { + swallow(() -> { + throw new IOException(); + }); + } + + private static void swallow(ThrowsUnchecked r) { + try { + r.doAction(); + } catch (IOException ignored) { + } + } +} + +interface ThrowsUnchecked { + void doAction() throws IOException; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/StaticImport.java b/java/java-tests/testData/refactoring/extractMethodNew/StaticImport.java new file mode 100644 index 000000000000..ec79dd82e0d9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/StaticImport.java @@ -0,0 +1,7 @@ +import static java.lang.Integer.MAX_VALUE; + +class StaticImport { + void test() { + System.out.println(MAX_VALUE); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/StaticImport_after.java b/java/java-tests/testData/refactoring/extractMethodNew/StaticImport_after.java new file mode 100644 index 000000000000..7f24c0f5ac54 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/StaticImport_after.java @@ -0,0 +1,11 @@ +import static java.lang.Integer.MAX_VALUE; + +class StaticImport { + void test() { + newMethod(); + } + + private void newMethod() { + System.out.println(MAX_VALUE); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/StopFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/StopFolding.java new file mode 100644 index 000000000000..24ca2dc959b1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/StopFolding.java @@ -0,0 +1,55 @@ +class A { + public static void main(String[] args) { + StatDescriptor[] allStatMembers = new StatDescriptor[] {}; + WSStats[] allStats = new WSStats[] {}; + + StringBuffer sb = new StringBuffer(); + sb.append("All stat members found:\n"); + for (int i = 0; i < allStatMembers.length; i++) { + StatDescriptor statMember = allStatMembers[i]; + + + sb.append(statMember.toString()); + + sb.append(": ["); + + WSStatistic[] statistics = allStats[i].getStatistics(); + for (int j = 0; j < statistics.length; j++) { + WSStatistic statistic = statistics[j]; + sb.append(statistic.getId()). + append('='). + append(statistic.getName()); + if (j < statistics.length - 1) { + sb.append(", "); + } + } + + sb.append("]\n"); + + } + } + + private class StatDescriptor { + } + + private class WSStatistic { + private Object id; + private String name; + + public Object getId() { + return id; + } + + public String getName() { + return name; + } + } + + private class WSStats { + private WSStatistic[] statistics; + + public WSStatistic[] getStatistics() { + return statistics; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingForArrayWriteAccessInConsequentUsages.java b/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingForArrayWriteAccessInConsequentUsages.java new file mode 100644 index 000000000000..6ee554009948 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingForArrayWriteAccessInConsequentUsages.java @@ -0,0 +1,10 @@ +class Test { + void f(int size, int[] array) { + for (int i = 0; i < size; i++) { + int x = i; + int tmp = array[i]; + array[i] = array[x]; + array[x] = tmp; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingForArrayWriteAccessInConsequentUsages_after.java b/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingForArrayWriteAccessInConsequentUsages_after.java new file mode 100644 index 000000000000..fc892a6bb0f9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingForArrayWriteAccessInConsequentUsages_after.java @@ -0,0 +1,14 @@ +class Test { + void f(int size, int[] array) { + for (int i = 0; i < size; i++) { + int x = i; + newMethod(array, i, x); + } + } + + private void newMethod(int[] array, int i, int x) { + int tmp = array[i]; + array[i] = array[x]; + array[x] = tmp; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingPostfixInside.java b/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingPostfixInside.java new file mode 100644 index 000000000000..45bf3228c43b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingPostfixInside.java @@ -0,0 +1,10 @@ +public class Devk { + + void fr(String... params ) { + int idx = 0; + System.out.println(params[idx++]); + System.out.println(params[idx++]); + System.out.println(params[idx++]); + System.out.println(params[idx++]); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingPostfixInside_after.java b/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingPostfixInside_after.java new file mode 100644 index 000000000000..de629ec9daec --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/StopFoldingPostfixInside_after.java @@ -0,0 +1,14 @@ +public class Devk { + + void fr(String... params ) { + int idx = 0; + newMethod(idx, params); + } + + private void newMethod(int idx, String[] params) { + System.out.println(params[idx++]); + System.out.println(params[idx++]); + System.out.println(params[idx++]); + System.out.println(params[idx++]); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/StopFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/StopFolding_after.java new file mode 100644 index 000000000000..89ffe61f3e10 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/StopFolding_after.java @@ -0,0 +1,59 @@ +class A { + public static void main(String[] args) { + StatDescriptor[] allStatMembers = new StatDescriptor[] {}; + WSStats[] allStats = new WSStats[] {}; + + StringBuffer sb = new StringBuffer(); + sb.append("All stat members found:\n"); + for (int i = 0; i < allStatMembers.length; i++) { + StatDescriptor statMember = allStatMembers[i]; + + + newMethod(allStats[i], sb, statMember); + + } + } + + private static void newMethod(WSStats allStat, StringBuffer sb, StatDescriptor statMember) { + sb.append(statMember.toString()); + + sb.append(": ["); + + WSStatistic[] statistics = allStat.getStatistics(); + for (int j = 0; j < statistics.length; j++) { + WSStatistic statistic = statistics[j]; + sb.append(statistic.getId()). + append('='). + append(statistic.getName()); + if (j < statistics.length - 1) { + sb.append(", "); + } + } + + sb.append("]\n"); + } + + private class StatDescriptor { + } + + private class WSStatistic { + private Object id; + private String name; + + public Object getId() { + return id; + } + + public String getName() { + return name; + } + } + + private class WSStats { + private WSStatistic[] statistics; + + public WSStatistic[] getStatistics() { + return statistics; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureCallToSameClassMethod.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureCallToSameClassMethod.java new file mode 100644 index 000000000000..6f8f57f23dd8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureCallToSameClassMethod.java @@ -0,0 +1,12 @@ +class B { + void readFile(String s, Class c) {} + + { + + readFile("foo", B.class); + this.readFile("foo", B.class); + + readFile("bar", B.class); + this.readFile("bar", B.class); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureCallToSameClassMethod_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureCallToSameClassMethod_after.java new file mode 100644 index 000000000000..27589a380aa8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureCallToSameClassMethod_after.java @@ -0,0 +1,15 @@ +class B { + void readFile(String s, Class c) {} + + { + + newMethod("foo"); + + newMethod("bar"); + } + + private void newMethod(String foo) { + readFile(foo, B.class); + this.readFile(foo, B.class); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureEqualConstExprFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureEqualConstExprFolding.java new file mode 100644 index 000000000000..9e3586b51a9f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureEqualConstExprFolding.java @@ -0,0 +1,16 @@ +class C { + public static final int A = 4 - 1; + public static final int B = 4 + 2; + + void foo(int x) { + + if(x == A + 1) + bar(A + 1); + + + if(x == B - 2) + bar(B - 2); + } + + void bar(int n) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureEqualConstExprFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureEqualConstExprFolding_after.java new file mode 100644 index 000000000000..b6a068f68dcc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureEqualConstExprFolding_after.java @@ -0,0 +1,19 @@ +class C { + public static final int A = 4 - 1; + public static final int B = 4 + 2; + + void foo(int x) { + + newMethod(x, A + 1); + + + newMethod(x, B - 2); + } + + private void newMethod(int x, int i) { + if (x == i) + bar(i); + } + + void bar(int n) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoLiteralFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoLiteralFolding.java new file mode 100644 index 000000000000..1a37881c594f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoLiteralFolding.java @@ -0,0 +1,23 @@ +public class C { + void second() { + test(0); + test(1); + } + + void none() { + test(0); + test(0); + } + + void both() { + test(1); + test(1); + } + + void first() { + test(1); + test(0); + } + + private void test(int i) {} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoLiteralFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoLiteralFolding_after.java new file mode 100644 index 000000000000..74791e9410e1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoLiteralFolding_after.java @@ -0,0 +1,24 @@ +public class C { + void second() { + newMethod(0, 1); + } + + private void newMethod(int i, int i2) { + test(i); + test(i2); + } + + void none() { + newMethod(0, 0); + } + + void both() { + newMethod(1, 1); + } + + void first() { + newMethod(1, 0); + } + + private void test(int i) {} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoVariableFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoVariableFolding.java new file mode 100644 index 000000000000..69779cf140fc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoVariableFolding.java @@ -0,0 +1,27 @@ +public class C { + void both() { + int x=0,y=0; + a(x);b(y); + a(y);b(x); + } + + void first() { + int k=0; + a(k);b(1); + a(1);b(k); + } + + void second() { + int m=1; + a(0);b(m); + a(m);b(0); + } + + void baz(int e, int f) { + a(e);b(f); + a(f);b(e); + } + + private void a(int i) {} + private void b(int n) {} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoVariableFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoVariableFolding_after.java new file mode 100644 index 000000000000..323981afddcc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureFourOccurrencesTwoVariableFolding_after.java @@ -0,0 +1,30 @@ +public class C { + void both() { + int x=0,y=0; + newMethod(y, x); + } + + void first() { + int k=0; + newMethod(1, k); + } + + void second() { + int m=1; + newMethod(m, 0); + } + + private void newMethod(int m, int i) { + a(i); + b(m); + a(m); + b(i); + } + + void baz(int e, int f) { + newMethod(f, e); + } + + private void a(int i) {} + private void b(int n) {} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureInitialParameterUnused.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureInitialParameterUnused.java new file mode 100644 index 000000000000..7655648786e6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureInitialParameterUnused.java @@ -0,0 +1,9 @@ +public class Test { + { + int x = 0; + + System.out.println("foo".substring(x)); + + System.out.println("bar".substring(x)); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureInitialParameterUnused_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureInitialParameterUnused_after.java new file mode 100644 index 000000000000..083b20d5cf62 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureInitialParameterUnused_after.java @@ -0,0 +1,13 @@ +public class Test { + { + int x = 0; + + newMethod(x, "foo"); + + newMethod(x, "bar"); + } + + private void newMethod(int x, String foo) { + System.out.println(foo.substring(x)); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLeaveSameExpressionsUntouched.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLeaveSameExpressionsUntouched.java new file mode 100644 index 000000000000..ad1e6d5f632c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLeaveSameExpressionsUntouched.java @@ -0,0 +1,13 @@ +public class Test { + { + int x = 0; + + System.out.println("foo"); + System.out.println("bazz"); + System.out.println(x); + + System.out.println("bar"); + System.out.println("bazz"); + System.out.println(x); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLeaveSameExpressionsUntouched_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLeaveSameExpressionsUntouched_after.java new file mode 100644 index 000000000000..db07aa54c3a8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLeaveSameExpressionsUntouched_after.java @@ -0,0 +1,15 @@ +public class Test { + { + int x = 0; + + newMethod(x, "foo"); + + newMethod(x, "bar"); + } + + private void newMethod(int x, String foo) { + System.out.println(foo); + System.out.println("bazz"); + System.out.println(x); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLongConstExprFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLongConstExprFolding.java new file mode 100644 index 000000000000..1786233ab6e7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLongConstExprFolding.java @@ -0,0 +1,18 @@ +class C { + public static final int A = 1, B = 2, C = 3, D = 4, E = 5; + + void foo(int x) { + + if (x >= A + B + C + D + E + 1) + bar("A" + "B" + "C" + "D" + "E" + 1); + + + if (x >= A + B + C + D + E + 2) + bar("A" + "B" + "C" + "D" + "E" + 2); + + if (x <= A + B + C + D + E + 2) + bar("A" + "B" + "C" + "D" + "E" + 2); + } + + void bar(String s) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLongConstExprFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLongConstExprFolding_after.java new file mode 100644 index 000000000000..d319eda7d60b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureLongConstExprFolding_after.java @@ -0,0 +1,21 @@ +class C { + public static final int A = 1, B = 2, C = 3, D = 4, E = 5; + + void foo(int x) { + + newMethod(x, 1); + + + newMethod(x, 2); + + if (x <= A + B + C + D + E + 2) + bar("A" + "B" + "C" + "D" + "E" + 2); + } + + private void newMethod(int x, int i) { + if (x >= A + B + C + D + E + i) + bar("A" + "B" + "C" + "D" + "E" + i); + } + + void bar(String s) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParam.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParam.java new file mode 100644 index 000000000000..47681845c571 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParam.java @@ -0,0 +1,11 @@ +public class Test { + { + int x = 0; + + System.out.println("foo"); + System.out.println(x); + + System.out.println("bar"); + System.out.println(x); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParamMultipleTimesInside.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParamMultipleTimesInside.java new file mode 100644 index 000000000000..a345233a9c37 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParamMultipleTimesInside.java @@ -0,0 +1,13 @@ +public class Test { + { + int x = 0; + + System.out.println("foo"); + System.out.println("foo"); + System.out.println(x); + + System.out.println("bar"); + System.out.println("bar"); + System.out.println(x); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParamMultipleTimesInside_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParamMultipleTimesInside_after.java new file mode 100644 index 000000000000..c6d3c785933b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParamMultipleTimesInside_after.java @@ -0,0 +1,15 @@ +public class Test { + { + int x = 0; + + newMethod(x, "foo"); + + newMethod(x, "bar"); + } + + private void newMethod(int x, String foo) { + System.out.println(foo); + System.out.println(foo); + System.out.println(x); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParam_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParam_after.java new file mode 100644 index 000000000000..ef16acc2489b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureOneParam_after.java @@ -0,0 +1,14 @@ +public class Test { + { + int x = 0; + + newMethod(x, "foo"); + + newMethod(x, "bar"); + } + + private void newMethod(int x, String foo) { + System.out.println(foo); + System.out.println(x); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignaturePlusOneFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignaturePlusOneFolding.java new file mode 100644 index 000000000000..33d842ba2cd1 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignaturePlusOneFolding.java @@ -0,0 +1,15 @@ +import java.util.ArrayList; +import java.util.List; + +public class C { + List list = new ArrayList<>(); + + void foo(int index) { + list.get(index); + + list.get(index + 1); + } + void bar() { + list.get(1-2); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignaturePlusOneFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignaturePlusOneFolding_after.java new file mode 100644 index 000000000000..848aa27c6438 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignaturePlusOneFolding_after.java @@ -0,0 +1,20 @@ +import java.util.ArrayList; +import java.util.List; + +public class C { + List list = new ArrayList<>(); + + void foo(int index) { + newMethod(index); + + newMethod(index + 1); + } + + private String newMethod(int i) { + return list.get(i); + } + + void bar() { + newMethod(1-2); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameParamNames.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameParamNames.java new file mode 100644 index 000000000000..ebb9e5910770 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameParamNames.java @@ -0,0 +1,13 @@ +public class Test { + { + int x = 0; + + System.out.println(1); + System.out.println(2); + System.out.println(x); + + System.out.println(3); + System.out.println(4); + System.out.println(x); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameParamNames_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameParamNames_after.java new file mode 100644 index 000000000000..d2665950376c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameParamNames_after.java @@ -0,0 +1,15 @@ +public class Test { + { + int x = 0; + + newMethod(x, 1, 2); + + newMethod(x, 3, 4); + } + + private void newMethod(int x, int i, int i2) { + System.out.println(i); + System.out.println(i2); + System.out.println(x); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpression.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpression.java new file mode 100644 index 000000000000..13a334488633 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpression.java @@ -0,0 +1,11 @@ +class Node { + String getType() { return ""; } + + String foo(Node left, Node right) { + String leftType = left.getType().substring(1); + String rightType = right.getType().substring(1); + + String type = "A".substring(1); + return leftType + rightType + type; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpressionWholeLine.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpressionWholeLine.java new file mode 100644 index 000000000000..34b6485ceeab --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpressionWholeLine.java @@ -0,0 +1,11 @@ +class Node { + String getType() { return ""; } + + String foo(Node left, Node right) { + String leftType = left.getType().substring(1); + String rightType = right.getType().substring(1); //line comment + + String type = "A".substring(1); + return leftType + rightType + type; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpressionWholeLine_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpressionWholeLine_after.java new file mode 100644 index 000000000000..39149aa7865c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpressionWholeLine_after.java @@ -0,0 +1,18 @@ +import org.jetbrains.annotations.NotNull; + +class Node { + String getType() { return ""; } + + String foo(Node left, Node right) { + String leftType = newMethod(left.getType()); + String rightType = newMethod(right.getType()); + + String type = newMethod("A"); + return leftType + rightType + type; + } + + @NotNull + private String newMethod(String type2) { + return type2.substring(1); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpression_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpression_after.java new file mode 100644 index 000000000000..ac6a2e17f2a3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureSameSubexpression_after.java @@ -0,0 +1,18 @@ +import org.jetbrains.annotations.NotNull; + +class Node { + String getType() { return ""; } + + String foo(Node left, Node right) { + String leftType = newMethod(left.getType()); + String rightType = newMethod(right.getType()); + + String type = newMethod("A"); + return leftType + rightType + type; + } + + @NotNull + private String newMethod(String type2) { + return type2.substring(1); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoLiteralFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoLiteralFolding.java new file mode 100644 index 000000000000..614473b551a8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoLiteralFolding.java @@ -0,0 +1,18 @@ +public class C { + void second() { + test(0); + test(1); + } + + void none() { + test(0); + test(0); + } + + void both() { + test(1); + test(1); + } + + private void test(int i) {} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoLiteralFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoLiteralFolding_after.java new file mode 100644 index 000000000000..78aa719b7610 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoLiteralFolding_after.java @@ -0,0 +1,20 @@ +public class C { + void second() { + newMethod(0, 1); + } + + private void newMethod(int i, int i2) { + test(i); + test(i2); + } + + void none() { + newMethod(0, 0); + } + + void both() { + newMethod(1, 1); + } + + private void test(int i) {} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoVariableFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoVariableFolding.java new file mode 100644 index 000000000000..b59032f4aa49 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoVariableFolding.java @@ -0,0 +1,21 @@ +public class C { + void foo() { + int x=0,y=0; + a(x);b(y); + a(y);b(x); + } + + void bar() { + int k=0,m=1; + a(k);b(m); + a(m);b(k); + } + + void baz(int e, int f) { + a(e);b(f); + a(f);b(e); + } + + private void a(int i) {} + private void b(int n) {} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoVariableFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoVariableFolding_after.java new file mode 100644 index 000000000000..92076be7ae14 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureThreeOccurrencesTwoVariableFolding_after.java @@ -0,0 +1,25 @@ +public class C { + void foo() { + int x=0,y=0; + newMethod(x, y); + } + + private void newMethod(int x, int y) { + a(x); + b(y); + a(y); + b(x); + } + + void bar() { + int k=0,m=1; + newMethod(k, m); + } + + void baz(int e, int f) { + newMethod(e, f); + } + + private void a(int i) {} + private void b(int n) {} +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTrivialMethod.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTrivialMethod.java new file mode 100644 index 000000000000..bf611a5c6696 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTrivialMethod.java @@ -0,0 +1,11 @@ +class Node { + String getType() { return ""; } + + String foo(Node left, Node right) { + String leftType = left.getType(); + String rightType = (right.getType()); + + String type = "A"; + return leftType + rightType + type; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTrivialMethod_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTrivialMethod_after.java new file mode 100644 index 000000000000..09c5404160eb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTrivialMethod_after.java @@ -0,0 +1,15 @@ +class Node { + String getType() { return ""; } + + String foo(Node left, Node right) { + String leftType = newMethod(left); + String rightType = newMethod(right); + + String type = "A"; + return leftType + rightType + type; + } + + private String newMethod(Node right) { + return right.getType(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTwoFieldInitializers.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTwoFieldInitializers.java new file mode 100644 index 000000000000..16ac33bb4d3a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTwoFieldInitializers.java @@ -0,0 +1,4 @@ +public class C { + String f1 = "a" + "b"; + String f2 = "c" + "b"; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTwoFieldInitializers_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTwoFieldInitializers_after.java new file mode 100644 index 000000000000..4e8099d93c1e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureTwoFieldInitializers_after.java @@ -0,0 +1,12 @@ +import org.jetbrains.annotations.NotNull; + +public class C { + String f1 = newMethod("a"); + + @NotNull + private String newMethod(String a) { + return a + "b"; + } + + String f2 = newMethod("c"); +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureVoidCallFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureVoidCallFolding.java new file mode 100644 index 000000000000..4bc80ee7a5ac --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureVoidCallFolding.java @@ -0,0 +1,15 @@ +import java.util.ArrayList; +import java.util.List; + +public class C { + List list = new ArrayList<>(); + + void foo(int index) { + System.out.println(list.get(index)); + + System.out.println(list.get(index + 1)); + } + void bar() { + System.out.println(list.get(1-2)); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureVoidCallFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureVoidCallFolding_after.java new file mode 100644 index 000000000000..dfb8115b9cba --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureVoidCallFolding_after.java @@ -0,0 +1,20 @@ +import java.util.ArrayList; +import java.util.List; + +public class C { + List list = new ArrayList<>(); + + void foo(int index) { + newMethod(index); + + newMethod(index + 1); + } + + private void newMethod(int i) { + System.out.println(list.get(i)); + } + + void bar() { + newMethod(1-2); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithArrayFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithArrayFolding.java new file mode 100644 index 000000000000..b10ee64b020e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithArrayFolding.java @@ -0,0 +1,6 @@ +class Test { + public static void main(String[] args, int i) { + System.out.println("hi"); + System.out.println(args[i]); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithArrayFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithArrayFolding_after.java new file mode 100644 index 000000000000..dc1a71690f50 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithArrayFolding_after.java @@ -0,0 +1,10 @@ +class Test { + public static void main(String[] args, int i) { + newMethod("hi"); + newMethod(args[i]); + } + + private static void newMethod(String hi) { + System.out.println(hi); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithChangedParameterName.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithChangedParameterName.java new file mode 100644 index 000000000000..2445f2264db8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithChangedParameterName.java @@ -0,0 +1,13 @@ +public class Test { + { + int x = 0; + + + System.out.println(x); + System.out.println(x + 1); + + + System.out.println(x); + System.out.println(x + 2); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithChangedParameterName_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithChangedParameterName_after.java new file mode 100644 index 000000000000..53f09a3352f0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithChangedParameterName_after.java @@ -0,0 +1,16 @@ +public class Test { + { + int x = 0; + + + newMethod(x, 1); + + + newMethod(x, 2); + } + + private void newMethod(int p, int i) { + System.out.println(p); + System.out.println(p + i); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithFolding.java new file mode 100644 index 000000000000..1c9ecf750938 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithFolding.java @@ -0,0 +1,6 @@ +class Test { + public static void main(String[] args, int i) { + System.out.println("hi"); + System.out.println("world, " + args[i]); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithFolding_after.java new file mode 100644 index 000000000000..5ce16f25514e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithFolding_after.java @@ -0,0 +1,10 @@ +class Test { + public static void main(String[] args, int i) { + newMethod("hi"); + newMethod("world, " + args[i]); + } + + private static void newMethod(String s) { + System.out.println(s); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithGetterFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithGetterFolding.java new file mode 100644 index 000000000000..78ca0dddcabf --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithGetterFolding.java @@ -0,0 +1,8 @@ +import java.util.List; + +class Test { + public static void foo(List args, int i) { + System.out.println("hi"); + System.out.println(args.get(i)); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithGetterFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithGetterFolding_after.java new file mode 100644 index 000000000000..99c31a02848d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithGetterFolding_after.java @@ -0,0 +1,12 @@ +import java.util.List; + +class Test { + public static void foo(List args, int i) { + newMethod("hi"); + newMethod(args.get(i)); + } + + private static void newMethod(String hi) { + System.out.println(hi); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithMultiFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithMultiFolding.java new file mode 100644 index 000000000000..3ba8dd73c499 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithMultiFolding.java @@ -0,0 +1,13 @@ +import java.util.List; + +class Test { + void foo(String[] a, List b) { + for (int i = 0; i < a.length; i++) { + System.out.println("a:" + a[i]); + } + + for (int i = 0; i < b.size(); i++) { + System.out.println("b:" + b.get(i)); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithMultiFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithMultiFolding_after.java new file mode 100644 index 000000000000..1638eee50596 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithMultiFolding_after.java @@ -0,0 +1,17 @@ +import java.util.List; + +class Test { + void foo(String[] a, List b) { + for (int i = 0; i < a.length; i++) { + newMethod("a:", a[i]); + } + + for (int i = 0; i < b.size(); i++) { + newMethod("b:", b.get(i)); + } + } + + private void newMethod(String s, String s2) { + System.out.println(s + s2); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithOutputVariables.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithOutputVariables.java new file mode 100644 index 000000000000..39e20b3fb1a5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithOutputVariables.java @@ -0,0 +1,25 @@ + +class Test { + + private String getRevenue() { + final String query = createNamedQuery("revenues"); + String revenues = ""; + final String revenue; + revenue = "a"; + + return revenue; + } + + public String getExpense() { + final String query = createNamedQuery("expenses"); + String expenses = ""; + final String expense; + expense = "a"; + + return expense; + } + + private String createNamedQuery(String expenses) { + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithOutputVariables_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithOutputVariables_after.java new file mode 100644 index 000000000000..793b17bc2350 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithOutputVariables_after.java @@ -0,0 +1,29 @@ +import org.jetbrains.annotations.NotNull; + +class Test { + + private String getRevenue() { + final String revenue = newMethod("revenues"); + + return revenue; + } + + @NotNull + private String newMethod(String revenues2) { + final String query = createNamedQuery(revenues2); + String revenues = ""; + final String revenue; + revenue = "a"; + return revenue; + } + + public String getExpense() { + final String expense = newMethod("expenses"); + + return expense; + } + + private String createNamedQuery(String expenses) { + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithTwoWayFolding.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithTwoWayFolding.java new file mode 100644 index 000000000000..69afe34330d4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithTwoWayFolding.java @@ -0,0 +1,13 @@ +import java.util.List; + +class Test { + void foo(String[] a, List b) { + for (int i = 0; i < a.length; i++) { + System.out.println(a[i]); + } + + for (int i = 0; i < b.size(); i++) { + System.out.println(b.get(i)); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithTwoWayFolding_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithTwoWayFolding_after.java new file mode 100644 index 000000000000..a0c0bee6199b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/SuggestChangeSignatureWithTwoWayFolding_after.java @@ -0,0 +1,17 @@ +import java.util.List; + +class Test { + void foo(String[] a, List b) { + for (int i = 0; i < a.length; i++) { + newMethod(a[i]); + } + + for (int i = 0; i < b.size(); i++) { + newMethod(b.get(i)); + } + } + + private void newMethod(String s) { + System.out.println(s); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TargetAnonymous.java b/java/java-tests/testData/refactoring/extractMethodNew/TargetAnonymous.java new file mode 100644 index 000000000000..fa5180a881bb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TargetAnonymous.java @@ -0,0 +1,13 @@ +public class Foo { + public void update() {} +} + +class FooBar { + { + Foo tm = new Foo() { + { + update(); + } + }; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TargetAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethodNew/TargetAnonymous_after.java new file mode 100644 index 000000000000..575b821c069c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TargetAnonymous_after.java @@ -0,0 +1,17 @@ +public class Foo { + public void update() {} +} + +class FooBar { + { + Foo tm = new Foo() { + { + newMethod(); + } + + private void newMethod() { + update(); + } + }; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TheOnlyParenthesisExpressionWhichIsSkippedInControlFlow.java b/java/java-tests/testData/refactoring/extractMethodNew/TheOnlyParenthesisExpressionWhichIsSkippedInControlFlow.java new file mode 100644 index 000000000000..c85bc6be35f4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TheOnlyParenthesisExpressionWhichIsSkippedInControlFlow.java @@ -0,0 +1,7 @@ +class Test { + { + int i = 2; + int n = 5; + boolean b = !(i < n); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TheOnlyParenthesisExpressionWhichIsSkippedInControlFlow_after.java b/java/java-tests/testData/refactoring/extractMethodNew/TheOnlyParenthesisExpressionWhichIsSkippedInControlFlow_after.java new file mode 100644 index 000000000000..f4133240b547 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TheOnlyParenthesisExpressionWhichIsSkippedInControlFlow_after.java @@ -0,0 +1,11 @@ +class Test { + { + int i = 2; + int n = 5; + boolean b = !newMethod(i, n); + } + + private boolean newMethod(int i, int n) { + return i < n; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ThisCall.java b/java/java-tests/testData/refactoring/extractMethodNew/ThisCall.java new file mode 100644 index 000000000000..163bcadec5d7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ThisCall.java @@ -0,0 +1,8 @@ +public class A { + A(String s) { + } + + A() { + this("a"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/ThisCall_after.java b/java/java-tests/testData/refactoring/extractMethodNew/ThisCall_after.java new file mode 100644 index 000000000000..5f954d13db6e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/ThisCall_after.java @@ -0,0 +1,15 @@ +import org.jetbrains.annotations.NotNull; + +public class A { + A(String s) { + } + + A() { + this(newMethod()); + } + + @NotNull + private static String newMethod() { + return "a"; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TripleParametrizedDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/TripleParametrizedDuplicate.java new file mode 100644 index 000000000000..89d12ad7c272 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TripleParametrizedDuplicate.java @@ -0,0 +1,16 @@ +import java.util.Arrays; + +class Triple { + void foo(int... x) { + + System.out.println(Arrays.toString(x)); // original fragment + System.out.println(1); + + + System.out.println(Arrays.toString(x)); // first duplicate + System.out.println(2); + + System.out.println(Arrays.toString(new int[]{})); // second duplicate + System.out.println(1); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TripleParametrizedDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/TripleParametrizedDuplicate_after.java new file mode 100644 index 000000000000..f060dede43bf --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TripleParametrizedDuplicate_after.java @@ -0,0 +1,18 @@ +import java.util.Arrays; + +class Triple { + void foo(int... x) { + + newMethod(x, 1); + + + newMethod(x, 2); + + newMethod(new int[]{}, 1); + } + + private void newMethod(int[] x, int i) { + System.out.println(Arrays.toString(x)); // original fragment + System.out.println(i); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TryFinally.java b/java/java-tests/testData/refactoring/extractMethodNew/TryFinally.java new file mode 100644 index 000000000000..0a633e474c1c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TryFinally.java @@ -0,0 +1,13 @@ +class TryFinally { + int method() { + String s = "abcd"; + + StringBuffer buffer = new StringBuffer(); + try { + buffer.append(s); + return buffer.length(); + } finally { + buffer.clear(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TryFinallyInsideFor.java b/java/java-tests/testData/refactoring/extractMethodNew/TryFinallyInsideFor.java new file mode 100644 index 000000000000..d6e93052e457 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TryFinallyInsideFor.java @@ -0,0 +1,17 @@ +package extractMethod; + +import java.io.*; +import java.util.Iterator; + +public class SCR27887 { + public int publishx(OutputStream out, boolean includeCode) throws IOException { + ScatteringDocBuilder docBuilder = new MyDocBuilder(repository, included); + while(true){ + OutputStream os = null; + try { + } finally { + os.close(); + } + } + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TryFinallyInsideFor_after.java b/java/java-tests/testData/refactoring/extractMethodNew/TryFinallyInsideFor_after.java new file mode 100644 index 000000000000..1b5cd973b324 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TryFinallyInsideFor_after.java @@ -0,0 +1,21 @@ +package extractMethod; + +import java.io.*; +import java.util.Iterator; + +public class SCR27887 { + public int publishx(OutputStream out, boolean includeCode) throws IOException { + newMethod(); + while(true){ + OutputStream os = null; + try { + } finally { + os.close(); + } + } + } + + private void newMethod() { + ScatteringDocBuilder docBuilder = new MyDocBuilder(repository, included); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TryFinally_after.java b/java/java-tests/testData/refactoring/extractMethodNew/TryFinally_after.java new file mode 100644 index 000000000000..b4b7112c389d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TryFinally_after.java @@ -0,0 +1,17 @@ +class TryFinally { + int method() { + String s = "abcd"; + + return newMethod(s); + } + + private int newMethod(String s) { + StringBuffer buffer = new StringBuffer(); + try { + buffer.append(s); + return buffer.length(); + } finally { + buffer.clear(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TwoFromThreeEqStatements.java b/java/java-tests/testData/refactoring/extractMethodNew/TwoFromThreeEqStatements.java new file mode 100644 index 000000000000..1be735566224 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TwoFromThreeEqStatements.java @@ -0,0 +1,8 @@ +class Test { + + public static void main(String[] args) { + System.out.println("hello"); + System.out.println("hello"); + System.out.println("hello"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TwoFromThreeEqStatements_after.java b/java/java-tests/testData/refactoring/extractMethodNew/TwoFromThreeEqStatements_after.java new file mode 100644 index 000000000000..2ccfdcbee7b4 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TwoFromThreeEqStatements_after.java @@ -0,0 +1,12 @@ +class Test { + + public static void main(String[] args) { + newMethod(); + System.out.println("hello"); + } + + private static void newMethod() { + System.out.println("hello"); + System.out.println("hello"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsList.java b/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsList.java new file mode 100644 index 000000000000..4a65d338a7c8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsList.java @@ -0,0 +1,11 @@ +class Test { + protected , K> void applyChanges(final T variable) { + new Runnable() { + @Override + public void run() { + System.out.println(variable); + } + } + ; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsListWithRecursiveDependencies.java b/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsListWithRecursiveDependencies.java new file mode 100644 index 000000000000..34c63819d3cd --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsListWithRecursiveDependencies.java @@ -0,0 +1,6 @@ +class Test { + + void f(C c) { + System.out.println(c); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsListWithRecursiveDependencies_after.java b/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsListWithRecursiveDependencies_after.java new file mode 100644 index 000000000000..a7aaae5d3ed8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsListWithRecursiveDependencies_after.java @@ -0,0 +1,10 @@ +class Test { + + void f(C c) { + newMethod(c); + } + + private void newMethod(C c) { + System.out.println(c); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsList_after.java b/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsList_after.java new file mode 100644 index 000000000000..da7aebf6234f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TypeParamsList_after.java @@ -0,0 +1,15 @@ +class Test { + protected , K> void applyChanges(final T variable) { + new Runnable() { + @Override + public void run() { + newMethod(variable); + } + } + ; + } + + private , K> void newMethod(T variable) { + System.out.println(variable); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TypeUseAnnotationsOnParameter.java b/java/java-tests/testData/refactoring/extractMethodNew/TypeUseAnnotationsOnParameter.java new file mode 100644 index 000000000000..1fc26e5c9c98 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TypeUseAnnotationsOnParameter.java @@ -0,0 +1,19 @@ + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.CLASS) +@Target({ElementType.PARAMETER, ElementType.TYPE_USE}) +@interface Anno { + String value() default ""; +} + +class Test { + void foo(@Anno String s) { + if (s == null) {} + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TypeUseAnnotationsOnParameter_after.java b/java/java-tests/testData/refactoring/extractMethodNew/TypeUseAnnotationsOnParameter_after.java new file mode 100644 index 000000000000..b4c5ea76d0c3 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/TypeUseAnnotationsOnParameter_after.java @@ -0,0 +1,23 @@ + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.CLASS) +@Target({ElementType.PARAMETER, ElementType.TYPE_USE}) +@interface Anno { + String value() default ""; +} + +class Test { + void foo(@Anno String s) { + newMethod(s); + } + + private void newMethod(@Anno String s) { + if (s == null) {} + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UnusedGenerics.java b/java/java-tests/testData/refactoring/extractMethodNew/UnusedGenerics.java new file mode 100644 index 000000000000..6882d5492dce --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UnusedGenerics.java @@ -0,0 +1,6 @@ +class Test { + public T method(Class clazz) { + System.out.println(); + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UnusedGenerics_after.java b/java/java-tests/testData/refactoring/extractMethodNew/UnusedGenerics_after.java new file mode 100644 index 000000000000..e91851967464 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UnusedGenerics_after.java @@ -0,0 +1,10 @@ +class Test { + public T method(Class clazz) { + newMethod(); + return null; + } + + private void newMethod() { + System.out.println(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UnusedInitializedVar.java b/java/java-tests/testData/refactoring/extractMethodNew/UnusedInitializedVar.java new file mode 100644 index 000000000000..d5a5d63b89a0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UnusedInitializedVar.java @@ -0,0 +1,14 @@ +class Foo { + private void bar() { + String text = null; + try { + text = getString(); + } + catch(Exception e) { + System.out.println(text); + } + } + private void getString() { + return "hello"; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UnusedInitializedVar_after.java b/java/java-tests/testData/refactoring/extractMethodNew/UnusedInitializedVar_after.java new file mode 100644 index 000000000000..f6954c8db6f0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UnusedInitializedVar_after.java @@ -0,0 +1,21 @@ +class Foo { + private void bar() { + String text = null; + try { + text = newMethod(); + } + catch(Exception e) { + System.out.println(text); + } + } + + private String newMethod() { + String text; + text = getString(); + return text; + } + + private void getString() { + return "hello"; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseParamInCatch.java b/java/java-tests/testData/refactoring/extractMethodNew/UseParamInCatch.java new file mode 100644 index 000000000000..28086f115957 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseParamInCatch.java @@ -0,0 +1,11 @@ +class C { + void f(boolean b, String s) { + try { + s = "a"; + if (b) throw new RuntimeException(); + s = "b"; + } catch (RuntimeException e) { + System.out.println(s); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseParamInFinally.java b/java/java-tests/testData/refactoring/extractMethodNew/UseParamInFinally.java new file mode 100644 index 000000000000..2e7737c6c766 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseParamInFinally.java @@ -0,0 +1,11 @@ +class C { + void f(boolean b, String s) { + try { + s = "a"; + if (b) throw new RuntimeException(); + s = "b"; + } finally { + System.out.println(s); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarAfterCatch.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarAfterCatch.java new file mode 100644 index 000000000000..b44ef06400ff --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarAfterCatch.java @@ -0,0 +1,17 @@ +class A { + void foo() { + String s = ""; + try { + s = "a"; + bar(); + s = "b"; + } catch (Exception e) { + System.out.println(e); + } + System.out.println(s); + } + + void bar() throws Exception { + if (true) throw new Exception(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarAfterTry.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarAfterTry.java new file mode 100644 index 000000000000..0699236cd72b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarAfterTry.java @@ -0,0 +1,13 @@ +class A { + { + Object o; + + try { + o = foo(); + } + catch (Exception e) { + } + + o.f(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarAfterTry_after.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarAfterTry_after.java new file mode 100644 index 000000000000..05b3b89e3b90 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarAfterTry_after.java @@ -0,0 +1,19 @@ +class A { + { + Object o; + + try { + o = newMethod(); + } + catch (Exception e) { + } + + o.f(); + } + + private Object newMethod() { + Object o; + o = foo(); + return o; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatch1.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatch1.java new file mode 100644 index 000000000000..9cbc666dc7e0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatch1.java @@ -0,0 +1,19 @@ +class A { + static class MyException extends Exception{ MyException(){ super(); } } + + void foo() { + String s = ""; + try { + s = "a"; + bar(); + s = "b"; + bar(); + } catch (MyException e) { + throw new RuntimeException(s, e); + } + } + + void bar() throws MyException { + if (true) throw new MyException(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatch1_after.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatch1_after.java new file mode 100644 index 000000000000..de99c81ba2bb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatch1_after.java @@ -0,0 +1,27 @@ +import org.jetbrains.annotations.NotNull; + +class A { + static class MyException extends Exception{ MyException(){ super(); } } + + void foo() { + String s = ""; + try { + s = "a"; + s = newMethod(s); + bar(); + } catch (MyException e) { + throw new RuntimeException(s, e); + } + } + + @NotNull + private String newMethod(String s) throws MyException { + bar(); + s = "b"; + return s; + } + + void bar() throws MyException { + if (true) throw new MyException(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatch2.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatch2.java new file mode 100644 index 000000000000..1f975abfae46 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatch2.java @@ -0,0 +1,19 @@ +class A { + static class MyException extends Exception{ MyException(){ super(); } } + + void foo() { + String s = ""; + try { + s = "a"; + bar(); + s = "b"; + bar(); + } catch (MyException e) { + throw new RuntimeException(s, e); + } + } + + void bar() throws MyException { + if (true) throw new MyException(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchInvisible.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchInvisible.java new file mode 100644 index 000000000000..add4cbc84dad --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchInvisible.java @@ -0,0 +1,18 @@ +class A { + void foo() { + String s = null; + try { + s = "1"; + int invisibleOutsideTry = 1 + 1; + bar(); + s = s + invisibleOutsideTry; + } catch (Exception e) { + System.out.println("ex " + s); + } + System.out.println("ok " + s); + } + + private void bar() throws Exception { + throw new Exception(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchInvisible_after.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchInvisible_after.java new file mode 100644 index 000000000000..d5f13a633212 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchInvisible_after.java @@ -0,0 +1,23 @@ +class A { + void foo() { + String s = null; + try { + s = "1"; + int invisibleOutsideTry = newMethod(); + s = s + invisibleOutsideTry; + } catch (Exception e) { + System.out.println("ex " + s); + } + System.out.println("ok " + s); + } + + private int newMethod() throws Exception { + int invisibleOutsideTry = 1 + 1; + bar(); + return invisibleOutsideTry; + } + + private void bar() throws Exception { + throw new Exception(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchNested1.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchNested1.java new file mode 100644 index 000000000000..16126db6c251 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchNested1.java @@ -0,0 +1,28 @@ +import java.io.IOException; +import java.sql.SQLException; +import java.util.concurrent.ThreadLocalRandom; + +class A { + void f() { + int i = 0; + try { + i = 1; + try { + i = 2; + if (r()) throw new IOException(); + i = 3; + if (r()) throw new SQLException(); + i = 4; + System.out.println("ok"); + } catch (IOException e) { + System.out.println("io " + i); + } + } catch (SQLException e) { + System.out.println("sql"); + } + } + + private boolean r() { + return ThreadLocalRandom.current().nextBoolean(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchNested1_after.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchNested1_after.java new file mode 100644 index 000000000000..edcb22b9710b --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchNested1_after.java @@ -0,0 +1,34 @@ +import java.io.IOException; +import java.sql.SQLException; +import java.util.concurrent.ThreadLocalRandom; + +class A { + void f() { + int i = 0; + try { + i = 1; + try { + i = 2; + if (r()) throw new IOException(); + i = newMethod(); + System.out.println("ok"); + } catch (IOException e) { + System.out.println("io " + i); + } + } catch (SQLException e) { + System.out.println("sql"); + } + } + + private int newMethod() throws SQLException { + int i; + i = 3; + if (r()) throw new SQLException(); + i = 4; + return i; + } + + private boolean r() { + return ThreadLocalRandom.current().nextBoolean(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchNested2.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchNested2.java new file mode 100644 index 000000000000..2fdb97d5e826 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInCatchNested2.java @@ -0,0 +1,28 @@ +import java.io.IOException; +import java.sql.SQLException; +import java.util.concurrent.ThreadLocalRandom; + +class A { + void f() { + int i = 0; + try { + i = 1; + try { + i = 2; + if (r()) throw new IOException(); + i = 3; + if (r()) throw new SQLException(); + i = 4; + System.out.println("ok"); + } catch (IOException e) { + System.out.println("io " + i); + } + } catch (SQLException e) { + System.out.println("sql " + i); + } + } + + private boolean r() { + return ThreadLocalRandom.current().nextBoolean(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInFinally1.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInFinally1.java new file mode 100644 index 000000000000..baea4a50bf27 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInFinally1.java @@ -0,0 +1,18 @@ +import java.util.concurrent.ThreadLocalRandom; + +public class A { + void f() { + String s = ""; + try { + s = "a"; + if (r()) throw new RuntimeException(); + s = "b"; + } finally { + System.out.println(s); + } + } + + private boolean r() { + return ThreadLocalRandom.current().nextBoolean(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInFinally1_after.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInFinally1_after.java new file mode 100644 index 000000000000..307f0db900e9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInFinally1_after.java @@ -0,0 +1,26 @@ +import org.jetbrains.annotations.NotNull; + +import java.util.concurrent.ThreadLocalRandom; + +public class A { + void f() { + String s = ""; + try { + s = "a"; + s = newMethod(s); + } finally { + System.out.println(s); + } + } + + @NotNull + private String newMethod(String s) { + if (r()) throw new RuntimeException(); + s = "b"; + return s; + } + + private boolean r() { + return ThreadLocalRandom.current().nextBoolean(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInFinally2.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInFinally2.java new file mode 100644 index 000000000000..22fb9ad21f90 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInFinally2.java @@ -0,0 +1,18 @@ +import java.util.concurrent.ThreadLocalRandom; + +public class A { + void f() { + String s = ""; + try { + s = "a"; + if (r()) throw new RuntimeException(); + s = "b"; + } finally { + System.out.println(s); + } + } + + private boolean r() { + return ThreadLocalRandom.current().nextBoolean(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInOtherCatch.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInOtherCatch.java new file mode 100644 index 000000000000..9db136025257 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInOtherCatch.java @@ -0,0 +1,20 @@ +class A { + static class ExceptionA extends Exception{ ExceptionA(){ super(); } } + static class ExceptionB extends Exception{ ExceptionB(){ super(); } } + + void foo(boolean a, boolean b) { + String s = ""; + try { + s = "a"; + if (a) throw new ExceptionA(); + s = "b"; + if (b) throw new ExceptionB(); + s = "c"; + System.out.println(s); + } catch (ExceptionA ea) { + throw new RuntimeException(s, ea); + } catch (ExceptionB eb) { + System.out.println(eb); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/UseVarInOtherCatch_after.java b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInOtherCatch_after.java new file mode 100644 index 000000000000..756b94f3457a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/UseVarInOtherCatch_after.java @@ -0,0 +1,29 @@ +import org.jetbrains.annotations.NotNull; + +class A { + static class ExceptionA extends Exception{ ExceptionA(){ super(); } } + static class ExceptionB extends Exception{ ExceptionB(){ super(); } } + + void foo(boolean a, boolean b) { + String s = ""; + try { + s = "a"; + if (a) throw new ExceptionA(); + s = newMethod(b); + System.out.println(s); + } catch (ExceptionA ea) { + throw new RuntimeException(s, ea); + } catch (ExceptionB eb) { + System.out.println(eb); + } + } + + @NotNull + private String newMethod(boolean b) throws ExceptionB { + String s; + s = "b"; + if (b) throw new ExceptionB(); + s = "c"; + return s; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/VarDeclAfterExpressionExtraction.java b/java/java-tests/testData/refactoring/extractMethodNew/VarDeclAfterExpressionExtraction.java new file mode 100644 index 000000000000..a757c44cdfc0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/VarDeclAfterExpressionExtraction.java @@ -0,0 +1,34 @@ +class BasicLazyResolveTest { + + + public void test() { + + Object session = new Object() { + +/* + public ClassMemberDeclarationProvider getClassMemberDeclarationProvider(JetClass jetClassOrObject) { + final JetClass jetClass = (JetClass) jetClassOrObject; + return new ClassMemberDeclarationProvider() {*/ + + + /* private List filter(List list, final Class t, final Name name) { + //noinspection unchecked + return (List) Lists.newArrayList(Collections2.filter(list, new Predicate() { + @Override + public boolean apply(D d) { + return t.isInstance(d) && ((JetNamed) d).getNameAsName().equals(name); + } + })); + }*/ + + + /* }; + }*/ + }; + + String packageDescriptor = session.toString(); + + } + + +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/VarDeclAfterExpressionExtraction_after.java b/java/java-tests/testData/refactoring/extractMethodNew/VarDeclAfterExpressionExtraction_after.java new file mode 100644 index 000000000000..fdf2963c9797 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/VarDeclAfterExpressionExtraction_after.java @@ -0,0 +1,41 @@ +import org.jetbrains.annotations.NotNull; + +class BasicLazyResolveTest { + + + public void test() { + + Object session = newMethod(); + + String packageDescriptor = session.toString(); + + } + + @NotNull + private Object newMethod() { + return new Object() { + +/* + public ClassMemberDeclarationProvider getClassMemberDeclarationProvider(JetClass jetClassOrObject) { + final JetClass jetClass = (JetClass) jetClassOrObject; + return new ClassMemberDeclarationProvider() {*/ + + + /* private List filter(List list, final Class t, final Name name) { + //noinspection unchecked + return (List) Lists.newArrayList(Collections2.filter(list, new Predicate() { + @Override + public boolean apply(D d) { + return t.isInstance(d) && ((JetNamed) d).getNameAsName().equals(name); + } + })); + }*/ + + + /* }; + }*/ + }; + } + + +} diff --git a/java/java-tests/testData/refactoring/extractMethodNew/VariableInLoopWithConditionalBreak.java b/java/java-tests/testData/refactoring/extractMethodNew/VariableInLoopWithConditionalBreak.java new file mode 100644 index 000000000000..e97ac706a9fd --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/VariableInLoopWithConditionalBreak.java @@ -0,0 +1,11 @@ +class X { + void foo() { + boolean x = false; + for (int i = 0; i < 100; i++) { + x = true; + if (i == 30) { + break; + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/VariableInLoopWithConditionalBreak_after.java b/java/java-tests/testData/refactoring/extractMethodNew/VariableInLoopWithConditionalBreak_after.java new file mode 100644 index 000000000000..beb42563da66 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/VariableInLoopWithConditionalBreak_after.java @@ -0,0 +1,17 @@ +class X { + void foo() { + boolean x = false; + for (int i = 0; i < 100; i++) { + if (newMethod(i)) break; + } + } + + private boolean newMethod(int i) { + boolean x; + x = true; + if (i == 30) { + return true; + } + return false; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/VerboseArrayAccess.java b/java/java-tests/testData/refactoring/extractMethodNew/VerboseArrayAccess.java new file mode 100644 index 000000000000..cb8c06d93422 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/VerboseArrayAccess.java @@ -0,0 +1,10 @@ +class Test { + void foo(String[] ss) { + for(int i = 0; i < ss.length; i++) { + + System.out.println(ss[i]); + System.out.println(ss[i+1]); + + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/VerboseArrayAccess_after.java b/java/java-tests/testData/refactoring/extractMethodNew/VerboseArrayAccess_after.java new file mode 100644 index 000000000000..3d1de598e627 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/VerboseArrayAccess_after.java @@ -0,0 +1,14 @@ +class Test { + void foo(String[] ss) { + for(int i = 0; i < ss.length; i++) { + + newMethod(ss, i); + + } + } + + private void newMethod(String[] ss, int i) { + System.out.println(ss[i]); + System.out.println(ss[i+1]); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/WriteArrayAccess.java b/java/java-tests/testData/refactoring/extractMethodNew/WriteArrayAccess.java new file mode 100644 index 000000000000..39a38f76f887 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/WriteArrayAccess.java @@ -0,0 +1,7 @@ +class Test { + void foo(String[] ss) { + for(int i = 0; i < ss.length; i++) { + ss[i] = ""; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/WriteArrayAccess_after.java b/java/java-tests/testData/refactoring/extractMethodNew/WriteArrayAccess_after.java new file mode 100644 index 000000000000..2c0e117188d0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/WriteArrayAccess_after.java @@ -0,0 +1,11 @@ +class Test { + void foo(String[] ss) { + for(int i = 0; i < ss.length; i++) { + newMethod(ss, i); + } + } + + private void newMethod(String[] ss, int i) { + ss[i] = ""; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/WriteDifferentFieldsDuplicate.java b/java/java-tests/testData/refactoring/extractMethodNew/WriteDifferentFieldsDuplicate.java new file mode 100644 index 000000000000..5f9077a97e74 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/WriteDifferentFieldsDuplicate.java @@ -0,0 +1,17 @@ +class WriteDifferentFieldsDuplicate { + Runnable x; + Runnable y; + + private void foo() { + + if (x != null) { + x.run(); + x = null; + } + + if (y != null) { + y.run(); + y = null; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodNew/WriteDifferentFieldsDuplicate_after.java b/java/java-tests/testData/refactoring/extractMethodNew/WriteDifferentFieldsDuplicate_after.java new file mode 100644 index 000000000000..7132e803b47a --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodNew/WriteDifferentFieldsDuplicate_after.java @@ -0,0 +1,21 @@ +class WriteDifferentFieldsDuplicate { + Runnable x; + Runnable y; + + private void foo() { + + newMethod(); + + if (y != null) { + y.run(); + y = null; + } + } + + private void newMethod() { + if (x != null) { + x.run(); + x = null; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodNewTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodNewTest.java new file mode 100644 index 000000000000..8ea314c65f4b --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodNewTest.java @@ -0,0 +1,1620 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.java.refactoring; + +import com.intellij.JavaTestUtil; +import com.intellij.codeInsight.CodeInsightUtil; +import com.intellij.codeInsight.NullableNotNullManager; +import com.intellij.lang.java.JavaLanguage; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.LanguageLevelProjectExtension; +import com.intellij.openapi.util.registry.Registry; +import com.intellij.openapi.util.registry.RegistryValue; +import com.intellij.pom.java.LanguageLevel; +import com.intellij.psi.*; +import com.intellij.psi.codeStyle.CodeStyleSettings; +import com.intellij.psi.codeStyle.CodeStyleSettingsManager; +import com.intellij.psi.codeStyle.CommonCodeStyleSettings; +import com.intellij.psi.codeStyle.JavaCodeStyleSettings; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.refactoring.extractMethod.ExtractMethodHandler; +import com.intellij.refactoring.extractMethod.ExtractMethodProcessor; +import com.intellij.refactoring.extractMethod.PrepareFailedException; +import com.intellij.refactoring.introduceVariable.IntroduceVariableBase; +import com.intellij.refactoring.util.duplicates.Match; +import com.intellij.testFramework.LightJavaCodeInsightTestCase; +import com.intellij.util.ArrayUtilRt; +import com.intellij.util.IncorrectOperationException; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class ExtractMethodNewTest extends LightJavaCodeInsightTestCase { + @NonNls private static final String BASE_PATH = "/refactoring/extractMethodNew/"; + private boolean myCatchOnNewLine = true; + + @NotNull + @Override + protected String getTestDataPath() { + return JavaTestUtil.getJavaTestDataPath(); + } + + public void testExitPoints1() throws Exception { + doExitPointsTest(true); + } + + public void testExitPoints2() throws Exception { + doTest(); + } + + public void testExitPoints3() throws Exception { + doExitPointsTest(true); + } + + public void testExitPoints4() throws Exception { + doTest(); + } + + public void testExitPoints4Nullable() throws Exception { + doExitPointsTest(false); + } + + public void testExitPointsInsideLoop() throws Exception { + doExitPointsTest(true); + } + + public void testExitPoints5() throws Exception { + doTest(); + } + + public void testExitPoints6() throws Exception { + doExitPointsTest(false); + } + + public void testExitPoints7() throws Exception { + doExitPointsTest(false); + } + + public void testExitPoints8() throws Exception { + doTest(); + } + + public void testExitPoints9() throws Exception { + doTest(); + } + + public void testExitPoints10() throws Exception { + doExitPointsTest(false); + } + + public void testExitPoints11() throws Exception { + doTest(); + } + + public void testNotNullCheckNameConflicts() throws Exception { + doTest(); + } + + public void testContinueInside() throws Exception { + doTest(); + } + + public void testBooleanExpression() throws Exception { + doTest(); + } + + public void testScr6241() throws Exception { + doTest(); + } + + public void testScr7091() throws Exception { + doTest(); + } + + public void testScr10464() throws Exception { + doTest(); + } + + public void testScr9852() throws Exception { + doTest(); + } + + public void testUseVarAfterTry() throws Exception { + doTest(); + } + + public void testUseParamInCatch() throws Exception { + doExitPointsTest(false); + } + + public void testUseParamInFinally() throws Exception { + doExitPointsTest(false); + } + + public void testUseVarAfterCatch() throws Exception { + doExitPointsTest(false); + } + + public void testUseVarInCatch1() throws Exception { + doTest(); + } + + public void testUseVarInCatch2() throws Exception { + doExitPointsTest(false); + } + + public void testUseVarInCatchInvisible() throws Exception { + doTest(); + } + + public void testUseVarInCatchNested1() throws Exception { + doTest(); + } + + public void testUseVarInCatchNested2() throws Exception { + doExitPointsTest(false); + } + + public void testUseVarInOtherCatch() throws Exception { + doTest(); + } + + public void testUseVarInFinally1() throws Exception { + doTest(); + } + + public void testUseVarInFinally2() throws Exception { + doExitPointsTest(false); + } + + public void testOneBranchAssignment() throws Exception { + doTest(); + } + + public void testExtractFromCodeBlock() throws Exception { + doTest(); + } + + public void testUnusedInitializedVar() throws Exception { + doTest(); + } + + public void testTryFinally() throws Exception { + doTest(); + } + + public void testFinally() throws Exception { + doTest(); + } + + public void testExtractFromAnonymous() throws Exception { + doTest(); + } + + public void testSCR12245() throws Exception { + doTest(); + } + + public void testLeaveCommentsWhenExpressionExtracted() throws Exception { + doTest(); + } + + public void testSCR15815() throws Exception { + doTest(); + } + + public void testSCR27887() throws Exception { + doTest(); + } + + public void testSCR28427() throws Exception { + doTest(); + } + + public void testTryFinallyInsideFor() throws Exception { + doTest(); + } + + public void testExtractFromTryFinally() throws Exception { + doTest(); + } + + public void testExtractAssignmentExpression() throws Exception { + doTest(); + } + + public void testExtractAssignmentExpressionFromStatement() throws Exception { + doTest(); + } + + public void testExtractFromTryFinally2() throws Exception { + doTest(); + } + + public void testLesyaBug() throws Exception { + myCatchOnNewLine = false; + doTest(); + } + + public void testForEach() throws Exception { + doTest(); + } + + public void testAnonInner() throws Exception { + doTest(); + } + + + public void testConflictingAnonymous() throws Exception { + doTest(); + } + + public void testVarDeclAfterExpressionExtraction() throws Exception { + doTest(); + } + + public void testFinalParamUsedInsideAnon() throws Exception { + JavaCodeStyleSettings.getInstance(getProject()).GENERATE_FINAL_PARAMETERS = false; + doTestWithJava17(); + } + + private void doTestWithJava17() throws Exception { + doTestWithLanguageLevel(LanguageLevel.JDK_1_7); + } + + private void doTestWithLanguageLevel(LanguageLevel languageLevel) throws Exception { + LanguageLevelProjectExtension projectExtension = LanguageLevelProjectExtension.getInstance(getProject()); + LanguageLevel oldLevel = projectExtension.getLanguageLevel(); + try { + projectExtension.setLanguageLevel(languageLevel); + doTest(); + } + finally { + projectExtension.setLanguageLevel(oldLevel); + } + } + + public void testNonFinalWritableParam() throws Exception { + JavaCodeStyleSettings.getInstance(getProject()).GENERATE_FINAL_PARAMETERS = true; + doTest(); + } + + public void testCodeDuplicatesWithContinue() throws Exception { + doDuplicatesTest(); + } + + public void testDuplicatesFromAnonymous() throws Exception { + doDuplicatesTest(); + } + + public void testDuplicatesFullyQualifiedType() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicatesWithContinueNoReturn() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicatesWithStaticInitializer() throws Exception { + doDuplicatesTest(); + } + + public void testDuplicateInUnreachableCode() throws Exception { + doDuplicatesTest(); + } + + public void testExpressionDuplicates() throws Exception { + doDuplicatesTest(); + } + + public void testClassReference() throws Exception { + doDuplicatesTest(); + } + + public void testClassReference2() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicates() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicates2() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicates3() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicates4() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicates5() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicatesWithOutputValue() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicatesWithOutputValue1() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicatesWithEmptyStatementsBlocksParentheses() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicatesWithMultExitPoints() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicatesWithReturn() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicatesWithReturn2() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicatesWithReturnInAnonymous() throws Exception { + doDuplicatesTest(); + } + + public void testCodeDuplicatesWithComments() throws Exception { + doDuplicatesTest(); + } + + public void testSCR32924() throws Exception { + doDuplicatesTest(); + } + + public void testFinalOutputVar() throws Exception { + doDuplicatesTest(); + } + + public void testIdeaDev2291() throws Exception { + doTest(); + } + + public void testOxfordBug() throws Exception { + doTest(); + } + + public void testIDEADEV33368() throws Exception { + doExitPointsTest(false); + } + + public void testInlineCreated2ReturnLocalVariablesOnly() throws Exception { + doTest(); + } + + public void testGuardMethodDuplicates() throws Exception { + doDuplicatesTest(); + } + + public void testGuardMethodDuplicates1() throws Exception { + doDuplicatesTest(); + } + + public void testInstanceMethodDuplicatesInStaticContext() throws Exception { + doDuplicatesTest(); + } + + + public void testLValueNotDuplicate() throws Exception { + doDuplicatesTest(); + } + + protected void doDuplicatesTest() throws Exception { + doTest(true); + } + + public void testExtractFromFinally() throws Exception { + doTest(); + } + + public void testNoShortCircuit() throws Exception { + doTest(); + } + + public void testStopFolding() throws Exception { + doTest(); + } + + public void testStopFoldingForArrayWriteAccessInConsequentUsages() throws Exception { + doTest(); + } + + public void testStopFoldingPostfixInside() throws Exception { + doTest(); + } + + public void testFoldedWithNestedExpressions() throws Exception { + doTest(); + } + + public void testFoldedWithConflictedNames() throws Exception { + doTest(); + } + + public void testFoldingWithFieldInvolved() throws Exception { + doTest(); + } + + public void testFoldingWithFunctionCall() throws Exception { + doTest(); + } + + public void testDontSkipVariablesUsedInLeftSideOfAssignments() throws Exception { + doTest(); + } + + public void testIDEADEV11748() throws Exception { + doTest(); + } + + public void testIDEADEV11848() throws Exception { + doTest(); + } + + public void testIDEADEV11036() throws Exception { + doTest(); + } + + public void testLocalClass() throws Exception { + doPrepareErrorTest("Cannot extract method because the selected code fragment uses local classes defined outside of the fragment"); + } + + public void testLocalClassUsage() throws Exception { + doPrepareErrorTest("Cannot extract method because the selected code fragment defines local classes used outside of the fragment"); + } + + public void testStaticImport() throws Exception { + doTest(); + } + + public void testThisCall() throws Exception { + doTest(); + } + + public void testChainedConstructor() throws Exception { + doChainedConstructorTest(false); + } + + public void testChainedConstructorDuplicates() throws Exception { + doChainedConstructorTest(true); + } + + public void testChainedConstructorInvalidDuplicates() throws Exception { + doChainedConstructorTest(true); + } + + public void testReturnFromTry() throws Exception { + doTest(); + } + + public void testLocalClassDefinedInMethodWhichIsUsedLater() throws Exception { + doPrepareErrorTest("Cannot extract method because the selected code fragment defines variable of local class type used outside of the fragment"); + } + + public void testForceBraces() throws Exception { + final CommonCodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE); + int old = settings.IF_BRACE_FORCE; + settings.IF_BRACE_FORCE = CommonCodeStyleSettings.FORCE_BRACES_ALWAYS; + try { + doTest(); + } + finally { + settings.IF_BRACE_FORCE = old; + } + } + + public void testConstantConditionsAffectingControlFlow() throws Exception { + doTest(); + } + + public void testConstantConditionsAffectingControlFlow1() throws Exception { + doTest(); + } + public void testNotInitializedInsideFinally() throws Exception { + doTest(); + } + + public void testGenericsParameters() throws Exception { + doTest(); + } + + public void testUnusedGenerics() throws Exception { + doTest(); + } + + public void testParamsUsedInLocalClass() throws Exception { + doTestWithJava17(); + } + + private void doChainedConstructorTest(final boolean replaceAllDuplicates) throws Exception { + configureByFile(BASE_PATH + getTestName(false) + ".java"); + boolean success = performExtractMethod(true, replaceAllDuplicates, getEditor(), getFile(), getProject(), true); + assertTrue(success); + checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); + } + + public void testReassignedVarAfterCall() throws Exception { + final JavaCodeStyleSettings settings = JavaCodeStyleSettings.getInstance(getProject()); + settings.GENERATE_FINAL_LOCALS = true; + doTest(); + } + + public void testNonPhysicalAssumptions() throws Exception { + doTest(); + } + + public void testNullableCheck() throws Exception { + doTest(); + } + + public void testNullableCheck1() throws Exception { + doTest(); + } + + public void testNullableCheckVoid() throws Exception { + doTest(); + } + + public void testNullableCheckDontMissFinal() throws Exception { + doTest(); + } + + public void testNullableCheckBreak() throws Exception { + doTest(); + } + + public void testSimpleArrayAccess() throws Exception { + doTest(); + } + + public void testArrayAccess() throws Exception { + doTest(); + } + + public void testArrayAccess1() throws Exception { + doTest(); + } + + public void testArrayAccessWithLocalIndex() throws Exception { + doTest(); + } + + public void testArrayAccessWithTopExpression() throws Exception { + doTest(); + } + + public void testArrayAccessWithDuplicates() throws Exception { + doDuplicatesTest(); + } + + public void testVerboseArrayAccess() throws Exception { + doTest(); + } + + public void testReturnStatementFolding() throws Exception { + doTest(); + } + + public void testWriteArrayAccess() throws Exception { + doTest(); + } + + public void testShortCircuit() throws Exception { + doTest(); + } + + public void testRecursiveCallToExtracted() throws Exception { + doTest(); + } + + public void testCodeDuplicatesVarargsShouldNotChangeReturnType() throws Exception { + doDuplicatesTest(); + } + + public void testParametersFromAnonymous() throws Exception { + doTest(); + } + + public void testCast4ParamGeneration() throws Exception { + doTest(); + } + + public void testNearComment() throws Exception { + doTest(); + } + + public void testFoldInWhile() throws Exception { + doTest(); + } + + public void testFoldedParamNameSuggestion() throws Exception { + doTest(); + } + + public void testNonFoldInIfBody() throws Exception { + doTest(); + } + + public void testComplexTypeParams() throws Exception { + doTest(); + } + + public void testExtractWithLeadingComment() throws Exception { + doTest(); + } + + public void testInvalidReference() throws Exception { + doTest(); + } + + public void testRedundantCast() throws Exception { + doTest(); + } + + public void testDisabledParam() throws Exception { + doTestDisabledParam(); + } + + public void testTypeParamsList() throws Exception { + doTest(); + } + + public void testTypeParamsListWithRecursiveDependencies() throws Exception { + doTest(); + } + + public void testFromLambdaBody() throws Exception { + doTest(); + } + + public void testFromLambdaBody1() throws Exception { + doTest(); + } + + public void testFromLambdaBodyCapturedWildcardParams() throws Exception { + doTest(); + } + + public void testFromLambdaBodyToAnonymous() throws Exception { + doTest(); + } + + public void testFromLambdaBodyToToplevelInsideCodeBlock() throws Exception { + doTest(); + } + + public void testFromLambdaBodyWithReturn() throws Exception { + doTest(); + } + + public void testOneLineLambda() throws Exception { + doTest(); + } + + public void testMethod2Interface() throws Exception { + doTestWithLanguageLevel(LanguageLevel.JDK_1_8); + } + + public void testMethod2InterfaceFromStatic() throws Exception { + doTest(); + } + + public void testMethod2InterfaceFromConstant() throws Exception { + doTest(); + } + + public void testParamDetection() throws Exception { + doTest(); + } + + public void testSkipComments() throws Exception { + doTest(); + } + + public void testFinalParams4LocalClasses() throws Exception { + doTestWithJava17(); + } + + public void testIncompleteExpression() throws Exception { + doTest(); + } + + public void testTwoFromThreeEqStatements() throws Exception { + doDuplicatesTest(); + } + + public void testCastWhenDuplicateReplacement() throws Exception { + doDuplicatesTest(); + } + + public void testCheckQualifierMapping() throws Exception { + doDuplicatesTest(); + } + + public void testArrayReturnType() throws Exception { + doDuplicatesTest(); + } + + public void testOverloadedMethods() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureOneParam() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureOneParamMultipleTimesInside() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureLeaveSameExpressionsUntouched() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureSameParamNames() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureCallToSameClassMethod() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureInitialParameterUnused() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureWithFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureWithArrayFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureWithGetterFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureWithMultiFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureWithTwoWayFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureSameSubexpression() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureSameSubexpressionWholeLine() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureTrivialMethod() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignaturePlusOneFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureVoidCallFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureThreeOccurrencesTwoLiteralFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureFourOccurrencesTwoLiteralFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureThreeOccurrencesTwoVariableFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureFourOccurrencesTwoVariableFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureWithOutputVariables() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureEqualConstExprFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureLongConstExprFolding() throws Exception { + doDuplicatesTest(); + } + + public void testSuggestChangeSignatureTwoFieldInitializers() throws Exception { + doDuplicatesTest(); + } + + public void testConditionalReturnInDuplicate() throws Exception { + doDuplicatesTest(); + } + + // todo DuplicatesFinder.canBeEquivalent() should see the difference between 'return' and assignment + public void _testConditionalReturnVsAssignDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testConditionalWithTwoParameters() throws Exception { + doDuplicatesTest(); + } + + public void testOverlappingDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testEffectivelyLocalVariables() throws Exception { + doDuplicatesTest(); + } + + public void testEffectivelyLocalWithinExpression() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedDuplicateNestedSubexpression() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedDuplicateDeclaredOutputVariable() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedDuplicateDeclaredReusedVariable() throws Exception { + doDuplicatesTest(); + } + + public void testExactDuplicateDeclaredReusedVariable() throws Exception { + doDuplicatesTest(); + } + + public void testExactDuplicateTwoDeclaredReusedVariables() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedDuplicateUnfoldArrayArgument() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedDuplicateFoldListElement() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedDuplicateFoldArrayElement() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedMultiDuplicatesFoldArrayElement() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedDuplicateFoldArrayElementTwoUsages() throws Exception { + doDuplicatesTest(); + } + + public void testTripleParametrizedDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedDuplicateKeepSignature() throws Exception { + doExactDuplicatesTest(); + } + + public void testRejectParametrizedDuplicate() throws Exception { + doExactDuplicatesTest(); + } + + public void testParametrizedDuplicateRepeatedArguments() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedDuplicateTripleRepeatedArguments() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedDuplicateExactlyRepeatedArguments() throws Exception { + doDuplicatesTest(); + } + + public void testParametrizedDuplicateExpression() throws Exception { + doDuplicatesTest(); + } + + public void testPatternVariable() throws Exception { + doTestWithLanguageLevel(LanguageLevel.JDK_14_PREVIEW); + } + + public void testPatternVariableIntroduced() throws Exception { + doExitPointsTest(false); + } + + public void testPatternVariableIntroduced2() throws Exception { + doExitPointsTest(false); + } + + public void testPatternVariableIntroduced3() throws Exception { + doTestWithLanguageLevel(LanguageLevel.JDK_14_PREVIEW); + } + + public void testSuggestChangeSignatureWithChangedParameterName() throws Exception { + configureByFile(BASE_PATH + getTestName(false) + ".java"); + boolean success = performExtractMethod(true, true, getEditor(), getFile(), getProject(), false, null, false, "p"); + assertTrue(success); + checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); + } + + public void testTargetAnonymous() throws Exception { + doTest(); + } + + public void testSimpleMethodsInOneLine() throws Exception { + CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()); + CommonCodeStyleSettings javaSettings = settings.getCommonSettings(JavaLanguage.INSTANCE); + javaSettings.KEEP_SIMPLE_METHODS_IN_ONE_LINE = true; + doTest(); + } + + public void testExtractUnresolvedLambdaParameter() throws Exception { + doTest(); + } + + public void testExtractUnresolvedLambdaExpression() throws Exception { + doTest(); + } + + public void testNoNPE1() throws Exception { + doTest(); + } + + public void testNoNPE2() throws Exception { + doTest(); + } + + public void testTheOnlyParenthesisExpressionWhichIsSkippedInControlFlow() throws Exception { + doTest(); + } + + public void testExpression() throws Exception { + doTestWithJava17(); + } + + public void testCopyParamAnnotations() throws Exception { + doTest(); + } + + public void testInferredNotNullInReturnStatement() throws Exception { + doTest(); + } + + public void testSkipThrowsDeclaredInLambda() throws Exception { + doTest(); + } + + public void testChangedReturnType() throws Exception { + doTestReturnTypeChanged(PsiType.getJavaLangObject(getPsiManager(), GlobalSearchScope.allScope(getProject()))); + } + + public void testMakeVoidMethodReturnVariable() throws Exception { + doTestReturnTypeChanged(PsiType.INT); + } + + public void testNoReturnTypesSuggested() throws Exception { + doTestReturnTypeChanged(PsiType.INT); + } + + public void testMultipleVarsInMethodNoReturnStatementAndAssignment() throws Exception { + //return type should not be suggested but still + doTestReturnTypeChanged(PsiType.INT); + } + + public void testReassignFinalFieldInside() throws Exception { + doTestReturnTypeChanged(PsiType.INT); + } + + public void testShortenClassRefsInNewReturnType() throws Exception { + doTestReturnTypeChanged(PsiType.getTypeByName(CommonClassNames.JAVA_UTIL_COLLECTION, getProject(), GlobalSearchScope.allScope(getProject()))); + } + + public void testPassFieldAsParameterAndMakeStatic() throws Exception { + doTestPassFieldsAsParams(); + } + + public void testDefaultNamesConflictResolution() throws Exception { + final JavaCodeStyleSettings settings = JavaCodeStyleSettings.getInstance(getProject()); + settings.LOCAL_VARIABLE_NAME_PREFIX = "_"; + doTest(); + } + + public void testInferredNotNull() throws Exception { + doTest(); + } + + public void testCantPassFieldAsParameter() { + try { + doTestPassFieldsAsParams(); + fail("Field was modified inside. Make static should be disabled"); + } + catch (PrepareFailedException ignore) { + } + } + + public void testConditionalExitCombinedWithNullabilityShouldPreserveVarsUsedInExitStatements() throws Exception { + doTest(); + } + + public void testSingleExitPOintWithTryFinally() throws Exception { + doTest(); + } + + public void testLocalVariableModifierList() throws Exception { + doTest(); + } + + public void testLocalVariableAnnotationsOrder() throws Exception { + doTest(); + } + + public void testDifferentAnnotations() throws Exception { + doTest(); + } + + public void testTypeUseAnnotationsOnParameter() throws Exception { + doTest(); + } + + public void testSameAnnotations() throws Exception { + doTest(); + } + + public void testNormalExitIf() throws Exception { + doTest(); + } + + public void testNormalExitTry() throws Exception { + doTest(); + } + + public void testMethodAnnotations() throws Exception { + doTest(); + } + + public void testNotNullArgument0() throws Exception { + doTest(); + } + + public void testNotNullArgument1() throws Exception { + doTest(); + } + + public void testNotNullArgument2() throws Exception { + doTest(); + } + + public void testNotNullArgument3() throws Exception { + doTest(); + } + + public void testNotNullArgument4() throws Exception { + doTest(); + } + + public void testNotNullArgument5() throws Exception { + doTest(); + } + + public void testNotNullArgument6() throws Exception { + doTest(); + } + + public void testNotNullArgument7() throws Exception { + doTest(); + } + + public void testNotNullArgumentTooComplexCode() throws Exception { + RegistryValue value = Registry.get("ide.dfa.state.limit"); + int oldValue = value.asInteger(); + try { + value.setValue(50); + doTest(); + }finally { + value.setValue(oldValue); + } + } + + public void testVariableInLoopWithConditionalBreak() throws Exception { + doTest(); + } + + public void testNotNullArgumentLambdaBare() throws Exception { + doTest(); + } + + public void testNotNullArgumentLambdaInIf() throws Exception { + doTest(); + } + + public void testNotNullArgumentLambdaInIfNoBlock() throws Exception { + doTest(); + } + + public void testNotNullArgumentLambdaInWhileNoBlock() throws Exception { + doTest(); + } + + public void testNotNullArgumentLambdaInsideBody() throws Exception { + doTest(); + } + + public void testNotNullArgumentLambdaInIfInsideBody() throws Exception { + doTest(); + } + + public void testNotNullArgumentAnonymousClassBare() throws Exception { + doTest(); + } + + public void testNotNullArgumentAnonymousClassInIf() throws Exception { + doTest(); + } + + public void testNotNullArgumentAnonymousClassInIfNoBlock() throws Exception { + doTest(); + } + + public void testNotNullArgumentLambdaInForInitializer() throws Exception { + doTest(); + } + + public void testEmptyParenthesis() throws Exception { + try { + doTest(); + fail("Should not work for empty parenthesis"); + } + catch (PrepareFailedException ignore) { + } + } + + public void testQualifyWhenConflictingNamePresent() throws Exception { + final CommonCodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE); + settings.ELSE_ON_NEW_LINE = true; + settings.CATCH_ON_NEW_LINE = myCatchOnNewLine; + configureByFile(BASE_PATH + getTestName(false) + ".java"); + final PsiClass psiClass = PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getSelectionModel().getLeadSelectionOffset()), PsiClass.class); + assertNotNull(psiClass); + boolean success = + performExtractMethod(true, true, getEditor(), getFile(), getProject(), false, null, false, null, psiClass.getContainingClass(), null); + assertTrue(success); + checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); + } + + public void testDontMakeParametersFinalDueToUsagesInsideAnonymous() throws Exception { + doTest(); + } + + public void testBuilderChainWithArrayAccess() throws Exception { + doTest(); + } + + public void testBuilderChainWithArrayAccessExpr() throws Exception { + doTest(); + } + + public void testBuilderChainWithArrayAccessIf() throws Exception { + doTest(); + } + + public void testBuilderChainWith2DimArrayAccess() throws Exception { + doTest(); + } + + public void testCallOnArrayElement() throws Exception { + doTest(); + } + + public void testCallOn2DimArrayElement() throws Exception { + doTest(); + } + + public void testCallOnFieldArrayElement() throws Exception { + doTest(); + } + + public void testExtractedVariableReused() throws Exception { + doTest(); + } + + public void testExtractBareThenBranch() throws Exception { + doTest(); + } + + public void testExtractBareElseBranch() throws Exception { + doTest(); + } + + public void testExtractBareForBody() throws Exception { + doTest(); + } + + public void testExtractBareDoWhileBody() throws Exception { + doTest(); + } + + public void testExtractBracedElseBranch() throws Exception { + doTest(); + } + + public void testExtractBracedDoWhileBody() throws Exception { + doTest(); + } + + public void testInferredNotNullInReturnStatementDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testNullableCheckBreakDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testOutputVariableDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testNullableCheckVoidDuplicate() throws Exception { + doTest(); + } + + public void testWriteDifferentFieldsDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testDecrementDifferentFieldsDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testDecrementDifferentStaticFieldsDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testDecrementDifferentOuterFieldsDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testDecrementDifferentInnerFieldsDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testDecrementDifferentChainedFieldsDuplicate() throws Exception { + doDuplicatesTest(); + } + + public void testArgumentFoldingWholeStatement() throws Exception { + doDuplicatesTest(); + } + + public void testArgumentFoldingWholeStatementForUpdate() throws Exception { + doDuplicatesTest(); + } + + public void testArgumentFoldingWholeStatementForUpdateList() throws Exception { + doDuplicatesTest(); + } + + public void testArgumentFoldingMethodCall() throws Exception { + doDuplicatesTest(); + } + + public void testBoxedConditionalReturn() throws Exception { + doDuplicatesTest(); + } + + public void testAvoidGenericArgumentCast() throws Exception { + doDuplicatesTest(); + } + + public void testAvoidGenericArgumentCastLocalClass() throws Exception { + doDuplicatesTest(); + } + + public void testDuplicatePreserveComments() throws Exception { + doDuplicatesTest(); + } + + public void testDuplicateSubexpression() throws Exception { + doDuplicatesTest(); + } + + public void testDuplicateSubexpressionWithParentheses() throws Exception { + doDuplicatesTest(); + } + + public void testOneVariableExpression() throws Exception { + doDuplicatesTest(); + } + + public void testInterfaceMethodVisibility() throws Exception { + final String doesNotExist = "foo.bar.baz.DoesNotExist"; + final NullableNotNullManager nullManager = NullableNotNullManager.getInstance(getProject()); + + final List nullables = nullManager.getNullables(); + final List notNulls = nullManager.getNotNulls(); + final String defaultNullable = nullManager.getDefaultNullable(); + final String defaultNotNull = nullManager.getDefaultNotNull(); + try { + nullManager.setNullables(doesNotExist); + nullManager.setNotNulls(doesNotExist); + nullManager.setDefaultNullable(doesNotExist); + nullManager.setDefaultNotNull(doesNotExist); + + configureByFile(BASE_PATH + getTestName(false) + ".java"); + boolean success = + performExtractMethod(true, true, getEditor(), getFile(), getProject(), false, null, false, null, null, PsiModifier.PUBLIC); + assertTrue(success); + checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); + } + finally { + nullManager.setNullables(ArrayUtilRt.toStringArray(nullables)); + nullManager.setNotNulls(ArrayUtilRt.toStringArray(notNulls)); + nullManager.setDefaultNullable(defaultNullable); + nullManager.setDefaultNotNull(defaultNotNull); + } + } + + public void testBeforeCommentAfterSelectedFragment() throws Exception { + doTest(); + } + + public void testInsideCommentAfterSelectedFragment() throws Exception { + doTest(); + } + + public void testEmptyBlockStatement() throws Exception { + doExitPointsTest(false); + } + + public void testCallChainExpression() throws Exception { + doTest(); + } + + public void testFromDefaultMethodInInterface() throws Exception { + doTest(); + } + + public void testFromPrivateMethodInInterface() throws Exception { + doTest(); + } + + public void testFromStaticMethodInInterface() throws Exception { + doTest(); + } + + public void testDisjunctionType() throws Exception { + doTest(); + } + + public void testExtractFromAnnotation() throws Exception { + try { + doTest(); + fail("Should not work for annotations"); + } + catch (PrepareFailedException ignore) { + } + } + + public void testExtractFromAnnotation1() throws Exception { + try { + doTest(); + fail("Should not work for annotations"); + } + catch (PrepareFailedException ignore) { + } + } + + private void doTestDisabledParam() throws PrepareFailedException { + final CommonCodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE); + settings.ELSE_ON_NEW_LINE = true; + settings.CATCH_ON_NEW_LINE = myCatchOnNewLine; + configureByFile(BASE_PATH + getTestName(false) + ".java"); + boolean success = performExtractMethod(true, true, getEditor(), getFile(), getProject(), false, 0); + assertTrue(success); + checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); + } + + private void doTestReturnTypeChanged(PsiType type) throws PrepareFailedException { + final CommonCodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE); + settings.ELSE_ON_NEW_LINE = true; + settings.CATCH_ON_NEW_LINE = myCatchOnNewLine; + configureByFile(BASE_PATH + getTestName(false) + ".java"); + boolean success = performExtractMethod(true, true, getEditor(), getFile(), getProject(), false, type, false, null); + assertTrue(success); + checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); + } + + private void doTestPassFieldsAsParams() throws PrepareFailedException { + final CommonCodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE); + settings.ELSE_ON_NEW_LINE = true; + settings.CATCH_ON_NEW_LINE = myCatchOnNewLine; + configureByFile(BASE_PATH + getTestName(false) + ".java"); + boolean success = performExtractMethod(true, true, getEditor(), getFile(), getProject(), false, null, true, null); + assertTrue(success); + checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); + } + + private void doPrepareErrorTest(final String expectedMessage) throws Exception { + String expectedError = null; + try { + doExitPointsTest(false); + } + catch(PrepareFailedException ex) { + expectedError = ex.getMessage(); + } + assertEquals(expectedMessage, expectedError); + } + + private void doExitPointsTest(boolean shouldSucceed) throws Exception { + String fileName = getTestName(false) + ".java"; + configureByFile(BASE_PATH + fileName); + boolean success = performAction(false, false); + assertEquals(shouldSucceed, success); + } + + private void doTest() throws Exception { + final CommonCodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE); + settings.ELSE_ON_NEW_LINE = true; + settings.CATCH_ON_NEW_LINE = myCatchOnNewLine; + doTest(true); + } + + private void doTest(boolean duplicates) throws Exception { + doTest(duplicates, null); + } + + private void doExactDuplicatesTest() throws Exception { + doTest(true, () -> getFile().putUserData(ExtractMethodProcessor.SIGNATURE_CHANGE_ALLOWED, Boolean.FALSE)); + } + + private void doTest(boolean duplicates, @Nullable Runnable prepare) throws Exception { + configureByFile(BASE_PATH + getTestName(false) + ".java"); + if (prepare != null) prepare.run(); + boolean success = performAction(true, duplicates); + assertTrue(success); + checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); + } + + private boolean performAction(boolean doRefactor, boolean replaceAllDuplicates) throws Exception { + return performExtractMethod(doRefactor, replaceAllDuplicates, getEditor(), getFile(), getProject()); + } + + public static boolean performExtractMethod(boolean doRefactor, + boolean replaceAllDuplicates, + @NotNull Editor editor, + @NotNull PsiFile file, + @NotNull Project project) throws PrepareFailedException, IncorrectOperationException { + return performExtractMethod(doRefactor, replaceAllDuplicates, editor, file, project, false); + } + + private static boolean performExtractMethod(boolean doRefactor, + boolean replaceAllDuplicates, + @NotNull Editor editor, + @NotNull PsiFile file, + @NotNull Project project, + final boolean extractChainedConstructor) throws PrepareFailedException, IncorrectOperationException { + return performExtractMethod(doRefactor, replaceAllDuplicates, editor, file, project, extractChainedConstructor, + ArrayUtilRt.EMPTY_INT_ARRAY); + } + + private static boolean performExtractMethod(boolean doRefactor, + boolean replaceAllDuplicates, + @NotNull Editor editor, + @NotNull PsiFile file, + @NotNull Project project, + final boolean extractChainedConstructor, + int @NotNull ... disabledParams) throws PrepareFailedException, IncorrectOperationException { + return performExtractMethod(doRefactor, replaceAllDuplicates, editor, file, project, extractChainedConstructor, null, false, null, disabledParams); + } + + private static boolean performExtractMethod(boolean doRefactor, + boolean replaceAllDuplicates, + @NotNull Editor editor, + @NotNull PsiFile file, + @NotNull Project project, + final boolean extractChainedConstructor, + PsiType returnType, + boolean makeStatic, + String newNameOfFirstParam, + int @NotNull ... disabledParams) throws PrepareFailedException, IncorrectOperationException { + return performExtractMethod(doRefactor, replaceAllDuplicates, editor, file, project, extractChainedConstructor, returnType, makeStatic, + newNameOfFirstParam, null, null, disabledParams); + } + + private static boolean performExtractMethod(boolean doRefactor, + boolean replaceAllDuplicates, + @NotNull Editor editor, + @NotNull PsiFile file, + @NotNull Project project, + final boolean extractChainedConstructor, + PsiType returnType, + boolean makeStatic, + String newNameOfFirstParam, + PsiClass targetClass, + @Nullable @PsiModifier.ModifierConstant String methodVisibility, + int @NotNull ... disabledParams) throws PrepareFailedException, IncorrectOperationException { + int startOffset = editor.getSelectionModel().getSelectionStart(); + int endOffset = editor.getSelectionModel().getSelectionEnd(); + + PsiElement[] elements; + PsiExpression expr = CodeInsightUtil.findExpressionInRange(file, startOffset, endOffset); + if (expr != null) { + elements = new PsiElement[]{expr}; + } + else { + elements = CodeInsightUtil.findStatementsInRange(file, startOffset, endOffset); + } + if (elements.length == 0) { + final PsiExpression expression = IntroduceVariableBase.getSelectedExpression(project, file, startOffset, endOffset); + if (expression != null) { + elements = new PsiElement[]{expression}; + } + } + assertTrue(elements.length > 0); + + final ExtractMethodProcessor processor = + new ExtractMethodProcessor(project, editor, elements, null, "Extract Method", "newMethod", null); + processor.setShowErrorDialogs(false); + processor.setChainedConstructor(extractChainedConstructor); + + if (!processor.prepare()) { + return false; + } + + if (doRefactor) { + processor.testTargetClass(targetClass); + processor.testPrepare(returnType, makeStatic); + if (methodVisibility != null) processor.setMethodVisibility(methodVisibility); + processor.testNullability(); + for (int param : disabledParams) { + processor.doNotPassParameter(param); + } + if (newNameOfFirstParam != null) { + processor.changeParamName(0, newNameOfFirstParam); + } + ExtractMethodHandler.extractMethod(project, processor); + } + + if (replaceAllDuplicates) { + final Boolean hasDuplicates = processor.hasDuplicates(); + if (hasDuplicates == null || hasDuplicates.booleanValue()) { + final List duplicates = processor.getDuplicates(); + for (final Match match : duplicates) { + if (!match.getMatchStart().isValid() || !match.getMatchEnd().isValid()) continue; + PsiDocumentManager.getInstance(project).commitAllDocuments(); + ApplicationManager.getApplication().runWriteAction(() -> { + processor.processMatch(match); + }); + } + } + } + + return true; + } +} \ No newline at end of file