From 8437fb24b4bf28cc7cf234c9486d30a77db8369f Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Mon, 23 Apr 2018 19:58:29 +0200 Subject: [PATCH] generate method: insert Override when super method is accessible (IDEA-189949) --- .../codeInsight/generation/GenerateMembersUtil.java | 2 +- .../inaccessibleSuperMethod/after/a/Test.java | 5 +++++ .../inaccessibleSuperMethod/after/b/B.java | 13 +++++++++++++ .../inaccessibleSuperMethod/before/a/Test.java | 5 +++++ .../inaccessibleSuperMethod/before/b/B.java | 5 +++++ .../java/refactoring/EncapsulateFieldsTest.java | 4 ++++ 6 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/after/a/Test.java create mode 100644 java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/after/b/B.java create mode 100644 java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/before/a/Test.java create mode 100644 java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/before/b/B.java diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java index 7e4c747ea141..3890aa4a44b0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -719,7 +719,7 @@ public class GenerateMembersUtil { if (JavaCodeStyleSettings.getInstance(targetClass.getContainingFile()).INSERT_OVERRIDE_ANNOTATION) { PsiMethod superMethod = targetClass.findMethodBySignature(generated, true); - if (superMethod != null && superMethod.getContainingClass() != targetClass) { + if (superMethod != null && superMethod.getContainingClass() != targetClass && PsiUtil.isAccessible(superMethod, targetClass, null)) { OverrideImplementUtil.annotateOnOverrideImplement(generated, targetClass, superMethod, true); } } diff --git a/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/after/a/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/after/a/Test.java new file mode 100644 index 000000000000..21c72e80f5a6 --- /dev/null +++ b/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/after/a/Test.java @@ -0,0 +1,5 @@ +package a; + +public class A { + int getFoo(); +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/after/b/B.java b/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/after/b/B.java new file mode 100644 index 000000000000..643d9ef489ce --- /dev/null +++ b/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/after/b/B.java @@ -0,0 +1,13 @@ +package b; +import a.A; +class B extends A { + int foo; + + public int getFoo() { + return foo; + } + + public void setFoo(int foo) { + this.foo = foo; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/before/a/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/before/a/Test.java new file mode 100644 index 000000000000..21c72e80f5a6 --- /dev/null +++ b/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/before/a/Test.java @@ -0,0 +1,5 @@ +package a; + +public class A { + int getFoo(); +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/before/b/B.java b/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/before/b/B.java new file mode 100644 index 000000000000..6301e9583356 --- /dev/null +++ b/java/java-tests/testData/refactoring/encapsulateFields/inaccessibleSuperMethod/before/b/B.java @@ -0,0 +1,5 @@ +package b; +import a.A; +class B extends A { + int foo; +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/EncapsulateFieldsTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/EncapsulateFieldsTest.java index 0bbf6829029a..0b9d5f887c58 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/EncapsulateFieldsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/EncapsulateFieldsTest.java @@ -61,6 +61,10 @@ public class EncapsulateFieldsTest extends MultiFileTestCase { doTest("i", "B.A", null); } + public void testInaccessibleSuperMethod() { + doTest("foo", "b.B", null); + } + public void testHideOuterclassMethod() { doTest("i", "A.B", "There is already a method A.getI() which would be hidden by generated getter"); }