diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/SignatureUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/SignatureUtil.java index b8ee1a1c445..2903242169c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/SignatureUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/SignatureUtil.java @@ -68,6 +68,10 @@ public class SignatureUtil { private static void genTypeParams(JetClass type, StringBuilder sb) { List parameters = type.getTypeParameterList().getParameters(); + if (parameters.isEmpty()) { + return; + } + sb.append('<'); for(JetTypeParameter param : parameters) { sb.append("T"); Variance variance = param.getVariance(); @@ -78,5 +82,6 @@ public class SignatureUtil { sb.append(param.getName()); sb.append(";"); } + sb.append('>'); } } diff --git a/stdlib/src/jet/typeinfo/TypeInfo.java b/stdlib/src/jet/typeinfo/TypeInfo.java index a5ad5850ebe..fbba351bcbd 100644 --- a/stdlib/src/jet/typeinfo/TypeInfo.java +++ b/stdlib/src/jet/typeinfo/TypeInfo.java @@ -536,13 +536,20 @@ public abstract class TypeInfo implements JetObject { } public void parseVars(Signature signature) { - while(cur < string.length && string[cur] == 'T') { - if(signature.variables == null) { - signature.variables = new LinkedList(); - signature.varNames = new HashMap(); + if (cur < string.length && string[cur] == '<') { + cur++; + while(cur < string.length && string[cur] != '>') { + if(signature.variables == null) { + signature.variables = new LinkedList(); + signature.varNames = new HashMap(); + } + if (string[cur] != 'T') { + throw new IllegalStateException(new String(string)); + } + cur++; + signature.variables.add(parseVar(signature)); } cur++; - signature.variables.add(parseVar(signature)); } signature.variables = signature.variables == null ? Collections.emptyList() : signature.variables; signature.varNames = signature.varNames == null ? Collections.emptyMap() : signature.varNames;