DelegationToTraitImpl origin kind supported

This commit is contained in:
Andrey Breslav
2014-05-27 21:08:59 +04:00
parent 03a0a6d17a
commit 3575c375e3
2 changed files with 12 additions and 6 deletions
@@ -66,6 +66,7 @@ import org.jetbrains.org.objectweb.asm.commons.Method;
import java.util.*; import java.util.*;
import static org.jetbrains.jet.codegen.AsmUtil.*; import static org.jetbrains.jet.codegen.AsmUtil.*;
import static org.jetbrains.jet.codegen.CodegenPackage.DelegationToTraitImpl;
import static org.jetbrains.jet.codegen.CodegenPackage.OtherOrigin; import static org.jetbrains.jet.codegen.CodegenPackage.OtherOrigin;
import static org.jetbrains.jet.codegen.JvmCodegenUtil.*; import static org.jetbrains.jet.codegen.JvmCodegenUtil.*;
import static org.jetbrains.jet.codegen.JvmDeclarationOrigin.NO_ORIGIN; import static org.jetbrains.jet.codegen.JvmDeclarationOrigin.NO_ORIGIN;
@@ -1449,7 +1450,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
private void generateDelegationToTraitImpl(@NotNull final FunctionDescriptor traitFun, @NotNull FunctionDescriptor inheritedFun) { private void generateDelegationToTraitImpl(@NotNull final FunctionDescriptor traitFun, @NotNull FunctionDescriptor inheritedFun) {
functionCodegen.generateMethod( functionCodegen.generateMethod(
OtherOrigin(descriptorToDeclaration(bindingContext, traitFun), traitFun), DelegationToTraitImpl(descriptorToDeclaration(bindingContext, traitFun), traitFun),
typeMapper.mapSignature(inheritedFun), typeMapper.mapSignature(inheritedFun),
inheritedFun, inheritedFun,
new FunctionGenerationStrategy.CodegenBased<FunctionDescriptor>(state, inheritedFun) { new FunctionGenerationStrategy.CodegenBased<FunctionDescriptor>(state, inheritedFun) {
@@ -22,6 +22,9 @@ import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
import org.jetbrains.jet.lang.psi.JetFile import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.lang.descriptors.ClassDescriptor import org.jetbrains.jet.lang.descriptors.ClassDescriptor
import org.jetbrains.jet.lang.psi.JetClassOrObject import org.jetbrains.jet.lang.psi.JetClassOrObject
import org.jetbrains.jet.lang.psi.JetDeclaration
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor
import org.jetbrains.jet.codegen.JvmDeclarationOriginKind.*
public enum class MemberKind { FIELD; METHOD } public enum class MemberKind { FIELD; METHOD }
@@ -30,6 +33,7 @@ public enum class JvmDeclarationOriginKind {
PACKAGE_FACADE PACKAGE_FACADE
PACKAGE_PART PACKAGE_PART
TRAIT_IMPL TRAIT_IMPL
DELEGATION_TO_TRAIT_IMPL
} }
public class JvmDeclarationOrigin( public class JvmDeclarationOrigin(
@@ -38,21 +42,22 @@ public class JvmDeclarationOrigin(
val descriptor: DeclarationDescriptor? val descriptor: DeclarationDescriptor?
) { ) {
class object { class object {
public val NO_ORIGIN: JvmDeclarationOrigin = JvmDeclarationOrigin(JvmDeclarationOriginKind.OTHER, null, null) public val NO_ORIGIN: JvmDeclarationOrigin = JvmDeclarationOrigin(OTHER, null, null)
} }
} }
public fun OtherOrigin(element: PsiElement?, descriptor: DeclarationDescriptor?): JvmDeclarationOrigin = public fun OtherOrigin(element: PsiElement?, descriptor: DeclarationDescriptor?): JvmDeclarationOrigin =
if (element == null && descriptor == null) if (element == null && descriptor == null)
JvmDeclarationOrigin.NO_ORIGIN JvmDeclarationOrigin.NO_ORIGIN
else JvmDeclarationOrigin(JvmDeclarationOriginKind.OTHER, element, descriptor) else JvmDeclarationOrigin(OTHER, element, descriptor)
public fun OtherOrigin(element: PsiElement?): JvmDeclarationOrigin = OtherOrigin(element, null) public fun OtherOrigin(element: PsiElement?): JvmDeclarationOrigin = OtherOrigin(element, null)
public fun OtherOrigin(descriptor: DeclarationDescriptor?): JvmDeclarationOrigin = OtherOrigin(null, descriptor) public fun OtherOrigin(descriptor: DeclarationDescriptor?): JvmDeclarationOrigin = OtherOrigin(null, descriptor)
public fun PackageFacade(descriptor: PackageFragmentDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(JvmDeclarationOriginKind.PACKAGE_FACADE, null, descriptor) public fun PackageFacade(descriptor: PackageFragmentDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(PACKAGE_FACADE, null, descriptor)
public fun PackagePart(file: JetFile, descriptor: PackageFragmentDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(JvmDeclarationOriginKind.PACKAGE_PART, file, descriptor) public fun PackagePart(file: JetFile, descriptor: PackageFragmentDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(PACKAGE_PART, file, descriptor)
public fun TraitImpl(element: JetClassOrObject, descriptor: ClassDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(JvmDeclarationOriginKind.TRAIT_IMPL, element, descriptor) public fun TraitImpl(element: JetClassOrObject, descriptor: ClassDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(TRAIT_IMPL, element, descriptor)
public fun DelegationToTraitImpl(element: PsiElement?, descriptor: FunctionDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(DELEGATION_TO_TRAIT_IMPL, element, descriptor)