Descriptors added to newField() signature

This commit is contained in:
Andrey Breslav
2014-05-22 07:39:05 +04:00
parent 9070a6ab37
commit f1196a8c59
12 changed files with 32 additions and 16 deletions
@@ -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,
@@ -373,7 +373,7 @@ public class AsmUtil {
//noinspection PointlessBitwiseExpression
int access = NO_FLAG_PACKAGE_PRIVATE | ACC_SYNTHETIC | ACC_FINAL;
for (Pair<String, Type> 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);
}
}
@@ -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,
@@ -203,7 +203,7 @@ public class ClosureCodegen extends ParentCodegenAware {
MethodVisitor mv = cv.newMethod(fun, ACC_STATIC | ACC_SYNTHETIC, "<clinit>", "()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();
@@ -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
@@ -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);
@@ -326,7 +326,7 @@ public abstract class MemberCodegen<T extends JetElement/* TODO: & JetDeclaratio
}
if (delegatedProperties.isEmpty()) return;
v.newField(null, ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, JvmAbi.PROPERTY_METADATA_ARRAY_NAME,
v.newField(null, null, ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, JvmAbi.PROPERTY_METADATA_ARRAY_NAME,
"[" + PROPERTY_METADATA_TYPE, null, null);
InstructionAdapter iv = createOrGetClInitCodegen().v;
@@ -229,7 +229,7 @@ public class PropertyCodegen {
v.getSerializationBindings().put(FIELD_FOR_PROPERTY, propertyDescriptor, Pair.create(type, name));
return builder.newField(element, modifiers, name, type.getDescriptor(),
return builder.newField(element, propertyDescriptor, modifiers, name, type.getDescriptor(),
typeMapper.mapFieldSignature(jetType), defaultValue);
}
@@ -79,6 +79,7 @@ public class SamWrapperCodegen {
Type functionAsmType = typeMapper.mapType(functionType);
cv.newField(null,
erasedInterfaceFunction,
ACC_SYNTHETIC | ACC_PRIVATE | ACC_FINAL,
FUNCTION_FIELD_NAME,
functionAsmType.getDescriptor(),
@@ -23,6 +23,7 @@ import org.jetbrains.jet.codegen.context.MethodContext;
import org.jetbrains.jet.codegen.context.ScriptContext;
import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.psi.JetDeclaration;
@@ -118,7 +119,9 @@ public class ScriptCodegen extends MemberCodegen<JetScript> {
) {
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<JetScript> {
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);
}
}
@@ -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
@@ -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