From 87b6ad08b547118796d84f44f36c706171c409f6 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 27 May 2014 20:54:04 +0400 Subject: [PATCH] Package part and facade origins supported --- .../src/org/jetbrains/jet/codegen/JvmDeclarationOrigin.kt | 8 ++++++++ .../src/org/jetbrains/jet/codegen/PackageCodegen.java | 7 ++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JvmDeclarationOrigin.kt b/compiler/backend/src/org/jetbrains/jet/codegen/JvmDeclarationOrigin.kt index dedba90e1f1..31b685ce4aa 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/JvmDeclarationOrigin.kt +++ b/compiler/backend/src/org/jetbrains/jet/codegen/JvmDeclarationOrigin.kt @@ -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) + diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java index d399d595b6c..555665068c7 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java @@ -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();