Support inheritance from java 8 interfaces

#KT-5969 In Progress
This commit is contained in:
Michael Bogdanov
2014-10-09 19:16:56 +04:00
parent 3613fb746c
commit 2a1520228e
4 changed files with 28 additions and 2 deletions
@@ -49,6 +49,7 @@ import org.jetbrains.jet.lang.resolve.calls.model.VarargValueArgument;
import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants;
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaCallableMemberDescriptor;
import org.jetbrains.jet.lang.resolve.java.diagnostics.JvmDeclarationOrigin;
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmClassSignature;
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind;
@@ -1412,8 +1413,12 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
private void generateTraitMethods() {
if (JetPsiUtil.isTrait(myClass)) return;
for(Map.Entry<FunctionDescriptor, FunctionDescriptor> entry : CodegenUtil.getTraitMethods(descriptor).entrySet()) {
generateDelegationToTraitImpl(entry.getKey(), entry.getValue());
for (Map.Entry<FunctionDescriptor, FunctionDescriptor> entry : CodegenUtil.getTraitMethods(descriptor).entrySet()) {
FunctionDescriptor traitFun = entry.getKey();
//skip java 8 default methods
if (!(traitFun instanceof JavaCallableMemberDescriptor)) {
generateDelegationToTraitImpl(traitFun, entry.getValue());
}
}
}
@@ -0,0 +1,4 @@
public interface MyInt {
String test();
}
@@ -0,0 +1,11 @@
trait A : MyInt {
override public fun test(): String? {
return "OK"
}
}
class B: A
fun box() : String {
return B().test()!!
}
@@ -45,6 +45,12 @@ public class BlackBoxWithJavaCodegenTestGenerated extends AbstractBlackBoxCodege
doTestWithJava(fileName);
}
@TestMetadata("trait")
public void testTrait() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithJava/trait/");
doTestWithJava(fileName);
}
@TestMetadata("compiler/testData/codegen/boxWithJava/platformStatic")
@TestDataPath("$PROJECT_ROOT")
@InnerTestClasses({})