TraitImpl origin supported

This commit is contained in:
Andrey Breslav
2014-05-27 20:55:51 +04:00
parent 87b6ad08b5
commit 0413f90bec
2 changed files with 7 additions and 1 deletions
@@ -20,6 +20,8 @@ import com.intellij.psi.PsiElement
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
import org.jetbrains.jet.lang.psi.JetClassOrObject
public enum class MemberKind { FIELD; METHOD }
@@ -27,6 +29,7 @@ public enum class JvmDeclarationOriginKind {
OTHER
PACKAGE_FACADE
PACKAGE_PART
TRAIT_IMPL
}
public class JvmDeclarationOrigin(
@@ -51,3 +54,5 @@ public fun OtherOrigin(descriptor: DeclarationDescriptor?): JvmDeclarationOrigin
public fun PackageFacade(descriptor: PackageFragmentDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(JvmDeclarationOriginKind.PACKAGE_FACADE, null, descriptor)
public fun PackagePart(file: JetFile, descriptor: PackageFragmentDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(JvmDeclarationOriginKind.PACKAGE_PART, file, descriptor)
public fun TraitImpl(element: JetClassOrObject, descriptor: ClassDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(JvmDeclarationOriginKind.TRAIT_IMPL, element, descriptor)
@@ -51,6 +51,7 @@ import java.util.List;
import static org.jetbrains.jet.codegen.AsmUtil.boxType;
import static org.jetbrains.jet.codegen.AsmUtil.isPrimitive;
import static org.jetbrains.jet.codegen.CodegenPackage.OtherOrigin;
import static org.jetbrains.jet.codegen.CodegenPackage.TraitImpl;
import static org.jetbrains.jet.codegen.JvmDeclarationOrigin.NO_ORIGIN;
import static org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED;
import static org.jetbrains.jet.lang.resolve.BindingContext.VARIABLE;
@@ -170,7 +171,7 @@ public abstract class MemberCodegen<T extends JetElement/* TODO: & JetDeclaratio
if (aClass instanceof JetClass && ((JetClass) aClass).isTrait()) {
Type traitImplType = state.getTypeMapper().mapTraitImpl(descriptor);
ClassBuilder traitImplBuilder = state.getFactory().newVisitor(OtherOrigin(aClass, descriptor), traitImplType, aClass.getContainingFile());
ClassBuilder traitImplBuilder = state.getFactory().newVisitor(TraitImpl(aClass, descriptor), traitImplType, aClass.getContainingFile());
ClassContext traitImplContext = parentContext.intoClass(descriptor, OwnerKind.TRAIT_IMPL, state);
new TraitImplBodyCodegen(aClass, traitImplContext, traitImplBuilder, state, parentCodegen).generate();
}