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
@@ -19,6 +19,7 @@ package org.jetbrains.jet.plugin.codeInsight;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor;
import org.jetbrains.jet.lang.resolve.OverrideResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolverUtil;
import java.util.HashSet;
import java.util.Set;
@@ -33,7 +34,9 @@ public class OverrideMethodsHandler extends OverrideImplementMethodsHandler {
Set<CallableMemberDescriptor> result = new HashSet<CallableMemberDescriptor>();
for (CallableMemberDescriptor superMethod : superMethods) {
if (superMethod.getModality().isOverridable()) {
result.add(superMethod);
if (!CallResolverUtil.isOrOverridesSynthesized(superMethod)) {
result.add(superMethod);
}
}
}
return result;
@@ -0,0 +1,5 @@
package foo;
public interface A {
void foo(Runnable r);
}
@@ -0,0 +1,4 @@
package foo;
public interface B extends A {
}
@@ -0,0 +1,5 @@
package foo
class Impl: B {
<caret>
}
@@ -0,0 +1,8 @@
package foo
class Impl: B {
public override fun foo(r: Runnable?) {
throw UnsupportedOperationException()
}
}
@@ -0,0 +1,5 @@
package foo;
public class A {
public void foo(Runnable r) {}
}
@@ -0,0 +1,4 @@
package foo;
public class B extends A {
}
@@ -0,0 +1,5 @@
package foo
class Impl: B() {
<caret>
}
@@ -0,0 +1,8 @@
package foo
class Impl: B() {
public override fun foo(r: Runnable?) {
super<B>.foo(r)
}
}
@@ -154,6 +154,14 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase {
doMultiOverrideFileTest();
}
public void testImplementSamAdapters() {
doImplementDirectoryTest();
}
public void testOverrideSamAdapters() {
doOverrideDirectoryTest("foo");
}
private void doImplementFileTest() {
doFileTest(new ImplementMethodsHandler());
}