From 4bdfb8c646905ff4186433aac4fd540b9b09a4b9 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 10 May 2017 20:06:28 +0300 Subject: [PATCH] Jvm backend: specify declaration origin of generated methods Allow to distinguish collection stub methods and augmented kotlin api methods --- .../kotlin/codegen/CollectionStubMethodGenerator.kt | 4 ++-- .../src/org/jetbrains/kotlin/codegen/FunctionCodegen.java | 2 +- .../resolve/jvm/diagnostics/JvmDeclarationOrigin.kt | 8 +++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt index b30b09cf5e9..0608c4b8f82 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt @@ -36,7 +36,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperclassesWithoutAny import org.jetbrains.kotlin.resolve.descriptorUtil.overriddenTreeUniqueAsSequence -import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin +import org.jetbrains.kotlin.resolve.jvm.diagnostics.CollectionStub import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodGenericSignature import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.checker.KotlinTypeChecker @@ -337,7 +337,7 @@ class CollectionStubMethodGenerator( val access = ACC_PUBLIC or (if (synthetic) ACC_SYNTHETIC else 0) val asmMethod = signature.asmMethod val genericSignature = if (synthetic) null else signature.genericsSignature - val mv = v.newMethod(JvmDeclarationOrigin.NO_ORIGIN, access, asmMethod.name, asmMethod.descriptor, genericSignature, null) + val mv = v.newMethod(CollectionStub, access, asmMethod.name, asmMethod.descriptor, genericSignature, null) mv.visitCode() AsmUtil.genThrow( InstructionAdapter(mv), diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index 59764fa09cb..528f5ee42d6 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -839,7 +839,7 @@ public class FunctionCodegen { if (!isThereOverriddenInKotlinClass(descriptor)) { Method method = typeMapper.mapAsmMethod(descriptor); int flags = ACC_ABSTRACT | getVisibilityAccessFlag(descriptor); - v.newMethod(JvmDeclarationOriginKt.OtherOrigin(overridden), flags, method.getName(), method.getDescriptor(), null, null); + v.newMethod(JvmDeclarationOriginKt.AugmentedBuiltInApi(overridden), flags, method.getName(), method.getDescriptor(), null, null); } } } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/JvmDeclarationOrigin.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/JvmDeclarationOrigin.kt index 0407f0d8832..d7e1fec728d 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/JvmDeclarationOrigin.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/JvmDeclarationOrigin.kt @@ -39,7 +39,9 @@ enum class JvmDeclarationOriginKind { BRIDGE, MULTIFILE_CLASS, MULTIFILE_CLASS_PART, - SYNTHETIC // this means that there's no proper descriptor for this jvm declaration + SYNTHETIC, // this means that there's no proper descriptor for this jvm declaration, + COLLECTION_STUB, + AUGMENTED_BUILTIN_API } class JvmDeclarationOrigin( @@ -91,3 +93,7 @@ fun Delegation(element: PsiElement?, descriptor: FunctionDescriptor): JvmDeclara fun SamDelegation(descriptor: FunctionDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(SAM_DELEGATION, null, descriptor) fun Synthetic(element: PsiElement?, descriptor: CallableMemberDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(SYNTHETIC, element, descriptor) + +val CollectionStub = JvmDeclarationOrigin(COLLECTION_STUB, null, null) + +fun AugmentedBuiltInApi(descriptor: CallableDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(AUGMENTED_BUILTIN_API, null, descriptor)