X-Git-Url: http://plrg.eecs.uci.edu/git/?p=jpf-core.git;a=blobdiff_plain;f=src%2Fmain%2Fgov%2Fnasa%2Fjpf%2Fvm%2FTypes.java;h=90e7f54dca5a3a8ba6316ee3d83a07e9daf4d07a;hp=c5b2f7f82d3cee8b4b4f843a4aaccd25d00687a2;hb=9530ffc869c8b7768131e093593200126918ee28;hpb=3f0d5734e04323c9734cbb0942f6285cc6afcb68 diff --git a/src/main/gov/nasa/jpf/vm/Types.java b/src/main/gov/nasa/jpf/vm/Types.java index c5b2f7f..90e7f54 100644 --- a/src/main/gov/nasa/jpf/vm/Types.java +++ b/src/main/gov/nasa/jpf/vm/Types.java @@ -919,7 +919,8 @@ public class Types { return signature.substring(1, len1).replace('/', '.'). replaceAll(";L", ", "). replace("", ">"); + replace(";>", ">"). + replaceAll(" typeVarNames = new ArrayList<>(); + + while (pos < signature.length()) { + if (pos > 0) { + // Start from ';' if this is not the first type variable name + marker = signature.indexOf(';', pos); + // Break if this is the end of the type variable names + if (signature.charAt(marker + 1) == '>') + break; + } + int colon = signature.indexOf(':', pos); + String typeVarName = signature.substring(marker + 1, colon); + typeVarNames.add(typeVarName); + pos = colon + 1; + } + + String[] arrTypeVarNames = new String[typeVarNames.size()]; + typeVarNames.toArray(arrTypeVarNames); + + return arrTypeVarNames; + } + + // TODO: Fix for Groovy's model-checking + public static String[] getParameterizedTypes(String signature) { + int pos = signature.indexOf('<', 0); + if (pos == -1) + return new String[0]; + ArrayList typeVarNames = new ArrayList<>(); + + while (pos < signature.length()) { + String typeVarName = ""; + int comma = signature.indexOf(',', pos); + if (comma == -1) { + int closing = signature.indexOf('>', pos); + typeVarName = signature.substring(pos + 1, closing); + pos = signature.length(); + } else { + typeVarName = signature.substring(pos + 1, comma); + pos = comma + 1; + } + typeVarNames.add(typeVarName); + } + + String[] arrTypeVarNames = new String[typeVarNames.size()]; + typeVarNames.toArray(arrTypeVarNames); + + return arrTypeVarNames; + } + + public static String getGenericClassName(String signature) { + int opening = signature.indexOf('<'); + if (opening == -1) + return signature; + else + return signature.substring(0, opening); + } + + public static String getOwnerClassName(String signature) { + int marker = signature.indexOf('$'); + if (marker == -1) + return null; + else + return signature.substring(0, marker); + } + + public static boolean isGenericSignature(String signature) { + if (signature == null || signature.equals("")) + return false; + int opening = signature.indexOf('<'); + return (opening != -1); + } + + public static boolean isTypeParameter(String parameterizedType, String signature) { + if (signature == null || signature.equals("")) + return false; + String typeParamSig = parameterizedType.concat(":"); + return signature.contains(typeParamSig); + } + // TODO: Fix for Groovy's model-checking }