diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FilterAnnotations.java b/java/java-tests/testData/refactoring/extractMethodNew/FilterAnnotations.java
new file mode 100644
index 000000000000..b15883c713ec
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodNew/FilterAnnotations.java
@@ -0,0 +1,15 @@
+import org.intellij.lang.annotations.Language;
+import org.jetbrains.annotations.Nls;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target({ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.PARAMETER})
+@interface Anno {}
+
+class Test {
+ String test(@Anno @Language("HTML") @Nls String sample){
+ sample = "EOF";
+ return sample;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodNew/FilterAnnotations_after.java b/java/java-tests/testData/refactoring/extractMethodNew/FilterAnnotations_after.java
new file mode 100644
index 000000000000..08d420867e86
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodNew/FilterAnnotations_after.java
@@ -0,0 +1,21 @@
+import org.intellij.lang.annotations.Language;
+import org.jetbrains.annotations.Nls;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target({ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.PARAMETER})
+@interface Anno {}
+
+class Test {
+ String test(@Anno @Language("HTML") @Nls String sample){
+ sample = "EOF";
+ return newMethod(sample);
+ }
+
+ @Language("HTML")
+ @Nls
+ private String newMethod(@Language("HTML") @Nls String sample) {
+ return sample;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodNew/KeepDeclarationWithAnnotations.java b/java/java-tests/testData/refactoring/extractMethodNew/KeepDeclarationWithAnnotations.java
new file mode 100644
index 000000000000..b7c92a553682
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodNew/KeepDeclarationWithAnnotations.java
@@ -0,0 +1,13 @@
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target({ElementType.LOCAL_VARIABLE})
+@interface Anno {}
+
+class Test {
+ void test() {
+ @Anno String s;
+ s = "";
+ s = "external assign";
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodNew/KeepDeclarationWithAnnotations_after.java b/java/java-tests/testData/refactoring/extractMethodNew/KeepDeclarationWithAnnotations_after.java
new file mode 100644
index 000000000000..eb99d14116a1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodNew/KeepDeclarationWithAnnotations_after.java
@@ -0,0 +1,18 @@
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target({ElementType.LOCAL_VARIABLE})
+@interface Anno {}
+
+class Test {
+ void test() {
+ newMethod();
+ @Anno String s;
+ s = "external assign";
+ }
+
+ private void newMethod() {
+ @Anno String s;
+ s = "";
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullabilityAnnotationOverridden.java b/java/java-tests/testData/refactoring/extractMethodNew/NullabilityAnnotationOverridden.java
new file mode 100644
index 000000000000..40b812e50c87
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodNew/NullabilityAnnotationOverridden.java
@@ -0,0 +1,9 @@
+import org.jetbrains.annotations.Nullable;
+
+class Test {
+ void test(){
+ @Nullable String s = null;
+ if (s == null) return;
+ System.out.println(s);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullabilityAnnotationOverridden_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NullabilityAnnotationOverridden_after.java
new file mode 100644
index 000000000000..9e2a84abae75
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodNew/NullabilityAnnotationOverridden_after.java
@@ -0,0 +1,14 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+class Test {
+ void test(){
+ @Nullable String s = null;
+ if (s == null) return;
+ newMethod(s);
+ }
+
+ private void newMethod(@NotNull String s) {
+ System.out.println(s);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullabilityIsTypeAnnotation.java b/java/java-tests/testData/refactoring/extractMethodNew/NullabilityIsTypeAnnotation.java
new file mode 100644
index 000000000000..2cc410e6a27b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodNew/NullabilityIsTypeAnnotation.java
@@ -0,0 +1,13 @@
+import org.jetbrains.annotations.Nullable;
+
+class Test {
+ static class A {
+ static class B {}
+ }
+
+ void test(){
+ @Nullable A.B x = new A.B();
+ if (x == null) return;
+ System.out.println(x);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodNew/NullabilityIsTypeAnnotation_after.java b/java/java-tests/testData/refactoring/extractMethodNew/NullabilityIsTypeAnnotation_after.java
new file mode 100644
index 000000000000..36bd6129a0ac
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractMethodNew/NullabilityIsTypeAnnotation_after.java
@@ -0,0 +1,18 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+class Test {
+ static class A {
+ static class B {}
+ }
+
+ void test(){
+ @Nullable A.B x = new A.B();
+ if (x == null) return;
+ newMethod(x);
+ }
+
+ private void newMethod(A.@NotNull B x) {
+ System.out.println(x);
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TypeUseAnnotationsOnParameter.java b/java/java-tests/testData/refactoring/extractMethodNew/SkipCustomAnnotations.java
similarity index 100%
rename from java/java-tests/testData/refactoring/extractMethodNew/TypeUseAnnotationsOnParameter.java
rename to java/java-tests/testData/refactoring/extractMethodNew/SkipCustomAnnotations.java
diff --git a/java/java-tests/testData/refactoring/extractMethodNew/TypeUseAnnotationsOnParameter_after.java b/java/java-tests/testData/refactoring/extractMethodNew/SkipCustomAnnotations_after.java
similarity index 91%
rename from java/java-tests/testData/refactoring/extractMethodNew/TypeUseAnnotationsOnParameter_after.java
rename to java/java-tests/testData/refactoring/extractMethodNew/SkipCustomAnnotations_after.java
index b4c5ea76d0c3..0515bf2dbc47 100644
--- a/java/java-tests/testData/refactoring/extractMethodNew/TypeUseAnnotationsOnParameter_after.java
+++ b/java/java-tests/testData/refactoring/extractMethodNew/SkipCustomAnnotations_after.java
@@ -17,7 +17,7 @@ class Test {
newMethod(s);
}
- private void newMethod(@Anno String s) {
+ private void newMethod(String s) {
if (s == null) {}
}
}
diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodNewTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodNewTest.java
index 6e524159779a..0394d503d028 100644
--- a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodNewTest.java
+++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodNewTest.java
@@ -1208,7 +1208,23 @@ public class ExtractMethodNewTest extends LightJavaCodeInsightTestCase {
doTest();
}
- public void testTypeUseAnnotationsOnParameter() throws Exception {
+ public void testSkipCustomAnnotations() throws Exception {
+ doTest();
+ }
+
+ public void testNullabilityIsTypeAnnotation() throws Exception {
+ doTest();
+ }
+
+ public void testKeepDeclarationWithAnnotations() throws Exception {
+ doTest();
+ }
+
+ public void testFilterAnnotations() throws Exception {
+ doTest();
+ }
+
+ public void testNullabilityAnnotationOverridden() throws Exception {
doTest();
}