Report "cannot infer visibility" for delegated members

This commit is contained in:
Alexander Udalov
2014-04-17 19:46:37 +04:00
parent 369472a6e2
commit 5e138a606b
4 changed files with 17 additions and 3 deletions
@@ -32,6 +32,7 @@ import org.jetbrains.jet.lang.types.TypeUtils;
import java.util.*;
import static org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor.Kind.DELEGATION;
import static org.jetbrains.jet.lang.diagnostics.Errors.MANY_IMPL_MEMBER_NOT_IMPLEMENTED;
import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE;
@@ -161,8 +162,7 @@ public final class DelegationResolver<T extends CallableMemberDescriptor> {
for (T memberDescriptor : descriptorsToDelegate) {
Modality newModality = memberDescriptor.getModality() == Modality.ABSTRACT ? Modality.OPEN : memberDescriptor.getModality();
@SuppressWarnings("unchecked")
T copy = (T) memberDescriptor.copy(ownerDescriptor, newModality, memberDescriptor.getVisibility(),
CallableMemberDescriptor.Kind.DELEGATION, false);
T copy = (T) memberDescriptor.copy(ownerDescriptor, newModality, Visibilities.INHERITED, DELEGATION, false);
result.add(copy);
}
return result;
@@ -178,7 +178,7 @@ public class OverrideResolver {
return new Function1<CallableMemberDescriptor, Unit>() {
@Override
public Unit invoke(@NotNull CallableMemberDescriptor descriptor) {
DeclarationDescriptor reportOn = descriptor.getKind() == FAKE_OVERRIDE
DeclarationDescriptor reportOn = descriptor.getKind() == FAKE_OVERRIDE || descriptor.getKind() == DELEGATION
? DescriptorUtils.getParentOfType(descriptor, ClassDescriptor.class)
: descriptor;
//noinspection ConstantConditions
@@ -0,0 +1,9 @@
trait A {
internal fun foo()
}
trait B {
protected fun foo()
}
class <!CANNOT_INFER_VISIBILITY!>E(a: A)<!> : A by a, B
@@ -5394,6 +5394,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest("compiler/testData/diagnostics/tests/override/kt4785classObject.kt");
}
@TestMetadata("kt4785delegation.kt")
public void testKt4785delegation() throws Exception {
doTest("compiler/testData/diagnostics/tests/override/kt4785delegation.kt");
}
@TestMetadata("kt880.kt")
public void testKt880() throws Exception {
doTest("compiler/testData/diagnostics/tests/override/kt880.kt");