diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java index 0904ce70aa3..6f8f844d7c6 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java @@ -121,7 +121,8 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns } private static JetElement overrideProperty(Project project, JetFile file, PropertyDescriptor descriptor) { - StringBuilder bodyBuilder = new StringBuilder("override "); + StringBuilder bodyBuilder = new StringBuilder(); + bodyBuilder.append(displayableVisibility(descriptor)).append("override "); if (descriptor.isVar()) { bodyBuilder.append("var "); } @@ -142,9 +143,9 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns } private static JetElement overrideFunction(Project project, JetFile file, SimpleFunctionDescriptor descriptor) { - StringBuilder bodyBuilder = new StringBuilder("override fun "); - bodyBuilder.append(descriptor.getName()); - bodyBuilder.append("("); + StringBuilder bodyBuilder = new StringBuilder(); + bodyBuilder.append(displayableVisibility(descriptor)); + bodyBuilder.append("override fun ").append(descriptor.getName()).append("("); boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT; StringBuilder delegationBuilder = new StringBuilder(); if (isAbstractFun) { @@ -207,6 +208,11 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns return null; } + private static String displayableVisibility(MemberDescriptor descriptor) { + Visibility visibility = descriptor.getVisibility(); + return visibility != Visibilities.INTERNAL ? visibility.toString() + " ": ""; + } + private MemberChooser showOverrideImplementChooser(Project project, DescriptorClassMember[] members) { final MemberChooser chooser = new MemberChooser(members, true, true, project); diff --git a/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt b/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt new file mode 100644 index 00000000000..1f2c248aff6 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt @@ -0,0 +1,15 @@ +open class A() { + protected open fun protectedFun() { } + internal open fun internalFun() {} + public open fun publicFun() {} +} + +trait B { + protected open val protectedProperty : Int + internal open val internalProperty : Int + public open val publicProperty : Int +} + +class C : A(), B { + +} diff --git a/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt.after b/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt.after new file mode 100644 index 00000000000..ba61f1eb507 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt.after @@ -0,0 +1,27 @@ +open class A() { + protected open fun protectedFun() { } + internal open fun internalFun() {} + public open fun publicFun() {} +} + +trait B { + protected open val protectedProperty : Int + internal open val internalProperty : Int + public open val publicProperty : Int +} + +class C : A(), B { + + override fun internalFun() { + super.internalFun() + } + override val internalProperty : Int = 0 + protected override fun protectedFun() { + super.protectedFun() + } + protected override val protectedProperty : Int = 0 + public override fun publicFun() { + super.publicFun() + } + public override val publicProperty : Int = 0 +} diff --git a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethod/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethod/foo/Impl.kt.after index eafc5366e34..d40ccb6f92a 100644 --- a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethod/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethod/foo/Impl.kt.after @@ -2,7 +2,7 @@ import foo.Intf class Impl(): Intf { - override fun getFooBar() : String? { + public override fun getFooBar() : String? { throw UnsupportedOperationException() } } diff --git a/idea/testData/codeInsight/overrideImplement/javaParameters/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/javaParameters/foo/Impl.kt.after index 3ae321d7e30..60c1ff18f62 100644 --- a/idea/testData/codeInsight/overrideImplement/javaParameters/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/javaParameters/foo/Impl.kt.after @@ -2,7 +2,7 @@ import foo.Intf class Impl(): Intf { - override fun fooBar(i : Int, s : Array?, foo : Any?) { + public override fun fooBar(i : Int, s : Array?, foo : Any?) { throw UnsupportedOperationException() } } diff --git a/idea/testData/codeInsight/overrideImplement/overrideJavaMethod/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/overrideJavaMethod/foo/Impl.kt.after index b7f2f9b943a..821acb2d542 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideJavaMethod/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideJavaMethod/foo/Impl.kt.after @@ -2,7 +2,7 @@ import foo.A class C : A() { - override fun getAnswer(array : Array?, number : Int, value : Any?) : Int { + public override fun getAnswer(array : Array?, number : Int, value : Any?) : Int { return super.getAnswer(array, number, value) } } diff --git a/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt b/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt index 25bc81d3009..8a8e9fe779a 100644 --- a/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt +++ b/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt @@ -12,4 +12,4 @@ class SomeTest : Test { fun some() { } -} \ No newline at end of file +} diff --git a/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after b/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after index a2d1f568c71..ae88d9d2c18 100644 --- a/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after +++ b/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after @@ -5,10 +5,10 @@ trait Test { class SomeTest : Test { val hello = 12 - override fun test() { + public override fun test() { throw UnsupportedOperationException() } - override val testProp : Int = 0 + protected override val testProp : Int = 0 /** * test @@ -16,4 +16,4 @@ class SomeTest : Test { fun some() { } -} \ No newline at end of file +} diff --git a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java index 947c1ed9f03..eb35f51df8f 100644 --- a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java @@ -122,6 +122,10 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase { doOverrideDirectoryTest(); } + public void testInheritVisibilities() { + doMultiOverrideFileTest(); + } + private void doImplementFileTest() { doFileTest(new ImplementMethodsHandler()); }