Serialize value parameter indices on JVM
This will help to load annotations on value parameters
This commit is contained in:
@@ -152,6 +152,7 @@ public class FunctionCodegen extends ParentCodegenAwareImpl {
|
|||||||
|
|
||||||
if (kind == JvmMethodParameterKind.VALUE) {
|
if (kind == JvmMethodParameterKind.VALUE) {
|
||||||
ValueParameterDescriptor parameter = iterator.next();
|
ValueParameterDescriptor parameter = iterator.next();
|
||||||
|
v.getMemberMap().recordIndexForValueParameter(parameter, i);
|
||||||
AnnotationCodegen.forParameter(i, mv, typeMapper).genAnnotations(parameter);
|
AnnotationCodegen.forParameter(i, mv, typeMapper).genAnnotations(parameter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,18 @@ public class JavaSerializerExtension extends SerializerExtension {
|
|||||||
saveImplClassName(callable, proto, nameTable);
|
saveImplClassName(callable, proto, nameTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void serializeValueParameter(
|
||||||
|
@NotNull ValueParameterDescriptor descriptor,
|
||||||
|
@NotNull ProtoBuf.Callable.ValueParameter.Builder proto,
|
||||||
|
@NotNull NameTable nameTable
|
||||||
|
) {
|
||||||
|
Integer index = memberMap.getIndexForValueParameter(descriptor);
|
||||||
|
if (index != null) {
|
||||||
|
proto.setExtension(JavaProtoBuf.index, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void saveSignature(
|
private void saveSignature(
|
||||||
@NotNull CallableMemberDescriptor callable,
|
@NotNull CallableMemberDescriptor callable,
|
||||||
@NotNull ProtoBuf.Callable.Builder proto,
|
@NotNull ProtoBuf.Callable.Builder proto,
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import org.jetbrains.asm4.commons.Method;
|
|||||||
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
|
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -33,6 +34,7 @@ public final class MemberMap {
|
|||||||
private final Map<PropertyDescriptor, Method> syntheticMethodForProperty = new HashMap<PropertyDescriptor, Method>();
|
private final Map<PropertyDescriptor, Method> syntheticMethodForProperty = new HashMap<PropertyDescriptor, Method>();
|
||||||
private final Map<CallableMemberDescriptor, String> implClassNameForCallable = new HashMap<CallableMemberDescriptor, String>();
|
private final Map<CallableMemberDescriptor, String> implClassNameForCallable = new HashMap<CallableMemberDescriptor, String>();
|
||||||
private final Set<PropertyDescriptor> staticFieldInOuterClass = new HashSet<PropertyDescriptor>();
|
private final Set<PropertyDescriptor> staticFieldInOuterClass = new HashSet<PropertyDescriptor>();
|
||||||
|
private final Map<ValueParameterDescriptor, Integer> indexForValueParameter = new HashMap<ValueParameterDescriptor, Integer>();
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static MemberMap union(@NotNull Collection<MemberMap> maps) {
|
public static MemberMap union(@NotNull Collection<MemberMap> maps) {
|
||||||
@@ -57,6 +59,10 @@ public final class MemberMap {
|
|||||||
for (PropertyDescriptor property : map.staticFieldInOuterClass) {
|
for (PropertyDescriptor property : map.staticFieldInOuterClass) {
|
||||||
result.recordStaticFieldInOuterClass(property);
|
result.recordStaticFieldInOuterClass(property);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (Map.Entry<ValueParameterDescriptor, Integer> entry : map.indexForValueParameter.entrySet()) {
|
||||||
|
result.recordIndexForValueParameter(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -87,6 +93,11 @@ public final class MemberMap {
|
|||||||
assert added : "Duplicate static field in outer class: " + property;
|
assert added : "Duplicate static field in outer class: " + property;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void recordIndexForValueParameter(@NotNull ValueParameterDescriptor descriptor, int index) {
|
||||||
|
Integer old = indexForValueParameter.put(descriptor, index);
|
||||||
|
assert old == null || old == index : "Duplicate index for value parameter: " + descriptor;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public Method getMethodOfDescriptor(@NotNull FunctionDescriptor descriptor) {
|
public Method getMethodOfDescriptor(@NotNull FunctionDescriptor descriptor) {
|
||||||
return methodForFunction.get(descriptor);
|
return methodForFunction.get(descriptor);
|
||||||
@@ -111,11 +122,17 @@ public final class MemberMap {
|
|||||||
return staticFieldInOuterClass.contains(property);
|
return staticFieldInOuterClass.contains(property);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public Integer getIndexForValueParameter(@NotNull ValueParameterDescriptor descriptor) {
|
||||||
|
return indexForValueParameter.get(descriptor);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Functions: " + methodForFunction.size() +
|
return "Functions: " + methodForFunction.size() +
|
||||||
", fields: " + fieldForProperty.size() +
|
", fields: " + fieldForProperty.size() +
|
||||||
", synthetic methods: " + syntheticMethodForProperty.size() +
|
", synthetic methods: " + syntheticMethodForProperty.size() +
|
||||||
", impl class names: " + implClassNameForCallable.size();
|
", impl class names: " + implClassNameForCallable.size() +
|
||||||
|
", value parameters: " + indexForValueParameter.size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -189,6 +189,7 @@ message Callable {
|
|||||||
required Type type = 3;
|
required Type type = 3;
|
||||||
optional Type vararg_element_type = 4;
|
optional Type vararg_element_type = 4;
|
||||||
|
|
||||||
|
extensions 100 to 199;
|
||||||
}
|
}
|
||||||
|
|
||||||
repeated ValueParameter value_parameter = 7;
|
repeated ValueParameter value_parameter = 7;
|
||||||
|
|||||||
+4
-1
@@ -272,7 +272,8 @@ public class DescriptorSerializer {
|
|||||||
return ProtoBuf.Callable.CallableKind.FUN;
|
return ProtoBuf.Callable.CallableKind.FUN;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ProtoBuf.Callable.ValueParameter.Builder valueParameter(ValueParameterDescriptor descriptor) {
|
@NotNull
|
||||||
|
private ProtoBuf.Callable.ValueParameter.Builder valueParameter(@NotNull ValueParameterDescriptor descriptor) {
|
||||||
ProtoBuf.Callable.ValueParameter.Builder builder = ProtoBuf.Callable.ValueParameter.newBuilder();
|
ProtoBuf.Callable.ValueParameter.Builder builder = ProtoBuf.Callable.ValueParameter.newBuilder();
|
||||||
|
|
||||||
builder.setFlags(Flags.getValueParameterFlags(hasAnnotations(descriptor), descriptor.declaresDefaultValue()));
|
builder.setFlags(Flags.getValueParameterFlags(hasAnnotations(descriptor), descriptor.declaresDefaultValue()));
|
||||||
@@ -286,6 +287,8 @@ public class DescriptorSerializer {
|
|||||||
builder.setVarargElementType(type(varargElementType));
|
builder.setVarargElementType(type(varargElementType));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension.serializeValueParameter(descriptor, builder, nameTable);
|
||||||
|
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+22
-8
@@ -7515,8 +7515,9 @@ public final class ProtoBuf {
|
|||||||
// @@protoc_insertion_point(enum_scope:org.jetbrains.jet.descriptors.serialization.Callable.CallableKind)
|
// @@protoc_insertion_point(enum_scope:org.jetbrains.jet.descriptors.serialization.Callable.CallableKind)
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface ValueParameterOrBuilder
|
public interface ValueParameterOrBuilder extends
|
||||||
extends com.google.protobuf.MessageLiteOrBuilder {
|
com.google.protobuf.GeneratedMessageLite.
|
||||||
|
ExtendableMessageOrBuilder<ValueParameter> {
|
||||||
|
|
||||||
// optional int32 flags = 1;
|
// optional int32 flags = 1;
|
||||||
/**
|
/**
|
||||||
@@ -7574,10 +7575,10 @@ public final class ProtoBuf {
|
|||||||
* Protobuf type {@code org.jetbrains.jet.descriptors.serialization.Callable.ValueParameter}
|
* Protobuf type {@code org.jetbrains.jet.descriptors.serialization.Callable.ValueParameter}
|
||||||
*/
|
*/
|
||||||
public static final class ValueParameter extends
|
public static final class ValueParameter extends
|
||||||
com.google.protobuf.GeneratedMessageLite
|
com.google.protobuf.GeneratedMessageLite.ExtendableMessage<
|
||||||
implements ValueParameterOrBuilder {
|
ValueParameter> implements ValueParameterOrBuilder {
|
||||||
// Use ValueParameter.newBuilder() to construct.
|
// Use ValueParameter.newBuilder() to construct.
|
||||||
private ValueParameter(com.google.protobuf.GeneratedMessageLite.Builder builder) {
|
private ValueParameter(com.google.protobuf.GeneratedMessageLite.ExtendableBuilder<org.jetbrains.jet.descriptors.serialization.ProtoBuf.Callable.ValueParameter, ?> builder) {
|
||||||
super(builder);
|
super(builder);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -7781,6 +7782,10 @@ public final class ProtoBuf {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!extensionsAreInitialized()) {
|
||||||
|
memoizedIsInitialized = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
memoizedIsInitialized = 1;
|
memoizedIsInitialized = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -7788,6 +7793,9 @@ public final class ProtoBuf {
|
|||||||
public void writeTo(com.google.protobuf.CodedOutputStream output)
|
public void writeTo(com.google.protobuf.CodedOutputStream output)
|
||||||
throws java.io.IOException {
|
throws java.io.IOException {
|
||||||
getSerializedSize();
|
getSerializedSize();
|
||||||
|
com.google.protobuf.GeneratedMessageLite
|
||||||
|
.ExtendableMessage<org.jetbrains.jet.descriptors.serialization.ProtoBuf.Callable.ValueParameter>.ExtensionWriter extensionWriter =
|
||||||
|
newExtensionWriter();
|
||||||
if (((bitField0_ & 0x00000001) == 0x00000001)) {
|
if (((bitField0_ & 0x00000001) == 0x00000001)) {
|
||||||
output.writeInt32(1, flags_);
|
output.writeInt32(1, flags_);
|
||||||
}
|
}
|
||||||
@@ -7800,6 +7808,7 @@ public final class ProtoBuf {
|
|||||||
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
||||||
output.writeMessage(4, varargElementType_);
|
output.writeMessage(4, varargElementType_);
|
||||||
}
|
}
|
||||||
|
extensionWriter.writeUntil(200, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int memoizedSerializedSize = -1;
|
private int memoizedSerializedSize = -1;
|
||||||
@@ -7824,6 +7833,7 @@ public final class ProtoBuf {
|
|||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeMessageSize(4, varargElementType_);
|
.computeMessageSize(4, varargElementType_);
|
||||||
}
|
}
|
||||||
|
size += extensionsSerializedSize();
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
@@ -7899,9 +7909,8 @@ public final class ProtoBuf {
|
|||||||
* Protobuf type {@code org.jetbrains.jet.descriptors.serialization.Callable.ValueParameter}
|
* Protobuf type {@code org.jetbrains.jet.descriptors.serialization.Callable.ValueParameter}
|
||||||
*/
|
*/
|
||||||
public static final class Builder extends
|
public static final class Builder extends
|
||||||
com.google.protobuf.GeneratedMessageLite.Builder<
|
com.google.protobuf.GeneratedMessageLite.ExtendableBuilder<
|
||||||
org.jetbrains.jet.descriptors.serialization.ProtoBuf.Callable.ValueParameter, Builder>
|
org.jetbrains.jet.descriptors.serialization.ProtoBuf.Callable.ValueParameter, Builder> implements org.jetbrains.jet.descriptors.serialization.ProtoBuf.Callable.ValueParameterOrBuilder {
|
||||||
implements org.jetbrains.jet.descriptors.serialization.ProtoBuf.Callable.ValueParameterOrBuilder {
|
|
||||||
// Construct using org.jetbrains.jet.descriptors.serialization.ProtoBuf.Callable.ValueParameter.newBuilder()
|
// Construct using org.jetbrains.jet.descriptors.serialization.ProtoBuf.Callable.ValueParameter.newBuilder()
|
||||||
private Builder() {
|
private Builder() {
|
||||||
maybeForceBuilderInitialization();
|
maybeForceBuilderInitialization();
|
||||||
@@ -7980,6 +7989,7 @@ public final class ProtoBuf {
|
|||||||
if (other.hasVarargElementType()) {
|
if (other.hasVarargElementType()) {
|
||||||
mergeVarargElementType(other.getVarargElementType());
|
mergeVarargElementType(other.getVarargElementType());
|
||||||
}
|
}
|
||||||
|
this.mergeExtensionFields(other);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8002,6 +8012,10 @@ public final class ProtoBuf {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!extensionsAreInitialized()) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
@@ -19,6 +19,7 @@ package org.jetbrains.jet.descriptors.serialization;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
|
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||||
|
|
||||||
public abstract class SerializerExtension {
|
public abstract class SerializerExtension {
|
||||||
public static final SerializerExtension DEFAULT = new SerializerExtension() {};
|
public static final SerializerExtension DEFAULT = new SerializerExtension() {};
|
||||||
@@ -33,4 +34,11 @@ public abstract class SerializerExtension {
|
|||||||
@NotNull NameTable nameTable
|
@NotNull NameTable nameTable
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void serializeValueParameter(
|
||||||
|
@NotNull ValueParameterDescriptor descriptor,
|
||||||
|
@NotNull ProtoBuf.Callable.ValueParameter.Builder proto,
|
||||||
|
@NotNull NameTable nameTable
|
||||||
|
) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,3 +81,8 @@ extend Callable {
|
|||||||
// 2) annotations on properties in traits are written to TImpl classes
|
// 2) annotations on properties in traits are written to TImpl classes
|
||||||
optional int32 impl_class_name = 102;
|
optional int32 impl_class_name = 102;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extend Callable.ValueParameter {
|
||||||
|
// Index of the corresponding parameter of this method in JVM (counting receiver parameters, enum constructor synthetic parameters, etc.)
|
||||||
|
optional int32 index = 100;
|
||||||
|
}
|
||||||
|
|||||||
+16
@@ -10,6 +10,7 @@ public final class JavaProtoBuf {
|
|||||||
registry.add(org.jetbrains.jet.descriptors.serialization.JavaProtoBuf.methodSignature);
|
registry.add(org.jetbrains.jet.descriptors.serialization.JavaProtoBuf.methodSignature);
|
||||||
registry.add(org.jetbrains.jet.descriptors.serialization.JavaProtoBuf.propertySignature);
|
registry.add(org.jetbrains.jet.descriptors.serialization.JavaProtoBuf.propertySignature);
|
||||||
registry.add(org.jetbrains.jet.descriptors.serialization.JavaProtoBuf.implClassName);
|
registry.add(org.jetbrains.jet.descriptors.serialization.JavaProtoBuf.implClassName);
|
||||||
|
registry.add(org.jetbrains.jet.descriptors.serialization.JavaProtoBuf.index);
|
||||||
}
|
}
|
||||||
public interface JavaTypeOrBuilder
|
public interface JavaTypeOrBuilder
|
||||||
extends com.google.protobuf.MessageLiteOrBuilder {
|
extends com.google.protobuf.MessageLiteOrBuilder {
|
||||||
@@ -2840,6 +2841,21 @@ public final class JavaProtoBuf {
|
|||||||
null,
|
null,
|
||||||
102,
|
102,
|
||||||
com.google.protobuf.WireFormat.FieldType.INT32);
|
com.google.protobuf.WireFormat.FieldType.INT32);
|
||||||
|
public static final int INDEX_FIELD_NUMBER = 100;
|
||||||
|
/**
|
||||||
|
* <code>extend .org.jetbrains.jet.descriptors.serialization.Callable.ValueParameter { ... }</code>
|
||||||
|
*/
|
||||||
|
public static final
|
||||||
|
com.google.protobuf.GeneratedMessageLite.GeneratedExtension<
|
||||||
|
org.jetbrains.jet.descriptors.serialization.ProtoBuf.Callable.ValueParameter,
|
||||||
|
java.lang.Integer> index = com.google.protobuf.GeneratedMessageLite
|
||||||
|
.newSingularGeneratedExtension(
|
||||||
|
org.jetbrains.jet.descriptors.serialization.ProtoBuf.Callable.ValueParameter.getDefaultInstance(),
|
||||||
|
0,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
100,
|
||||||
|
com.google.protobuf.WireFormat.FieldType.INT32);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user