JvmDeclarationOrigin used in newField()
This commit is contained in:
@@ -47,8 +47,7 @@ public abstract class AbstractClassBuilder implements ClassBuilder {
|
|||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public FieldVisitor newField(
|
public FieldVisitor newField(
|
||||||
@Nullable PsiElement origin,
|
@NotNull JvmDeclarationOrigin origin,
|
||||||
@Nullable DeclarationDescriptor descriptor,
|
|
||||||
int access,
|
int access,
|
||||||
@NotNull String name,
|
@NotNull String name,
|
||||||
@NotNull String desc,
|
@NotNull String desc,
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ import java.util.Map;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static org.jetbrains.jet.codegen.JvmCodegenUtil.*;
|
import static org.jetbrains.jet.codegen.JvmCodegenUtil.*;
|
||||||
|
import static org.jetbrains.jet.codegen.JvmDeclarationOrigin.NO_ORIGIN;
|
||||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
|
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.JAVA_STRING_TYPE;
|
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.JAVA_STRING_TYPE;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.getType;
|
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.getType;
|
||||||
@@ -373,7 +374,7 @@ public class AsmUtil {
|
|||||||
//noinspection PointlessBitwiseExpression
|
//noinspection PointlessBitwiseExpression
|
||||||
int access = NO_FLAG_PACKAGE_PRIVATE | ACC_SYNTHETIC | ACC_FINAL;
|
int access = NO_FLAG_PACKAGE_PRIVATE | ACC_SYNTHETIC | ACC_FINAL;
|
||||||
for (Pair<String, Type> field : allFields) {
|
for (Pair<String, Type> field : allFields) {
|
||||||
builder.newField(null, null, access, field.first, field.second.getDescriptor(), null, null);
|
builder.newField(NO_ORIGIN, access, field.first, field.second.getDescriptor(), null, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,8 +28,7 @@ import org.jetbrains.org.objectweb.asm.MethodVisitor;
|
|||||||
public interface ClassBuilder {
|
public interface ClassBuilder {
|
||||||
@NotNull
|
@NotNull
|
||||||
FieldVisitor newField(
|
FieldVisitor newField(
|
||||||
@Nullable PsiElement origin,
|
@NotNull JvmDeclarationOrigin origin,
|
||||||
@Nullable DeclarationDescriptor descriptor,
|
|
||||||
int access,
|
int access,
|
||||||
@NotNull String name,
|
@NotNull String name,
|
||||||
@NotNull String desc,
|
@NotNull String desc,
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.jetbrains.jet.codegen.AsmUtil.*;
|
import static org.jetbrains.jet.codegen.AsmUtil.*;
|
||||||
|
import static org.jetbrains.jet.codegen.CodegenPackage.OtherOrigin;
|
||||||
import static org.jetbrains.jet.codegen.JvmCodegenUtil.isConst;
|
import static org.jetbrains.jet.codegen.JvmCodegenUtil.isConst;
|
||||||
import static org.jetbrains.jet.codegen.binding.CodegenBinding.*;
|
import static org.jetbrains.jet.codegen.binding.CodegenBinding.*;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass;
|
import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass;
|
||||||
@@ -203,7 +204,7 @@ public class ClosureCodegen extends ParentCodegenAware {
|
|||||||
MethodVisitor mv = cv.newMethod(fun, funDescriptor, ACC_STATIC | ACC_SYNTHETIC, "<clinit>", "()V", null, ArrayUtil.EMPTY_STRING_ARRAY);
|
MethodVisitor mv = cv.newMethod(fun, funDescriptor, ACC_STATIC | ACC_SYNTHETIC, "<clinit>", "()V", null, ArrayUtil.EMPTY_STRING_ARRAY);
|
||||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||||
|
|
||||||
cv.newField(fun, funDescriptor, ACC_STATIC | ACC_FINAL, JvmAbi.INSTANCE_FIELD, asmType.getDescriptor(), null, null);
|
cv.newField(OtherOrigin(fun, funDescriptor), ACC_STATIC | ACC_FINAL, JvmAbi.INSTANCE_FIELD, asmType.getDescriptor(), null, null);
|
||||||
|
|
||||||
if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|||||||
@@ -32,15 +32,14 @@ public abstract class DelegatingClassBuilder implements ClassBuilder {
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public FieldVisitor newField(
|
public FieldVisitor newField(
|
||||||
@Nullable PsiElement origin,
|
@NotNull JvmDeclarationOrigin origin,
|
||||||
@Nullable DeclarationDescriptor descriptor,
|
|
||||||
int access,
|
int access,
|
||||||
@NotNull String name,
|
@NotNull String name,
|
||||||
@NotNull String desc,
|
@NotNull String desc,
|
||||||
@Nullable String signature,
|
@Nullable String signature,
|
||||||
@Nullable Object value
|
@Nullable Object value
|
||||||
) {
|
) {
|
||||||
return getDelegate().newField(origin, descriptor, access, name, desc, signature, value);
|
return getDelegate().newField(origin, access, name, desc, signature, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
|||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolverUtil;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolverUtil;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
||||||
@@ -67,6 +66,7 @@ import org.jetbrains.org.objectweb.asm.commons.Method;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static org.jetbrains.jet.codegen.AsmUtil.*;
|
import static org.jetbrains.jet.codegen.AsmUtil.*;
|
||||||
|
import static org.jetbrains.jet.codegen.CodegenPackage.OtherOrigin;
|
||||||
import static org.jetbrains.jet.codegen.JvmCodegenUtil.*;
|
import static org.jetbrains.jet.codegen.JvmCodegenUtil.*;
|
||||||
import static org.jetbrains.jet.codegen.binding.CodegenBinding.*;
|
import static org.jetbrains.jet.codegen.binding.CodegenBinding.*;
|
||||||
import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver;
|
import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver;
|
||||||
@@ -1055,7 +1055,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
|
|
||||||
StackValue.Field field = StackValue.singleton(fieldTypeDescriptor, typeMapper);
|
StackValue.Field field = StackValue.singleton(fieldTypeDescriptor, typeMapper);
|
||||||
|
|
||||||
v.newField(original, null, ACC_PUBLIC | ACC_STATIC | ACC_FINAL, field.name, field.type.getDescriptor(), null, null);
|
v.newField(OtherOrigin(original), ACC_PUBLIC | ACC_STATIC | ACC_FINAL, field.name, field.type.getDescriptor(), null, null);
|
||||||
|
|
||||||
if (!AsmUtil.isClassObjectWithBackingFieldsInOuter(fieldTypeDescriptor)) {
|
if (!AsmUtil.isClassObjectWithBackingFieldsInOuter(fieldTypeDescriptor)) {
|
||||||
genInitSingleton(fieldTypeDescriptor, field);
|
genInitSingleton(fieldTypeDescriptor, field);
|
||||||
@@ -1068,7 +1068,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
for (PropertyAndDefaultValue info : classObjectPropertiesToCopy) {
|
for (PropertyAndDefaultValue info : classObjectPropertiesToCopy) {
|
||||||
PropertyDescriptor property = info.descriptor;
|
PropertyDescriptor property = info.descriptor;
|
||||||
|
|
||||||
FieldVisitor fv = v.newField(null, property, ACC_STATIC | ACC_FINAL | ACC_PUBLIC, context.getFieldName(property, false),
|
FieldVisitor fv = v.newField(OtherOrigin(property), ACC_STATIC | ACC_FINAL | ACC_PUBLIC, context.getFieldName(property, false),
|
||||||
typeMapper.mapType(property).getDescriptor(), typeMapper.mapFieldSignature(property.getType()),
|
typeMapper.mapType(property).getDescriptor(), typeMapper.mapFieldSignature(property.getType()),
|
||||||
info.defaultValue);
|
info.defaultValue);
|
||||||
|
|
||||||
@@ -1317,7 +1317,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
Type fieldType = typeMapper.mapType(superClassDescriptor);
|
Type fieldType = typeMapper.mapType(superClassDescriptor);
|
||||||
String fieldDesc = fieldType.getDescriptor();
|
String fieldDesc = fieldType.getDescriptor();
|
||||||
|
|
||||||
v.newField(specifier, null, ACC_PRIVATE | ACC_FINAL | ACC_SYNTHETIC, delegateField, fieldDesc, /*TODO*/null, null);
|
v.newField(OtherOrigin(specifier), ACC_PRIVATE | ACC_FINAL | ACC_SYNTHETIC, delegateField, fieldDesc, /*TODO*/null, null);
|
||||||
|
|
||||||
field = StackValue.field(fieldType, classAsmType, delegateField, false);
|
field = StackValue.field(fieldType, classAsmType, delegateField, false);
|
||||||
field.store(fieldType, iv);
|
field.store(fieldType, iv);
|
||||||
@@ -1543,7 +1543,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
assert name != null : "Enum entry has no name: " + declaration.getText();
|
assert name != null : "Enum entry has no name: " + declaration.getText();
|
||||||
String desc = "L" + classAsmType.getInternalName() + ";";
|
String desc = "L" + classAsmType.getInternalName() + ";";
|
||||||
ClassDescriptor entryDescriptor = bindingContext.get(BindingContext.CLASS, declaration);
|
ClassDescriptor entryDescriptor = bindingContext.get(BindingContext.CLASS, declaration);
|
||||||
v.newField(declaration, entryDescriptor, ACC_PUBLIC | ACC_ENUM | ACC_STATIC | ACC_FINAL, name, desc, null, null);
|
v.newField(OtherOrigin(declaration, entryDescriptor), ACC_PUBLIC | ACC_ENUM | ACC_STATIC | ACC_FINAL, name, desc, null, null);
|
||||||
myEnumConstants.add((JetEnumEntry) declaration);
|
myEnumConstants.add((JetEnumEntry) declaration);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1559,7 +1559,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
InstructionAdapter iv = codegen.v;
|
InstructionAdapter iv = codegen.v;
|
||||||
|
|
||||||
Type arrayAsmType = typeMapper.mapType(KotlinBuiltIns.getInstance().getArrayType(descriptor.getDefaultType()));
|
Type arrayAsmType = typeMapper.mapType(KotlinBuiltIns.getInstance().getArrayType(descriptor.getDefaultType()));
|
||||||
v.newField(myClass, null, ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, VALUES, arrayAsmType.getDescriptor(), null, null);
|
v.newField(OtherOrigin(myClass), ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, VALUES, arrayAsmType.getDescriptor(), null, null);
|
||||||
|
|
||||||
iv.iconst(myEnumConstants.size());
|
iv.iconst(myEnumConstants.size());
|
||||||
iv.newarray(classAsmType);
|
iv.newarray(classAsmType);
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2014 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.jet.codegen
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
|
||||||
|
|
||||||
|
public enum class MemberKind { FIELD; METHOD }
|
||||||
|
|
||||||
|
public enum class JvmDeclarationOriginKind {
|
||||||
|
OTHER
|
||||||
|
}
|
||||||
|
|
||||||
|
public class JvmDeclarationOrigin(
|
||||||
|
val originKind: JvmDeclarationOriginKind,
|
||||||
|
val element: PsiElement?,
|
||||||
|
val descriptor: DeclarationDescriptor?
|
||||||
|
) {
|
||||||
|
class object {
|
||||||
|
public val NO_ORIGIN: JvmDeclarationOrigin = JvmDeclarationOrigin(JvmDeclarationOriginKind.OTHER, null, null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun OtherOrigin(element: PsiElement, descriptor: DeclarationDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(JvmDeclarationOriginKind.OTHER, element, descriptor)
|
||||||
|
|
||||||
|
public fun OtherOrigin(element: PsiElement): JvmDeclarationOrigin = JvmDeclarationOrigin(JvmDeclarationOriginKind.OTHER, element, null)
|
||||||
|
|
||||||
|
public fun OtherOrigin(descriptor: DeclarationDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(JvmDeclarationOriginKind.OTHER, null, descriptor)
|
||||||
@@ -50,6 +50,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import static org.jetbrains.jet.codegen.AsmUtil.boxType;
|
import static org.jetbrains.jet.codegen.AsmUtil.boxType;
|
||||||
import static org.jetbrains.jet.codegen.AsmUtil.isPrimitive;
|
import static org.jetbrains.jet.codegen.AsmUtil.isPrimitive;
|
||||||
|
import static org.jetbrains.jet.codegen.JvmDeclarationOrigin.NO_ORIGIN;
|
||||||
import static org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED;
|
import static org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED;
|
||||||
import static org.jetbrains.jet.lang.resolve.BindingContext.VARIABLE;
|
import static org.jetbrains.jet.lang.resolve.BindingContext.VARIABLE;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.*;
|
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.*;
|
||||||
@@ -326,7 +327,7 @@ public abstract class MemberCodegen<T extends JetElement/* TODO: & JetDeclaratio
|
|||||||
}
|
}
|
||||||
if (delegatedProperties.isEmpty()) return;
|
if (delegatedProperties.isEmpty()) return;
|
||||||
|
|
||||||
v.newField(null, null, ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, JvmAbi.PROPERTY_METADATA_ARRAY_NAME,
|
v.newField(NO_ORIGIN, ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, JvmAbi.PROPERTY_METADATA_ARRAY_NAME,
|
||||||
"[" + PROPERTY_METADATA_TYPE, null, null);
|
"[" + PROPERTY_METADATA_TYPE, null, null);
|
||||||
|
|
||||||
InstructionAdapter iv = createOrGetClInitCodegen().v;
|
InstructionAdapter iv = createOrGetClInitCodegen().v;
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
|
|||||||
import org.jetbrains.org.objectweb.asm.commons.Method;
|
import org.jetbrains.org.objectweb.asm.commons.Method;
|
||||||
|
|
||||||
import static org.jetbrains.jet.codegen.AsmUtil.*;
|
import static org.jetbrains.jet.codegen.AsmUtil.*;
|
||||||
|
import static org.jetbrains.jet.codegen.CodegenPackage.OtherOrigin;
|
||||||
import static org.jetbrains.jet.codegen.JvmCodegenUtil.getParentBodyCodegen;
|
import static org.jetbrains.jet.codegen.JvmCodegenUtil.getParentBodyCodegen;
|
||||||
import static org.jetbrains.jet.codegen.JvmCodegenUtil.isInterface;
|
import static org.jetbrains.jet.codegen.JvmCodegenUtil.isInterface;
|
||||||
import static org.jetbrains.jet.codegen.JvmSerializationBindings.*;
|
import static org.jetbrains.jet.codegen.JvmSerializationBindings.*;
|
||||||
@@ -229,7 +230,7 @@ public class PropertyCodegen {
|
|||||||
|
|
||||||
v.getSerializationBindings().put(FIELD_FOR_PROPERTY, propertyDescriptor, Pair.create(type, name));
|
v.getSerializationBindings().put(FIELD_FOR_PROPERTY, propertyDescriptor, Pair.create(type, name));
|
||||||
|
|
||||||
return builder.newField(element, propertyDescriptor, modifiers, name, type.getDescriptor(),
|
return builder.newField(OtherOrigin(element, propertyDescriptor), modifiers, name, type.getDescriptor(),
|
||||||
typeMapper.mapFieldSignature(jetType), defaultValue);
|
typeMapper.mapFieldSignature(jetType), defaultValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.types.JetType;
|
|||||||
|
|
||||||
import static org.jetbrains.jet.codegen.AsmUtil.NO_FLAG_PACKAGE_PRIVATE;
|
import static org.jetbrains.jet.codegen.AsmUtil.NO_FLAG_PACKAGE_PRIVATE;
|
||||||
import static org.jetbrains.jet.codegen.AsmUtil.writeKotlinSyntheticClassAnnotation;
|
import static org.jetbrains.jet.codegen.AsmUtil.writeKotlinSyntheticClassAnnotation;
|
||||||
|
import static org.jetbrains.jet.codegen.CodegenPackage.OtherOrigin;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.OBJECT_TYPE;
|
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.OBJECT_TYPE;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass;
|
import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass;
|
||||||
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
||||||
@@ -78,8 +79,7 @@ public class SamWrapperCodegen {
|
|||||||
// e.g. ASM type for Function2
|
// e.g. ASM type for Function2
|
||||||
Type functionAsmType = typeMapper.mapType(functionType);
|
Type functionAsmType = typeMapper.mapType(functionType);
|
||||||
|
|
||||||
cv.newField(null,
|
cv.newField(OtherOrigin(erasedInterfaceFunction),
|
||||||
erasedInterfaceFunction,
|
|
||||||
ACC_SYNTHETIC | ACC_PRIVATE | ACC_FINAL,
|
ACC_SYNTHETIC | ACC_PRIVATE | ACC_FINAL,
|
||||||
FUNCTION_FIELD_NAME,
|
FUNCTION_FIELD_NAME,
|
||||||
functionAsmType.getDescriptor(),
|
functionAsmType.getDescriptor(),
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.jetbrains.jet.codegen.CodegenPackage.OtherOrigin;
|
||||||
|
import static org.jetbrains.jet.codegen.JvmDeclarationOrigin.NO_ORIGIN;
|
||||||
import static org.jetbrains.jet.codegen.binding.CodegenBinding.*;
|
import static org.jetbrains.jet.codegen.binding.CodegenBinding.*;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.OBJECT_TYPE;
|
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.OBJECT_TYPE;
|
||||||
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
||||||
@@ -120,7 +122,7 @@ public class ScriptCodegen extends MemberCodegen<JetScript> {
|
|||||||
Type blockType = typeMapper.mapType(scriptDescriptor.getScriptCodeDescriptor().getReturnType());
|
Type blockType = typeMapper.mapType(scriptDescriptor.getScriptCodeDescriptor().getReturnType());
|
||||||
|
|
||||||
PropertyDescriptor scriptResultProperty = scriptDescriptor.getScriptResultProperty();
|
PropertyDescriptor scriptResultProperty = scriptDescriptor.getScriptResultProperty();
|
||||||
classBuilder.newField(null, scriptResultProperty,
|
classBuilder.newField(OtherOrigin(scriptResultProperty),
|
||||||
ACC_PUBLIC | ACC_FINAL, scriptResultProperty.getName().asString(),
|
ACC_PUBLIC | ACC_FINAL, scriptResultProperty.getName().asString(),
|
||||||
blockType.getDescriptor(), null, null);
|
blockType.getDescriptor(), null, null);
|
||||||
|
|
||||||
@@ -199,13 +201,13 @@ public class ScriptCodegen extends MemberCodegen<JetScript> {
|
|||||||
for (ScriptDescriptor earlierScript : context.getEarlierScripts()) {
|
for (ScriptDescriptor earlierScript : context.getEarlierScripts()) {
|
||||||
Type earlierClassName = asmTypeForScriptDescriptor(bindingContext, earlierScript);
|
Type earlierClassName = asmTypeForScriptDescriptor(bindingContext, earlierScript);
|
||||||
int access = ACC_PRIVATE | ACC_FINAL;
|
int access = ACC_PRIVATE | ACC_FINAL;
|
||||||
classBuilder.newField(null, null, access, context.getScriptFieldName(earlierScript), earlierClassName.getDescriptor(), null, null);
|
classBuilder.newField(NO_ORIGIN, access, context.getScriptFieldName(earlierScript), earlierClassName.getDescriptor(), null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ValueParameterDescriptor parameter : script.getScriptCodeDescriptor().getValueParameters()) {
|
for (ValueParameterDescriptor parameter : script.getScriptCodeDescriptor().getValueParameters()) {
|
||||||
Type parameterType = typeMapper.mapType(parameter);
|
Type parameterType = typeMapper.mapType(parameter);
|
||||||
int access = ACC_PUBLIC | ACC_FINAL;
|
int access = ACC_PUBLIC | ACC_FINAL;
|
||||||
classBuilder.newField(null, parameter, access, parameter.getName().getIdentifier(), parameterType.getDescriptor(), null, null);
|
classBuilder.newField(OtherOrigin(parameter), access, parameter.getName().getIdentifier(), parameterType.getDescriptor(), null, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-13
@@ -22,16 +22,8 @@ import org.jetbrains.org.objectweb.asm.FieldVisitor
|
|||||||
import org.jetbrains.org.objectweb.asm.MethodVisitor
|
import org.jetbrains.org.objectweb.asm.MethodVisitor
|
||||||
import com.intellij.util.containers.MultiMap
|
import com.intellij.util.containers.MultiMap
|
||||||
|
|
||||||
public enum class MemberKind { FIELD; METHOD }
|
|
||||||
public data class RawSignature(val name: String, val desc: String, val field: MemberKind)
|
public data class RawSignature(val name: String, val desc: String, val field: MemberKind)
|
||||||
|
|
||||||
public class JvmDeclarationOrigin(
|
|
||||||
val element: PsiElement?,
|
|
||||||
val descriptor: DeclarationDescriptor?
|
|
||||||
)
|
|
||||||
|
|
||||||
public val NO_ORIGIN: JvmDeclarationOrigin = JvmDeclarationOrigin(null, null)
|
|
||||||
|
|
||||||
public abstract class SignatureCollectingClassBuilderFactory(
|
public abstract class SignatureCollectingClassBuilderFactory(
|
||||||
private val delegate: ClassBuilderFactory
|
private val delegate: ClassBuilderFactory
|
||||||
|
|
||||||
@@ -45,7 +37,7 @@ public abstract class SignatureCollectingClassBuilderFactory(
|
|||||||
)
|
)
|
||||||
|
|
||||||
override fun newClassBuilder(forElement: PsiElement?, forDescriptor: DeclarationDescriptor?): SignatureCollectingClassBuilder {
|
override fun newClassBuilder(forElement: PsiElement?, forDescriptor: DeclarationDescriptor?): SignatureCollectingClassBuilder {
|
||||||
return SignatureCollectingClassBuilder(JvmDeclarationOrigin(forElement, forDescriptor), delegate.newClassBuilder(forElement, forDescriptor))
|
return SignatureCollectingClassBuilder(JvmDeclarationOrigin(JvmDeclarationOriginKind.OTHER, forElement, forDescriptor), delegate.newClassBuilder(forElement, forDescriptor))
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun asBytes(builder: ClassBuilder?): ByteArray? {
|
public override fun asBytes(builder: ClassBuilder?): ByteArray? {
|
||||||
@@ -68,13 +60,13 @@ public abstract class SignatureCollectingClassBuilderFactory(
|
|||||||
super.defineClass(origin, version, access, name, signature, superName, interfaces)
|
super.defineClass(origin, version, access, name, signature, superName, interfaces)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun newField(origin: PsiElement?, descriptor: DeclarationDescriptor?, access: Int, name: String, desc: String, signature: String?, value: Any?): FieldVisitor {
|
override fun newField(origin: JvmDeclarationOrigin, access: Int, name: String, desc: String, signature: String?, value: Any?): FieldVisitor {
|
||||||
signatures.putValue(RawSignature(name, desc, MemberKind.FIELD), JvmDeclarationOrigin(origin, descriptor))
|
signatures.putValue(RawSignature(name, desc, MemberKind.FIELD), origin)
|
||||||
return super.newField(origin, descriptor, access, name, desc, signature, value)
|
return super.newField(origin, access, name, desc, signature, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun newMethod(origin: PsiElement?, descriptor: DeclarationDescriptor?, access: Int, name: String, desc: String, signature: String?, exceptions: Array<out String>?): MethodVisitor {
|
override fun newMethod(origin: PsiElement?, descriptor: DeclarationDescriptor?, access: Int, name: String, desc: String, signature: String?, exceptions: Array<out String>?): MethodVisitor {
|
||||||
signatures.putValue(RawSignature(name, desc, MemberKind.METHOD), JvmDeclarationOrigin(origin, descriptor))
|
signatures.putValue(RawSignature(name, desc, MemberKind.METHOD), JvmDeclarationOrigin(JvmDeclarationOriginKind.OTHER, origin, descriptor))
|
||||||
return super.newMethod(origin, descriptor, access, name, desc, signature, exceptions)
|
return super.newMethod(origin, descriptor, access, name, desc, signature, exceptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.codegen.ClassBuilder;
|
import org.jetbrains.jet.codegen.ClassBuilder;
|
||||||
import org.jetbrains.jet.codegen.DelegatingClassBuilder;
|
import org.jetbrains.jet.codegen.DelegatingClassBuilder;
|
||||||
|
import org.jetbrains.jet.codegen.JvmDeclarationOrigin;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.org.objectweb.asm.AnnotationVisitor;
|
import org.jetbrains.org.objectweb.asm.AnnotationVisitor;
|
||||||
import org.jetbrains.org.objectweb.asm.ClassVisitor;
|
import org.jetbrains.org.objectweb.asm.ClassVisitor;
|
||||||
@@ -46,15 +47,14 @@ public class RemappingClassBuilder extends DelegatingClassBuilder {
|
|||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public FieldVisitor newField(
|
public FieldVisitor newField(
|
||||||
@Nullable PsiElement origin,
|
@NotNull JvmDeclarationOrigin origin,
|
||||||
@Nullable DeclarationDescriptor descriptor,
|
|
||||||
int access,
|
int access,
|
||||||
@NotNull String name,
|
@NotNull String name,
|
||||||
@NotNull String desc,
|
@NotNull String desc,
|
||||||
@Nullable String signature,
|
@Nullable String signature,
|
||||||
@Nullable Object value
|
@Nullable Object value
|
||||||
) {
|
) {
|
||||||
return new RemappingFieldAdapter(builder.newField(origin, descriptor, access, name, remapper.mapDesc(desc), signature, value), remapper);
|
return new RemappingFieldAdapter(builder.newField(origin, access, name, remapper.mapDesc(desc), signature, value), remapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import com.intellij.psi.stubs.StubElement;
|
|||||||
import com.intellij.util.containers.Stack;
|
import com.intellij.util.containers.Stack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.jet.codegen.JvmDeclarationOrigin;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.org.objectweb.asm.ClassVisitor;
|
import org.jetbrains.org.objectweb.asm.ClassVisitor;
|
||||||
import org.jetbrains.org.objectweb.asm.FieldVisitor;
|
import org.jetbrains.org.objectweb.asm.FieldVisitor;
|
||||||
@@ -119,19 +120,18 @@ public class StubClassBuilder extends AbstractClassBuilder {
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public FieldVisitor newField(
|
public FieldVisitor newField(
|
||||||
@Nullable PsiElement origin,
|
@NotNull JvmDeclarationOrigin origin,
|
||||||
@Nullable DeclarationDescriptor descriptor,
|
|
||||||
int access,
|
int access,
|
||||||
@NotNull String name,
|
@NotNull String name,
|
||||||
@NotNull String desc,
|
@NotNull String desc,
|
||||||
@Nullable String signature,
|
@Nullable String signature,
|
||||||
@Nullable Object value
|
@Nullable Object value
|
||||||
) {
|
) {
|
||||||
FieldVisitor internalVisitor = super.newField(origin, descriptor, access, name, desc, signature, value);
|
FieldVisitor internalVisitor = super.newField(origin, access, name, desc, signature, value);
|
||||||
|
|
||||||
if (internalVisitor != EMPTY_FIELD_VISITOR) {
|
if (internalVisitor != EMPTY_FIELD_VISITOR) {
|
||||||
// If stub for field generated
|
// If stub for field generated
|
||||||
markLastChild(origin);
|
markLastChild(origin.getElement());
|
||||||
}
|
}
|
||||||
|
|
||||||
return internalVisitor;
|
return internalVisitor;
|
||||||
|
|||||||
Reference in New Issue
Block a user