Report "cannot infer visibility" for delegated members
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user