ReadKotlinBinaryClassTest: List<*>

This commit is contained in:
Stepan Koltsov
2012-01-18 12:03:42 +04:00
parent 0229e725ab
commit 6ceb6816be
14 changed files with 95 additions and 29 deletions
@@ -1,17 +1,21 @@
package jet.typeinfo;
import org.jetbrains.jet.rt.signature.JetSignatureVariance;
/**
* @author alex.tkachman
*/
public enum TypeInfoVariance {
INVARIANT("") ,
IN("in"),
OUT("out");
INVARIANT("", JetSignatureVariance.INVARIANT) ,
IN("in", JetSignatureVariance.IN),
OUT("out", JetSignatureVariance.OUT);
private final String label;
private final JetSignatureVariance variance;
TypeInfoVariance(String label) {
TypeInfoVariance(String label, JetSignatureVariance variance) {
this.label = label;
this.variance = variance;
}
@Override
@@ -6,6 +6,7 @@ import jet.typeinfo.TypeInfoProjection;
import jet.typeinfo.TypeInfoVariance;
import org.jetbrains.jet.rt.signature.JetSignatureExceptionsAdapter;
import org.jetbrains.jet.rt.signature.JetSignatureReader;
import org.jetbrains.jet.rt.signature.JetSignatureVariance;
import org.jetbrains.jet.rt.signature.JetSignatureVisitor;
import java.lang.reflect.TypeVariable;
@@ -176,17 +177,17 @@ class TypeInfoParser {
this.projections = new ArrayList<TypeInfoProjection>();
}
private static TypeInfoVariance parseVariance(char wildcard) {
switch (wildcard) {
case '=': return TypeInfoVariance.INVARIANT;
case '+': return TypeInfoVariance.OUT;
case '-': return TypeInfoVariance.IN;
private static TypeInfoVariance parseVariance(JetSignatureVariance variance) {
switch (variance) {
case INVARIANT: return TypeInfoVariance.INVARIANT;
case OUT: return TypeInfoVariance.OUT;
case IN: return TypeInfoVariance.IN;
default: throw new IllegalStateException();
}
}
@Override
public JetSignatureVisitor visitTypeArgument(final char wildcard) {
public JetSignatureVisitor visitTypeArgument(final JetSignatureVariance wildcard) {
final TypeInfoVariance variance = parseVariance(wildcard);
return new SignatureParserJetSignatureAdapter(classLoader, signature) {
@Override
@@ -76,7 +76,7 @@ public class JetSignatureAdapter implements JetSignatureVisitor {
}
@Override
public JetSignatureVisitor visitTypeArgument(char wildcard) {
public JetSignatureVisitor visitTypeArgument(JetSignatureVariance wildcard) {
return this;
}
@@ -82,7 +82,7 @@ public class JetSignatureExceptionsAdapter implements JetSignatureVisitor {
}
@Override
public JetSignatureVisitor visitTypeArgument(char wildcard) {
public JetSignatureVisitor visitTypeArgument(JetSignatureVariance wildcard) {
throw new IllegalStateException();
}
@@ -194,12 +194,12 @@ public class JetSignatureReader {
case '-':
pos = parseType(signature,
pos + 1,
v.visitTypeArgument(c));
v.visitTypeArgument(JetSignatureVariance.parseVariance(c)));
break;
default:
pos = parseType(signature,
pos,
v.visitTypeArgument('='));
v.visitTypeArgument(JetSignatureVariance.INVARIANT));
break;
}
}
@@ -0,0 +1,30 @@
package org.jetbrains.jet.rt.signature;
/**
* @author Stepan Koltsov
*/
public enum JetSignatureVariance {
INVARIANT('='),
IN('-'),
OUT('+'),
;
private final char c;
private JetSignatureVariance(char c) {
this.c = c;
}
public char getC() {
return c;
}
public static JetSignatureVariance parseVariance(char c) {
switch (c) {
case '=': return INVARIANT;
case '+': return OUT;
case '-': return IN;
default: throw new IllegalStateException();
}
}
}
@@ -134,7 +134,7 @@ public interface JetSignatureVisitor {
* @param wildcard '+', '-' or '='.
* @return a non null visitor to visit the signature of the type argument.
*/
JetSignatureVisitor visitTypeArgument(char wildcard);
JetSignatureVisitor visitTypeArgument(JetSignatureVariance wildcard);
/**
* Ends the visit of a signature corresponding to a class or interface type.
@@ -171,13 +171,13 @@ public class JetSignatureWriter implements JetSignatureVisitor {
}
@Override
public JetSignatureWriter visitTypeArgument(final char wildcard) {
public JetSignatureWriter visitTypeArgument(JetSignatureVariance variance) {
if (argumentStack % 2 == 0) {
++argumentStack;
buf.append('<');
}
if (wildcard != '=') {
buf.append(wildcard);
if (variance.getC() != '=') {
buf.append(variance.getC());
}
return this;
}