Visibilities of property accessors were not resolved for properties overriding others. They had "internal" visibility after analysis passed.

This commit is contained in:
Evgeny Gerashchenko
2012-06-14 17:43:05 +04:00
parent 370f648140
commit 221e412ba7
3 changed files with 43 additions and 2 deletions
@@ -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);
}
}
@@ -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 <set-int>(<set-?> : 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 <get-int>() : jet.Int defined in B
//private open fun <set-int>(<set-?> : 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 <get-v>() : jet.Int defined in B
@@ -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";