diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java index 000ed1eaa44..f17ffe4982b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -536,10 +536,16 @@ public class OverrideResolver { if (memberDescriptor instanceof PropertyDescriptor) { ((PropertyDescriptor)memberDescriptor).setVisibility(visibility); + for (PropertyAccessorDescriptor accessor : ((PropertyDescriptor) memberDescriptor).getAccessors()) { + resolveUnknownVisibilityForMember(null, accessor); + } + } + else if (memberDescriptor instanceof FunctionDescriptorImpl) { + ((FunctionDescriptorImpl)memberDescriptor).setVisibility(visibility); } else { - assert memberDescriptor instanceof FunctionDescriptorImpl; - ((FunctionDescriptorImpl)memberDescriptor).setVisibility(visibility); + assert memberDescriptor instanceof PropertyAccessorDescriptor; + ((PropertyAccessorDescriptor) memberDescriptor).setVisibility(visibility); } } diff --git a/compiler/testData/renderer/InheritedMembersVisibility.kt b/compiler/testData/renderer/InheritedMembersVisibility.kt new file mode 100644 index 00000000000..b4ec77af644 --- /dev/null +++ b/compiler/testData/renderer/InheritedMembersVisibility.kt @@ -0,0 +1,29 @@ +trait A { + val v : Int + public var int : Int + private set + + protected fun f() : Int +} + +class B : A { + override var int: Int = 0 + get set + override fun f(): Int { + } + override val v: Int = 0 + get +} + +//internal trait A defined in root package +//internal abstract val v : jet.Int defined in A +//public abstract var int : jet.Int defined in A +//private abstract fun ( : jet.Int) : Unit defined in A +//protected abstract fun f() : jet.Int defined in A +//internal final class B : A defined in root package +//public open var int : jet.Int defined in B +//public open fun () : jet.Int defined in B +//private open fun ( : jet.Int) : Unit defined in B +//protected open fun f() : jet.Int defined in B +//internal open val v : jet.Int defined in B +//internal open fun () : jet.Int defined in B \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/resolve/DescriptorRendererTest.java b/compiler/tests/org/jetbrains/jet/resolve/DescriptorRendererTest.java index 641088b5b46..f0ed40be001 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/DescriptorRendererTest.java +++ b/compiler/tests/org/jetbrains/jet/resolve/DescriptorRendererTest.java @@ -23,6 +23,8 @@ import org.jetbrains.jet.JetTestCaseBuilder; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.PropertyAccessorDescriptor; +import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; import org.jetbrains.jet.lang.psi.JetElement; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetVisitorVoid; @@ -77,6 +79,10 @@ public class DescriptorRendererTest extends JetLiteFixture { doTest(); } + public void testInheritedMembersVisibility() throws IOException { + doTest(); + } + @Override protected String getTestDataPath() { return JetTestCaseBuilder.getTestDataPathBase() + "/renderer";