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 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.diagnostics.Errors.MANY_IMPL_MEMBER_NOT_IMPLEMENTED;
|
||||||
import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE;
|
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) {
|
for (T memberDescriptor : descriptorsToDelegate) {
|
||||||
Modality newModality = memberDescriptor.getModality() == Modality.ABSTRACT ? Modality.OPEN : memberDescriptor.getModality();
|
Modality newModality = memberDescriptor.getModality() == Modality.ABSTRACT ? Modality.OPEN : memberDescriptor.getModality();
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
T copy = (T) memberDescriptor.copy(ownerDescriptor, newModality, memberDescriptor.getVisibility(),
|
T copy = (T) memberDescriptor.copy(ownerDescriptor, newModality, Visibilities.INHERITED, DELEGATION, false);
|
||||||
CallableMemberDescriptor.Kind.DELEGATION, false);
|
|
||||||
result.add(copy);
|
result.add(copy);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ public class OverrideResolver {
|
|||||||
return new Function1<CallableMemberDescriptor, Unit>() {
|
return new Function1<CallableMemberDescriptor, Unit>() {
|
||||||
@Override
|
@Override
|
||||||
public Unit invoke(@NotNull CallableMemberDescriptor descriptor) {
|
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)
|
? DescriptorUtils.getParentOfType(descriptor, ClassDescriptor.class)
|
||||||
: descriptor;
|
: descriptor;
|
||||||
//noinspection ConstantConditions
|
//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");
|
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")
|
@TestMetadata("kt880.kt")
|
||||||
public void testKt880() throws Exception {
|
public void testKt880() throws Exception {
|
||||||
doTest("compiler/testData/diagnostics/tests/override/kt880.kt");
|
doTest("compiler/testData/diagnostics/tests/override/kt880.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user