Package part and facade origins supported
This commit is contained in:
@@ -18,11 +18,15 @@ package org.jetbrains.jet.codegen
|
||||
|
||||
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
|
||||
|
||||
public enum class MemberKind { FIELD; METHOD }
|
||||
|
||||
public enum class JvmDeclarationOriginKind {
|
||||
OTHER
|
||||
PACKAGE_FACADE
|
||||
PACKAGE_PART
|
||||
}
|
||||
|
||||
public class JvmDeclarationOrigin(
|
||||
@@ -43,3 +47,7 @@ public fun OtherOrigin(element: PsiElement?, descriptor: DeclarationDescriptor?)
|
||||
public fun OtherOrigin(element: PsiElement?): JvmDeclarationOrigin = OtherOrigin(element, null)
|
||||
|
||||
public fun OtherOrigin(descriptor: DeclarationDescriptor?): JvmDeclarationOrigin = OtherOrigin(null, descriptor)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
@@ -60,7 +60,8 @@ import org.jetbrains.org.objectweb.asm.Type;
|
||||
import java.util.*;
|
||||
|
||||
import static org.jetbrains.jet.codegen.AsmUtil.asmDescByFqNameWithoutInnerClasses;
|
||||
import static org.jetbrains.jet.codegen.CodegenPackage.OtherOrigin;
|
||||
import static org.jetbrains.jet.codegen.CodegenPackage.PackageFacade;
|
||||
import static org.jetbrains.jet.codegen.CodegenPackage.PackagePart;
|
||||
import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver;
|
||||
import static org.jetbrains.jet.lang.resolve.java.PackageClassUtils.getPackageClassFqName;
|
||||
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
||||
@@ -91,7 +92,7 @@ public class PackageCodegen {
|
||||
String className = AsmUtil.internalNameByFqNameWithoutInnerClasses(getPackageClassFqName(fqName));
|
||||
ClassBuilder v = PackageCodegen.this.state.getFactory()
|
||||
.newVisitor(
|
||||
OtherOrigin(packageFragment),
|
||||
PackageFacade(packageFragment == null ? compiledPackageFragment : packageFragment),
|
||||
Type.getObjectType(className), PackagePartClassUtils.getPackageFilesWithCallables(files));
|
||||
v.defineClass(sourceFile, V1_6,
|
||||
ACC_PUBLIC | ACC_FINAL,
|
||||
@@ -282,7 +283,7 @@ public class PackageCodegen {
|
||||
|
||||
if (!generatePackagePart) return null;
|
||||
|
||||
ClassBuilder builder = state.getFactory().newVisitor(OtherOrigin(file, packageFragment), packagePartType, file);
|
||||
ClassBuilder builder = state.getFactory().newVisitor(PackagePart(file, packageFragment), packagePartType, file);
|
||||
|
||||
new PackagePartCodegen(builder, file, packagePartType, packagePartContext, state).generate();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user