diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java index 481fba30e65..c75f4a47714 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java @@ -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 { 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; 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 4405efa88a6..8002c048421 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -178,7 +178,7 @@ public class OverrideResolver { return new Function1() { @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 diff --git a/compiler/testData/diagnostics/tests/override/kt4785delegation.kt b/compiler/testData/diagnostics/tests/override/kt4785delegation.kt new file mode 100644 index 00000000000..77e944c980e --- /dev/null +++ b/compiler/testData/diagnostics/tests/override/kt4785delegation.kt @@ -0,0 +1,9 @@ +trait A { + internal fun foo() +} + +trait B { + protected fun foo() +} + +class E(a: A) : A by a, B diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 80c7ed55937..a63240f5042 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -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");