fix erased parameters codegen and parsing
This commit is contained in:
@@ -232,11 +232,11 @@ public class BothSignatureWriter {
|
||||
writeAsmType0(asmType);
|
||||
}
|
||||
|
||||
public void writeFormalTypeParameter(final String name, Variance variance) {
|
||||
public void writeFormalTypeParameter(final String name, Variance variance, boolean reified) {
|
||||
checkTopLevel();
|
||||
|
||||
signatureVisitor().visitFormalTypeParameter(name);
|
||||
jetSignatureWriter.visitFormalTypeParameter(name, JetSignatureUtils.translateVariance(variance));
|
||||
jetSignatureWriter.visitFormalTypeParameter(name, JetSignatureUtils.translateVariance(variance), reified);
|
||||
|
||||
generic = true;
|
||||
}
|
||||
|
||||
@@ -130,6 +130,9 @@ public class FunctionCodegen {
|
||||
av.visitEnd();
|
||||
}
|
||||
for (final TypeParameterDescriptor typeParameterDescriptor : typeParameters) {
|
||||
if (!typeParameterDescriptor.isReified()) {
|
||||
continue;
|
||||
}
|
||||
AnnotationVisitor av = mv.visitParameterAnnotation(start++, JvmStdlibNames.JET_TYPE_PARAMETER.getDescriptor(), true);
|
||||
av.visit(JvmStdlibNames.JET_TYPE_PARAMETER_NAME_FIELD, typeParameterDescriptor.getName());
|
||||
av.visitEnd();
|
||||
@@ -171,6 +174,9 @@ public class FunctionCodegen {
|
||||
add++;
|
||||
|
||||
for (final TypeParameterDescriptor typeParameterDescriptor : typeParameters) {
|
||||
if (!typeParameterDescriptor.isReified()) {
|
||||
continue;
|
||||
}
|
||||
int slot = frameMap.enterTemp();
|
||||
add++;
|
||||
codegen.addTypeParameter(typeParameterDescriptor, StackValue.local(slot, JetTypeMapper.TYPE_TYPEINFO));
|
||||
|
||||
@@ -495,7 +495,7 @@ public class JetTypeMapper {
|
||||
}
|
||||
|
||||
private void writeFormalTypeParameter(TypeParameterDescriptor typeParameterDescriptor, BothSignatureWriter signatureVisitor) {
|
||||
signatureVisitor.writeFormalTypeParameter(typeParameterDescriptor.getName(), typeParameterDescriptor.getVariance());
|
||||
signatureVisitor.writeFormalTypeParameter(typeParameterDescriptor.getName(), typeParameterDescriptor.getVariance(), typeParameterDescriptor.isReified());
|
||||
|
||||
classBound:
|
||||
{
|
||||
|
||||
+8
-6
@@ -375,12 +375,13 @@ public class JavaDescriptorResolver {
|
||||
private final DeclarationDescriptor containingDeclaration;
|
||||
private final PsiTypeParameterListOwner psiOwner;
|
||||
private final String name;
|
||||
private final boolean reified;
|
||||
private final int index;
|
||||
private final TypeInfoVariance variance;
|
||||
private final TypeVariableResolver typeVariableResolver;
|
||||
|
||||
protected JetSignatureTypeParameterVisitor(DeclarationDescriptor containingDeclaration, PsiTypeParameterListOwner psiOwner,
|
||||
String name, int index, TypeInfoVariance variance, TypeVariableResolver typeVariableResolver)
|
||||
String name, boolean reified, int index, TypeInfoVariance variance, TypeVariableResolver typeVariableResolver)
|
||||
{
|
||||
if (name.isEmpty()) {
|
||||
throw new IllegalStateException();
|
||||
@@ -389,6 +390,7 @@ public class JavaDescriptorResolver {
|
||||
this.containingDeclaration = containingDeclaration;
|
||||
this.psiOwner = psiOwner;
|
||||
this.name = name;
|
||||
this.reified = reified;
|
||||
this.index = index;
|
||||
this.variance = variance;
|
||||
this.typeVariableResolver = typeVariableResolver;
|
||||
@@ -425,7 +427,7 @@ public class JavaDescriptorResolver {
|
||||
TypeParameterDescriptor typeParameter = TypeParameterDescriptor.createForFurtherModification(
|
||||
containingDeclaration,
|
||||
Collections.<AnnotationDescriptor>emptyList(), // TODO: wrong
|
||||
true, // TODO: wrong
|
||||
reified,
|
||||
JetSignatureUtils.translateVariance(variance),
|
||||
name,
|
||||
index);
|
||||
@@ -462,8 +464,8 @@ public class JavaDescriptorResolver {
|
||||
private int formalTypeParameterIndex = 0;
|
||||
|
||||
@Override
|
||||
public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance) {
|
||||
return new JetSignatureTypeParameterVisitor(classDescriptor, clazz, name, formalTypeParameterIndex++, variance, new MyTypeVariableResolver()) {
|
||||
public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance, boolean reified) {
|
||||
return new JetSignatureTypeParameterVisitor(classDescriptor, clazz, name, reified, formalTypeParameterIndex++, variance, new MyTypeVariableResolver()) {
|
||||
@Override
|
||||
protected void done(TypeParameterDescriptor typeParameterDescriptor) {
|
||||
r.add(typeParameterDescriptor);
|
||||
@@ -1269,9 +1271,9 @@ public class JavaDescriptorResolver {
|
||||
private int formalTypeParameterIndex = 0;
|
||||
|
||||
@Override
|
||||
public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance) {
|
||||
public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance, boolean reified) {
|
||||
|
||||
return new JetSignatureTypeParameterVisitor(functionDescriptor, method, name, formalTypeParameterIndex++, variance, new MyTypeVariableResolver()) {
|
||||
return new JetSignatureTypeParameterVisitor(functionDescriptor, method, name, reified, formalTypeParameterIndex++, variance, new MyTypeVariableResolver()) {
|
||||
@Override
|
||||
protected void done(TypeParameterDescriptor typeParameterDescriptor) {
|
||||
r.add(typeParameterDescriptor);
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
class OneTypeParameterErased<P, erased Q>(q: Q)
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
fun <erased P> funParamParam(a: Int, b: P) = 1
|
||||
Reference in New Issue
Block a user