KT-3722: Write correct generic type information for generated fields
#KT-3722 Fixed
This commit is contained in:
@@ -162,7 +162,7 @@ public class PropertyCodegen extends GenerationStateAware {
|
||||
String name = backingFieldContext.getFieldName(propertyDescriptor, isDelegate);
|
||||
|
||||
return builder.newField(element, modifiers, name, type.getDescriptor(),
|
||||
null, defaultValue);
|
||||
typeMapper.mapFieldSignature(jetType), defaultValue);
|
||||
}
|
||||
|
||||
private FieldVisitor generatePropertyDelegateAccess(JetProperty p, PropertyDescriptor propertyDescriptor) {
|
||||
|
||||
@@ -43,7 +43,8 @@ public class BothSignatureWriter {
|
||||
|
||||
public enum Mode {
|
||||
METHOD(CheckSignatureAdapter.METHOD_SIGNATURE),
|
||||
CLASS(CheckSignatureAdapter.CLASS_SIGNATURE),;
|
||||
CLASS(CheckSignatureAdapter.CLASS_SIGNATURE),
|
||||
TYPE(CheckSignatureAdapter.TYPE_SIGNATURE);
|
||||
|
||||
private final int asmType;
|
||||
|
||||
@@ -61,6 +62,9 @@ public class BothSignatureWriter {
|
||||
RETURN_TYPE,
|
||||
METHOD_END,
|
||||
|
||||
FIELD,
|
||||
FIELD_END,
|
||||
|
||||
SUPERS,
|
||||
CLASS_END,
|
||||
}
|
||||
@@ -341,6 +345,16 @@ public class BothSignatureWriter {
|
||||
checkState(State.PARAMETERS);
|
||||
}
|
||||
|
||||
public void writeFieldTypeStart() {
|
||||
transitionState(State.START, State.FIELD);
|
||||
jetSignatureWriter = new JetSignatureWriter();
|
||||
}
|
||||
|
||||
public void writeFieldTypeEnd() {
|
||||
jetSignatureWriter = null;
|
||||
transitionState(State.FIELD, State.FIELD_END);
|
||||
}
|
||||
|
||||
public void writeParameterType(JvmMethodParameterKind parameterKind) {
|
||||
transitionState(State.PARAMETERS, State.PARAMETER);
|
||||
|
||||
@@ -486,7 +500,7 @@ public class BothSignatureWriter {
|
||||
|
||||
@Nullable
|
||||
public String makeJavaGenericSignature() {
|
||||
if (state != State.METHOD_END && state != State.CLASS_END) {
|
||||
if (state != State.METHOD_END && state != State.CLASS_END && state != State.FIELD_END) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
checkTopLevel();
|
||||
|
||||
@@ -636,6 +636,15 @@ public class JetTypeMapper extends BindingTraceAware {
|
||||
return signatureVisitor.makeJvmMethodSignature(methodName);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String mapFieldSignature(@NotNull JetType backingFieldType) {
|
||||
BothSignatureWriter signatureVisitor = new BothSignatureWriter(BothSignatureWriter.Mode.TYPE, true);
|
||||
signatureVisitor.writeFieldTypeStart();
|
||||
mapType(backingFieldType, signatureVisitor, JetTypeMapperMode.VALUE);
|
||||
signatureVisitor.writeFieldTypeEnd();
|
||||
return signatureVisitor.makeJavaGenericSignature();
|
||||
}
|
||||
|
||||
private void writeThisIfNeeded(
|
||||
@NotNull CallableMemberDescriptor descriptor,
|
||||
@NotNull OwnerKind kind,
|
||||
|
||||
Reference in New Issue
Block a user