Ignoring SAM adapters when checking for unimplemented methods or methods to override.

This commit is contained in:
Evgeny Gerashchenko
2013-06-21 00:01:16 +04:00
parent fd7b29ad48
commit 1f2676becd
13 changed files with 86 additions and 5 deletions
@@ -30,6 +30,7 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.*;
import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.calls.CallResolverUtil;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.JetType;
@@ -433,10 +434,10 @@ public class OverrideResolver {
int implCount = countImplementations(relevantDirectlyOverridden);
if (implCount == 0) {
collectDescriptorsByModality(allFilteredOverriddenDeclarations, abstractNoImpl, Modality.ABSTRACT);
collectNotSynthesizedDescriptorsByModality(allFilteredOverriddenDeclarations, abstractNoImpl, Modality.ABSTRACT);
}
else if (implCount > 1) {
collectDescriptorsByModality(allFilteredOverriddenDeclarations, manyImpl, Modality.OPEN, Modality.FINAL);
collectNotSynthesizedDescriptorsByModality(allFilteredOverriddenDeclarations, manyImpl, Modality.OPEN, Modality.FINAL);
}
}
@@ -450,7 +451,7 @@ public class OverrideResolver {
return implCount;
}
private static void collectDescriptorsByModality(
private static void collectNotSynthesizedDescriptorsByModality(
@NotNull Set<CallableMemberDescriptor> allOverriddenDeclarations,
@NotNull Set<CallableMemberDescriptor> result,
Modality... modalities
@@ -458,7 +459,9 @@ public class OverrideResolver {
Set<Modality> modalitySet = Sets.newHashSet(modalities);
for (CallableMemberDescriptor overridden : allOverriddenDeclarations) {
if (modalitySet.contains(overridden.getModality())) {
result.add(overridden);
if (!CallResolverUtil.isOrOverridesSynthesized(overridden)) {
result.add(overridden);
}
}
}
}
@@ -0,0 +1,18 @@
// FILE: A.java
public interface A {
void foo(Runnable r);
}
// FILE: B.java
public interface B extends A {
public void bar(Runnable r);
}
// FILE: test.kt
class C: B {
override fun foo(r: Runnable?) {
}
override fun bar(r: Runnable?) {
}
}
@@ -3229,6 +3229,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
doTest("compiler/testData/diagnostics/tests/j+k/ambiguousSamAdapters.kt");
}
@TestMetadata("inheritAbstractSamAdapter.kt")
public void testInheritAbstractSamAdapter() throws Exception {
doTest("compiler/testData/diagnostics/tests/j+k/inheritAbstractSamAdapter.kt");
}
@TestMetadata("innerNestedClassFromJava.kt")
public void testInnerNestedClassFromJava() throws Exception {
doTest("compiler/testData/diagnostics/tests/j+k/innerNestedClassFromJava.kt");