Support inheritance from java 8 interfaces
#KT-5969 In Progress
This commit is contained in:
@@ -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.AsmTypeConstants;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
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.diagnostics.JvmDeclarationOrigin;
|
||||||
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmClassSignature;
|
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmClassSignature;
|
||||||
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind;
|
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind;
|
||||||
@@ -1412,8 +1413,12 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
private void generateTraitMethods() {
|
private void generateTraitMethods() {
|
||||||
if (JetPsiUtil.isTrait(myClass)) return;
|
if (JetPsiUtil.isTrait(myClass)) return;
|
||||||
|
|
||||||
for(Map.Entry<FunctionDescriptor, FunctionDescriptor> entry : CodegenUtil.getTraitMethods(descriptor).entrySet()) {
|
for (Map.Entry<FunctionDescriptor, FunctionDescriptor> entry : CodegenUtil.getTraitMethods(descriptor).entrySet()) {
|
||||||
generateDelegationToTraitImpl(entry.getKey(), entry.getValue());
|
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()!!
|
||||||
|
}
|
||||||
+6
@@ -45,6 +45,12 @@ public class BlackBoxWithJavaCodegenTestGenerated extends AbstractBlackBoxCodege
|
|||||||
doTestWithJava(fileName);
|
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")
|
@TestMetadata("compiler/testData/codegen/boxWithJava/platformStatic")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@InnerTestClasses({})
|
@InnerTestClasses({})
|
||||||
|
|||||||
Reference in New Issue
Block a user