From 0a622e4440d072f4df1c8276f78c8c9a607ec9f1 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Mon, 19 Jun 2017 14:27:16 +0300 Subject: [PATCH] Rewrite OtherOrigin overloads to prevent further silly problems #KT-18413 Fixed Target versions 1.1.4 --- .../DefaultParameterValueSubstitutor.kt | 3 ++- .../codegen/ImplementationBodyCodegen.java | 10 ++++----- .../kotlin/codegen/MemberCodegen.java | 4 ++-- .../jvm/diagnostics/JvmDeclarationOrigin.kt | 22 +++++++------------ 4 files changed, 17 insertions(+), 22 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt index 33dc672e6a6..564c468f69c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.hasDefaultValue import org.jetbrains.kotlin.resolve.jvm.AsmTypes import org.jetbrains.kotlin.resolve.jvm.annotations.findJvmOverloadsAnnotation import org.jetbrains.kotlin.resolve.jvm.diagnostics.OtherOrigin +import org.jetbrains.kotlin.resolve.jvm.diagnostics.OtherOriginFromPure import org.jetbrains.org.objectweb.asm.Label import org.jetbrains.org.objectweb.asm.Opcodes import org.jetbrains.org.objectweb.asm.Type @@ -136,7 +137,7 @@ class DefaultParameterValueSubstitutor(val state: GenerationState) { (if (functionDescriptor.modality == Modality.FINAL && functionDescriptor !is ConstructorDescriptor) Opcodes.ACC_FINAL else 0) or (if (remainingParameters.lastOrNull()?.varargElementType != null) Opcodes.ACC_VARARGS else 0) val signature = typeMapper.mapSignatureWithCustomParameters(functionDescriptor, contextKind, remainingParameters, false) - val mv = classBuilder.newMethod(OtherOrigin(methodElement, functionDescriptor), flags, + val mv = classBuilder.newMethod(OtherOriginFromPure(methodElement, functionDescriptor), flags, signature.asmMethod.name, signature.asmMethod.descriptor, signature.genericsSignature, diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java index 0eb2e3b6444..fcd6a2382a8 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java @@ -678,7 +678,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { ) { Type thisDescriptorType = typeMapper.mapType(descriptor); - functionCodegen.generateMethod(JvmDeclarationOriginKt.OtherOrigin(myClass, function), function, new FunctionGenerationStrategy() { + functionCodegen.generateMethod(JvmDeclarationOriginKt.OtherOriginFromPure(myClass, function), function, new FunctionGenerationStrategy() { @Override public void generateBody( @NotNull MethodVisitor mv, @@ -778,7 +778,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { FunctionDescriptor valuesFunction = CollectionsKt.single(descriptor.getStaticScope().getContributedFunctions(ENUM_VALUES, NoLookupLocation.FROM_BACKEND)); MethodVisitor mv = v.newMethod( - JvmDeclarationOriginKt.OtherOrigin(myClass, valuesFunction), ACC_PUBLIC | ACC_STATIC, ENUM_VALUES.asString(), + JvmDeclarationOriginKt.OtherOriginFromPure(myClass, valuesFunction), ACC_PUBLIC | ACC_STATIC, ENUM_VALUES.asString(), "()" + type.getDescriptor(), null, null ); if (!state.getClassBuilderMode().generateBodies) return; @@ -796,7 +796,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { CollectionsKt.single(descriptor.getStaticScope().getContributedFunctions(ENUM_VALUE_OF, NoLookupLocation.FROM_BACKEND), DescriptorUtilsKt::isEnumValueOfMethod); MethodVisitor mv = - v.newMethod(JvmDeclarationOriginKt.OtherOrigin(myClass, valueOfFunction), ACC_PUBLIC | ACC_STATIC, ENUM_VALUE_OF.asString(), + v.newMethod(JvmDeclarationOriginKt.OtherOriginFromPure(myClass, valueOfFunction), ACC_PUBLIC | ACC_STATIC, ENUM_VALUE_OF.asString(), "(Ljava/lang/String;)" + classAsmType.getDescriptor(), null, null); if (!state.getClassBuilderMode().generateBodies) return; @@ -814,7 +814,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { if (isNonCompanionObject(descriptor)) { StackValue.Field field = StackValue.singletonViaInstance(descriptor, typeMapper); - v.newField(JvmDeclarationOriginKt.OtherOrigin(myClass), + v.newField(JvmDeclarationOriginKt.OtherOriginFromPure(myClass), ACC_PUBLIC | ACC_STATIC | ACC_FINAL, field.name, field.type.getDescriptor(), null, null); @@ -1560,7 +1560,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { InstructionAdapter iv = codegen.v; Type arrayAsmType = typeMapper.mapType(DescriptorUtilsKt.getBuiltIns(descriptor).getArrayType(INVARIANT, descriptor.getDefaultType())); - v.newField(JvmDeclarationOriginKt.OtherOrigin(myClass), ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, ENUM_VALUES_FIELD_NAME, + v.newField(JvmDeclarationOriginKt.OtherOriginFromPure(myClass), ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, ENUM_VALUES_FIELD_NAME, arrayAsmType.getDescriptor(), null, null); iv.iconst(enumEntries.size()); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index 0dc64fea9f4..e97fa53a854 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -300,7 +300,7 @@ public abstract class MemberCodegen