Write full synthetic method signature for annotated property
This will be needed to support annotated extension properties, since they have the same name but different signatures
This commit is contained in:
@@ -17,6 +17,8 @@
|
||||
package org.jetbrains.jet.lang.resolve.java;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.asm4.Type;
|
||||
import org.jetbrains.asm4.commons.Method;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
|
||||
@@ -25,7 +27,7 @@ public final class JvmAbi {
|
||||
* This constant is used to identify binary format (class file) versions
|
||||
* If you change class file metadata format and/or naming conventions, please increase this number
|
||||
*/
|
||||
public static final int VERSION = 9;
|
||||
public static final int VERSION = 10;
|
||||
|
||||
public static final String TRAIT_IMPL_CLASS_NAME = "$TImpl";
|
||||
public static final String TRAIT_IMPL_SUFFIX = "$" + TRAIT_IMPL_CLASS_NAME;
|
||||
@@ -39,7 +41,6 @@ public final class JvmAbi {
|
||||
|
||||
public static final String DELEGATED_PROPERTY_NAME_SUFFIX = "$delegate";
|
||||
public static final String ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX = "$annotations";
|
||||
public static final String ANNOTATED_PROPERTY_METHOD_SIGNATURE = "()V";
|
||||
|
||||
public static final String INSTANCE_FIELD = "instance$";
|
||||
public static final String CLASS_OBJECT_FIELD = "object$";
|
||||
@@ -56,8 +57,12 @@ public final class JvmAbi {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String getSyntheticMethodNameForAnnotatedProperty(@NotNull Name propertyName) {
|
||||
return propertyName.asString() + ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX;
|
||||
public static Method getSyntheticMethodSignatureForAnnotatedProperty(@NotNull Name propertyName) {
|
||||
return new Method(
|
||||
propertyName.asString() + ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX,
|
||||
Type.VOID_TYPE,
|
||||
new Type[0]
|
||||
);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+7
-11
@@ -30,7 +30,6 @@ import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||
import org.jetbrains.jet.lang.resolve.constants.EnumValue;
|
||||
import org.jetbrains.jet.lang.resolve.constants.ErrorValue;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||
@@ -287,23 +286,21 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
|
||||
@NotNull NameResolver nameResolver,
|
||||
@NotNull AnnotatedCallableKind kind
|
||||
) {
|
||||
SignatureDeserializer deserializer = new SignatureDeserializer(nameResolver);
|
||||
switch (kind) {
|
||||
case FUNCTION:
|
||||
if (proto.hasExtension(JavaProtoBuf.methodSignature)) {
|
||||
JavaProtoBuf.JavaMethodSignature signature = proto.getExtension(JavaProtoBuf.methodSignature);
|
||||
return new SignatureDeserializer(nameResolver).methodSignature(signature);
|
||||
return deserializer.methodSignature(proto.getExtension(JavaProtoBuf.methodSignature));
|
||||
}
|
||||
break;
|
||||
case PROPERTY_GETTER:
|
||||
if (proto.hasExtension(JavaProtoBuf.propertySignature)) {
|
||||
JavaProtoBuf.JavaPropertySignature propertySignature = proto.getExtension(JavaProtoBuf.propertySignature);
|
||||
return new SignatureDeserializer(nameResolver).methodSignature(propertySignature.getGetter());
|
||||
return deserializer.methodSignature(proto.getExtension(JavaProtoBuf.propertySignature).getGetter());
|
||||
}
|
||||
break;
|
||||
case PROPERTY_SETTER:
|
||||
if (proto.hasExtension(JavaProtoBuf.propertySignature)) {
|
||||
JavaProtoBuf.JavaPropertySignature propertySignature = proto.getExtension(JavaProtoBuf.propertySignature);
|
||||
return new SignatureDeserializer(nameResolver).methodSignature(propertySignature.getSetter());
|
||||
return deserializer.methodSignature(proto.getExtension(JavaProtoBuf.propertySignature).getSetter());
|
||||
}
|
||||
break;
|
||||
case PROPERTY:
|
||||
@@ -312,13 +309,12 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
|
||||
|
||||
if (propertySignature.hasField()) {
|
||||
JavaProtoBuf.JavaFieldSignature field = propertySignature.getField();
|
||||
String type = new SignatureDeserializer(nameResolver).typeDescriptor(field.getType());
|
||||
String type = deserializer.typeDescriptor(field.getType());
|
||||
Name name = nameResolver.getName(field.getName());
|
||||
return MemberSignature.fromFieldNameAndDesc(name, type);
|
||||
}
|
||||
else if (propertySignature.hasSyntheticMethodName()) {
|
||||
Name name = nameResolver.getName(propertySignature.getSyntheticMethodName());
|
||||
return MemberSignature.fromMethodNameAndDesc(name, JvmAbi.ANNOTATED_PROPERTY_METHOD_SIGNATURE);
|
||||
else if (propertySignature.hasSyntheticMethod()) {
|
||||
return deserializer.methodSignature(propertySignature.getSyntheticMethod());
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user