From f1196a8c5947d1a14106ed99a284436efcc2d682 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 22 May 2014 07:39:05 +0400 Subject: [PATCH] Descriptors added to newField() signature --- .../jetbrains/jet/codegen/AbstractClassBuilder.java | 2 ++ .../src/org/jetbrains/jet/codegen/AsmUtil.java | 2 +- .../src/org/jetbrains/jet/codegen/ClassBuilder.java | 2 ++ .../src/org/jetbrains/jet/codegen/ClosureCodegen.java | 2 +- .../jetbrains/jet/codegen/DelegatingClassBuilder.java | 7 +++++-- .../jet/codegen/ImplementationBodyCodegen.java | 11 ++++++----- .../src/org/jetbrains/jet/codegen/MemberCodegen.java | 2 +- .../org/jetbrains/jet/codegen/PropertyCodegen.java | 2 +- .../org/jetbrains/jet/codegen/SamWrapperCodegen.java | 1 + .../src/org/jetbrains/jet/codegen/ScriptCodegen.java | 9 ++++++--- .../jet/codegen/inline/RemappingClassBuilder.java | 4 +++- .../org/jetbrains/jet/asJava/StubClassBuilder.java | 4 +++- 12 files changed, 32 insertions(+), 16 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AbstractClassBuilder.java b/compiler/backend/src/org/jetbrains/jet/codegen/AbstractClassBuilder.java index e13efaf71ca..f2fb09c7e8c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AbstractClassBuilder.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AbstractClassBuilder.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.codegen; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.org.objectweb.asm.*; public abstract class AbstractClassBuilder implements ClassBuilder { @@ -47,6 +48,7 @@ public abstract class AbstractClassBuilder implements ClassBuilder { @NotNull public FieldVisitor newField( @Nullable PsiElement origin, + @Nullable DeclarationDescriptor descriptor, int access, @NotNull String name, @NotNull String desc, diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java index c2c133a3d66..20ede7597b0 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java @@ -373,7 +373,7 @@ public class AsmUtil { //noinspection PointlessBitwiseExpression int access = NO_FLAG_PACKAGE_PRIVATE | ACC_SYNTHETIC | ACC_FINAL; for (Pair field : allFields) { - builder.newField(null, access, field.first, field.second.getDescriptor(), null, null); + builder.newField(null, null, access, field.first, field.second.getDescriptor(), null, null); } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilder.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilder.java index 24474ab4936..c791fc94f03 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilder.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilder.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.codegen; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.org.objectweb.asm.AnnotationVisitor; import org.jetbrains.org.objectweb.asm.ClassVisitor; import org.jetbrains.org.objectweb.asm.FieldVisitor; @@ -28,6 +29,7 @@ public interface ClassBuilder { @NotNull FieldVisitor newField( @Nullable PsiElement origin, + @Nullable DeclarationDescriptor descriptor, int access, @NotNull String name, @NotNull String desc, diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java index de74f6ce654..97b2a5c8e0b 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java @@ -203,7 +203,7 @@ public class ClosureCodegen extends ParentCodegenAware { MethodVisitor mv = cv.newMethod(fun, ACC_STATIC | ACC_SYNTHETIC, "", "()V", null, ArrayUtil.EMPTY_STRING_ARRAY); InstructionAdapter iv = new InstructionAdapter(mv); - cv.newField(fun, ACC_STATIC | ACC_FINAL, JvmAbi.INSTANCE_FIELD, asmType.getDescriptor(), null, null); + cv.newField(fun, funDescriptor, ACC_STATIC | ACC_FINAL, JvmAbi.INSTANCE_FIELD, asmType.getDescriptor(), null, null); if (state.getClassBuilderMode() == ClassBuilderMode.FULL) { mv.visitCode(); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/DelegatingClassBuilder.java b/compiler/backend/src/org/jetbrains/jet/codegen/DelegatingClassBuilder.java index 4f77458fa79..e045cc8de82 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/DelegatingClassBuilder.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/DelegatingClassBuilder.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.codegen; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.org.objectweb.asm.AnnotationVisitor; import org.jetbrains.org.objectweb.asm.ClassVisitor; import org.jetbrains.org.objectweb.asm.FieldVisitor; @@ -32,26 +33,28 @@ public abstract class DelegatingClassBuilder implements ClassBuilder { @Override public FieldVisitor newField( @Nullable PsiElement origin, + @Nullable DeclarationDescriptor descriptor, int access, @NotNull String name, @NotNull String desc, @Nullable String signature, @Nullable Object value ) { - return getDelegate().newField(origin, access, name, desc, signature, value); + return getDelegate().newField(origin, descriptor, access, name, desc, signature, value); } @NotNull @Override public MethodVisitor newMethod( @Nullable PsiElement origin, + @Nullable DeclarationDescriptor descriptor, int access, @NotNull String name, @NotNull String desc, @Nullable String signature, @Nullable String[] exceptions ) { - return getDelegate().newMethod(origin, access, name, desc, signature, exceptions); + return getDelegate().newMethod(origin, descriptor, access, name, desc, signature, exceptions); } @NotNull diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 78e9637bc30..c9a7a4f9040 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -1017,7 +1017,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { StackValue.Field field = StackValue.singleton(fieldTypeDescriptor, typeMapper); - v.newField(original, ACC_PUBLIC | ACC_STATIC | ACC_FINAL, field.name, field.type.getDescriptor(), null, null); + v.newField(original, null, ACC_PUBLIC | ACC_STATIC | ACC_FINAL, field.name, field.type.getDescriptor(), null, null); if (!AsmUtil.isClassObjectWithBackingFieldsInOuter(fieldTypeDescriptor)) { genInitSingleton(fieldTypeDescriptor, field); @@ -1030,7 +1030,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { for (PropertyAndDefaultValue info : classObjectPropertiesToCopy) { PropertyDescriptor property = info.descriptor; - FieldVisitor fv = v.newField(null, ACC_STATIC | ACC_FINAL | ACC_PUBLIC, context.getFieldName(property, false), + FieldVisitor fv = v.newField(null, property, ACC_STATIC | ACC_FINAL | ACC_PUBLIC, context.getFieldName(property, false), typeMapper.mapType(property).getDescriptor(), typeMapper.mapFieldSignature(property.getType()), info.defaultValue); @@ -1279,7 +1279,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { Type fieldType = typeMapper.mapType(superClassDescriptor); String fieldDesc = fieldType.getDescriptor(); - v.newField(specifier, ACC_PRIVATE | ACC_FINAL | ACC_SYNTHETIC, delegateField, fieldDesc, /*TODO*/null, null); + v.newField(specifier, null, ACC_PRIVATE | ACC_FINAL | ACC_SYNTHETIC, delegateField, fieldDesc, /*TODO*/null, null); field = StackValue.field(fieldType, classAsmType, delegateField, false); field.store(fieldType, iv); @@ -1504,7 +1504,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { String name = declaration.getName(); assert name != null : "Enum entry has no name: " + declaration.getText(); String desc = "L" + classAsmType.getInternalName() + ";"; - v.newField(declaration, ACC_PUBLIC | ACC_ENUM | ACC_STATIC | ACC_FINAL, name, desc, null, null); + ClassDescriptor entryDescriptor = bindingContext.get(BindingContext.CLASS, declaration); + v.newField(declaration, entryDescriptor, ACC_PUBLIC | ACC_ENUM | ACC_STATIC | ACC_FINAL, name, desc, null, null); myEnumConstants.add((JetEnumEntry) declaration); } @@ -1520,7 +1521,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { InstructionAdapter iv = codegen.v; Type arrayAsmType = typeMapper.mapType(KotlinBuiltIns.getInstance().getArrayType(descriptor.getDefaultType())); - v.newField(myClass, ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, VALUES, arrayAsmType.getDescriptor(), null, null); + v.newField(myClass, null, ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, VALUES, arrayAsmType.getDescriptor(), null, null); iv.iconst(myEnumConstants.size()); iv.newarray(classAsmType); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java index 979f4600d8d..a6e4a4f7dc2 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java @@ -326,7 +326,7 @@ public abstract class MemberCodegen { ) { Type blockType = typeMapper.mapType(scriptDescriptor.getScriptCodeDescriptor().getReturnType()); - classBuilder.newField(null, ACC_PUBLIC | ACC_FINAL, ScriptDescriptor.LAST_EXPRESSION_VALUE_FIELD_NAME, + PropertyDescriptor scriptResultProperty = scriptDescriptor.getScriptResultProperty(); + classBuilder.newField(null, scriptResultProperty, + ACC_PUBLIC | ACC_FINAL, scriptResultProperty.getName().asString(), blockType.getDescriptor(), null, null); JvmMethodSignature jvmSignature = typeMapper.mapScriptSignature(scriptDescriptor, context.getEarlierScripts()); @@ -195,13 +198,13 @@ public class ScriptCodegen extends MemberCodegen { for (ScriptDescriptor earlierScript : context.getEarlierScripts()) { Type earlierClassName = asmTypeForScriptDescriptor(bindingContext, earlierScript); int access = ACC_PRIVATE | ACC_FINAL; - classBuilder.newField(null, access, context.getScriptFieldName(earlierScript), earlierClassName.getDescriptor(), null, null); + classBuilder.newField(null, null, access, context.getScriptFieldName(earlierScript), earlierClassName.getDescriptor(), null, null); } for (ValueParameterDescriptor parameter : script.getScriptCodeDescriptor().getValueParameters()) { Type parameterType = typeMapper.mapType(parameter); int access = ACC_PUBLIC | ACC_FINAL; - classBuilder.newField(null, access, parameter.getName().getIdentifier(), parameterType.getDescriptor(), null, null); + classBuilder.newField(null, parameter, access, parameter.getName().getIdentifier(), parameterType.getDescriptor(), null, null); } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/inline/RemappingClassBuilder.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/RemappingClassBuilder.java index cfdea59cbaa..972d171a60c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/inline/RemappingClassBuilder.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/RemappingClassBuilder.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.codegen.ClassBuilder; import org.jetbrains.jet.codegen.DelegatingClassBuilder; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.org.objectweb.asm.AnnotationVisitor; import org.jetbrains.org.objectweb.asm.ClassVisitor; import org.jetbrains.org.objectweb.asm.FieldVisitor; @@ -46,13 +47,14 @@ public class RemappingClassBuilder extends DelegatingClassBuilder { @NotNull public FieldVisitor newField( @Nullable PsiElement origin, + @Nullable DeclarationDescriptor descriptor, int access, @NotNull String name, @NotNull String desc, @Nullable String signature, @Nullable Object value ) { - return new RemappingFieldAdapter(builder.newField(origin, access, name, remapper.mapDesc(desc), signature, value), remapper); + return new RemappingFieldAdapter(builder.newField(origin, descriptor, access, name, remapper.mapDesc(desc), signature, value), remapper); } @Override diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java index 0ef8ecb83e8..e791ef55290 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java @@ -24,6 +24,7 @@ import com.intellij.psi.stubs.StubElement; import com.intellij.util.containers.Stack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.org.objectweb.asm.ClassVisitor; import org.jetbrains.org.objectweb.asm.FieldVisitor; import org.jetbrains.org.objectweb.asm.MethodVisitor; @@ -118,13 +119,14 @@ public class StubClassBuilder extends AbstractClassBuilder { @Override public FieldVisitor newField( @Nullable PsiElement origin, + @Nullable DeclarationDescriptor descriptor, int access, @NotNull String name, @NotNull String desc, @Nullable String signature, @Nullable Object value ) { - FieldVisitor internalVisitor = super.newField(origin, access, name, desc, signature, value); + FieldVisitor internalVisitor = super.newField(origin, descriptor, access, name, desc, signature, value); if (internalVisitor != EMPTY_FIELD_VISITOR) { // If stub for field generated