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=873b06578d4edb16a6c34617453815a8bce44aae;hb=9530ffc869c8b7768131e093593200126918ee28;hpb=7e89326d6efbc622ba28d368dc9a073c98ba1b73 diff --git a/src/main/gov/nasa/jpf/vm/Types.java b/src/main/gov/nasa/jpf/vm/Types.java index 873b065..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 - opening = signature.indexOf(';', pos); + marker = signature.indexOf(';', pos); // Break if this is the end of the type variable names - if (signature.charAt(opening + 1) == '>') + if (signature.charAt(marker + 1) == '>') break; } int colon = signature.indexOf(':', pos); - String typeVarName = signature.substring(opening + 1, colon); + String typeVarName = signature.substring(marker + 1, colon); typeVarNames.add(typeVarName); pos = colon + 1; } @@ -1201,5 +1203,62 @@ public class Types { 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 }