Jvm backend: specify declaration origin of generated methods
Allow to distinguish collection stub methods and augmented kotlin api methods
This commit is contained in:
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
|||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperclassesWithoutAny
|
import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperclassesWithoutAny
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.overriddenTreeUniqueAsSequence
|
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.resolve.jvm.jvmSignature.JvmMethodGenericSignature
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
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 access = ACC_PUBLIC or (if (synthetic) ACC_SYNTHETIC else 0)
|
||||||
val asmMethod = signature.asmMethod
|
val asmMethod = signature.asmMethod
|
||||||
val genericSignature = if (synthetic) null else signature.genericsSignature
|
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()
|
mv.visitCode()
|
||||||
AsmUtil.genThrow(
|
AsmUtil.genThrow(
|
||||||
InstructionAdapter(mv),
|
InstructionAdapter(mv),
|
||||||
|
|||||||
@@ -839,7 +839,7 @@ public class FunctionCodegen {
|
|||||||
if (!isThereOverriddenInKotlinClass(descriptor)) {
|
if (!isThereOverriddenInKotlinClass(descriptor)) {
|
||||||
Method method = typeMapper.mapAsmMethod(descriptor);
|
Method method = typeMapper.mapAsmMethod(descriptor);
|
||||||
int flags = ACC_ABSTRACT | getVisibilityAccessFlag(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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -39,7 +39,9 @@ enum class JvmDeclarationOriginKind {
|
|||||||
BRIDGE,
|
BRIDGE,
|
||||||
MULTIFILE_CLASS,
|
MULTIFILE_CLASS,
|
||||||
MULTIFILE_CLASS_PART,
|
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(
|
class JvmDeclarationOrigin(
|
||||||
@@ -91,3 +93,7 @@ fun Delegation(element: PsiElement?, descriptor: FunctionDescriptor): JvmDeclara
|
|||||||
fun SamDelegation(descriptor: FunctionDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(SAM_DELEGATION, null, descriptor)
|
fun SamDelegation(descriptor: FunctionDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(SAM_DELEGATION, null, descriptor)
|
||||||
|
|
||||||
fun Synthetic(element: PsiElement?, descriptor: CallableMemberDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(SYNTHETIC, element, 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)
|
||||||
|
|||||||
Reference in New Issue
Block a user