if (rover.peek() == '<') { sb.append(rover.take('<')); while (rover.peek() != '>') { switch (rover.peek()) { case 'L' : case '[' : sb.append(rover.take('T')); // 'T' name = rover.upTo(";"); sb.append(assign(map, name)); sb.append(rover.take(';')); break; sb.append(rover.take()); reference(sb, map, rover, false); break; sb.append(rover.take()); break; sb.append(rover.take('>'));
Rover rover, boolean primitivesAllowed) { char type = rover.take(); sb.append(type); String fqnb = rover.upTo("<;."); sb.append(fqnb); body(sb, map, rover); while (rover.peek() == '.') { sb.append(rover.take('.')); sb.append(rover.upTo("<;.")); body(sb, map, rover); sb.append(rover.take(';')); String name = rover.upTo(";"); name = assign(map, name); sb.append(name); sb.append(rover.take(';'));
if (rover.peek() == '<') { sb.append(rover.take('<')); while (rover.peek() != '>') { switch (rover.peek()) { case 'L' : case '[' : sb.append(rover.take('T')); // 'T' name = rover.upTo(";"); sb.append(assign(map, name)); sb.append(rover.take(';')); break; sb.append(rover.take()); reference(sb, map, rover, false); break; sb.append(rover.take()); break; sb.append(rover.take('>'));
if (rover.peek() == '<') { sb.append(rover.take('<')); while (rover.peek() != '>') { switch (rover.peek()) { case 'L' : case '[' : sb.append(rover.take('T')); // 'T' name = rover.upTo(";"); sb.append(assign(map, name)); sb.append(rover.take(';')); break; sb.append(rover.take()); reference(sb, map, rover, false); break; sb.append(rover.take()); break; sb.append(rover.take('>'));
char type = rover.take(); sb.append(type); reference(sb, map, rover, true); } else if (type == 'L') { String fqnb = rover.upTo("<;."); sb.append(fqnb); body(sb, map, rover); while (rover.peek() == '.') { sb.append(rover.take('.')); sb.append(rover.upTo("<;.")); body(sb, map, rover); sb.append(rover.take(';')); } else if (type == 'T') { String name = rover.upTo(";"); name = assign(map, name); sb.append(name); sb.append(rover.take(';')); } else { if (!primitivesAllowed)
if (rover.peek() == '<') { sb.append(rover.take('<')); while (rover.peek() != '>') { switch (rover.peek()) { case 'L' : case '[' : sb.append(rover.take('T')); // 'T' name = rover.upTo(";"); sb.append(assign(map, name)); sb.append(rover.take(';')); break; sb.append(rover.take()); reference(sb, map, rover, false); break; sb.append(rover.take()); break; sb.append(rover.take('>'));
char type = rover.take(); sb.append(type); reference(sb, map, rover, true); } else if (type == 'L') { String fqnb = rover.upTo("<;."); sb.append(fqnb); body(sb, map, rover); while (rover.peek() == '.') { sb.append(rover.take('.')); sb.append(rover.upTo("<;.")); body(sb, map, rover); sb.append(rover.take(';')); } else if (type == 'T') { String name = rover.upTo(";"); name = assign(map, name); sb.append(name); sb.append(rover.take(';')); } else { if (!primitivesAllowed)
char type = rover.take(); sb.append(type); reference(sb, map, rover, true); } else if (type == 'L') { String fqnb = rover.upTo("<;."); sb.append(fqnb); body(sb, map, rover); while (rover.peek() == '.') { sb.append(rover.take('.')); sb.append(rover.upTo("<;.")); body(sb, map, rover); sb.append(rover.take(';')); } else if (type == 'T') { String name = rover.upTo(";"); name = assign(map, name); sb.append(name); sb.append(rover.take(';')); } else { if (!primitivesAllowed)
if (rover.peek() == '<') { sb.append(rover.take('<')); while (rover.peek() != '>') { switch (rover.peek()) { case 'L' : case '[' : sb.append(rover.take('T')); // 'T' name = rover.upTo(";"); sb.append(assign(map, name)); sb.append(rover.take(';')); break; sb.append(rover.take()); reference(sb, map, rover, false); break; sb.append(rover.take()); break; sb.append(rover.take('>'));
if (rover.peek() == '<') { sb.append(rover.take('<')); while (rover.peek() != '>') { switch (rover.peek()) { case 'L' : case '[' : sb.append(rover.take('T')); // 'T' name = rover.upTo(";"); sb.append(assign(map, name)); sb.append(rover.take(';')); break; sb.append(rover.take()); reference(sb, map, rover, false); break; sb.append(rover.take()); break; sb.append(rover.take('>'));
char type = rover.take(); sb.append(type); reference(sb, map, rover, true); } else if (type == 'L') { String fqnb = rover.upTo("<;."); sb.append(fqnb); body(sb, map, rover); while (rover.peek() == '.') { sb.append(rover.take('.')); sb.append(rover.upTo("<;.")); body(sb, map, rover); sb.append(rover.take(';')); } else if (type == 'T') { String name = rover.upTo(";"); name = assign(map, name); sb.append(name); sb.append(rover.take(';')); } else { if (!primitivesAllowed)
/** * Normalize a signature to make sure the name of the variables are always * the same. We change the names of the type variables to _n, where n is an * integer. n is incremented for every new name and already used names are * replaced with the _n name. * * @return a normalized signature */ public String normalize(String signature) { StringBuilder sb = new StringBuilder(); Map<String,String> map = new HashMap<String,String>(); Rover rover = new Rover(signature); declare(sb, map, rover); if (rover.peek() == '(') { // method or constructor sb.append(rover.take('(')); while (rover.peek() != ')') { reference(sb, map, rover, true); } sb.append(rover.take(')')); reference(sb, map, rover, true); // return type } else { // field or class reference(sb, map, rover, true); // field type or super class while (!rover.isEOF()) { reference(sb, map, rover, true); // interfaces } } return sb.toString(); }
char type = rover.take(); sb.append(type); reference(sb, map, rover, true); } else if (type == 'L') { String fqnb = rover.upTo("<;."); sb.append(fqnb); body(sb, map, rover); while (rover.peek() == '.') { sb.append(rover.take('.')); sb.append(rover.upTo("<;.")); body(sb, map, rover); sb.append(rover.take(';')); } else if (type == 'T') { String name = rover.upTo(";"); name = assign(map, name); sb.append(name); sb.append(rover.take(';')); } else { if (!primitivesAllowed)
StringBuffer sb = new StringBuffer(); Map<String, String> map = new HashMap<String, String>(); Rover rover = new Rover(signature); declare(sb, map, rover); if (rover.peek() == '(') { sb.append(rover.take('(')); while (rover.peek() != ')') { reference(sb, map, rover, true); sb.append(rover.take(')')); reference(sb, map, rover, true); // return type while (!rover.isEOF()) { reference(sb, map, rover, true); // interfaces
/** * Handle the declaration part. * * @param sb * @param map * @param rover */ private void declare(StringBuilder sb, Map<String, String> map, Rover rover) { char c = rover.peek(); if (c == '<') { sb.append(rover.take('<')); while (rover.peek() != '>') { String name = rover.upTo(":"); name = assign(map, name); sb.append(name); typeVar: while (rover.peek() == ':') { sb.append(rover.take(':')); switch (rover.peek()) { case ':' : // empty class cases continue typeVar; default : reference(sb, map, rover, false); break; } } } sb.append(rover.take('>')); } }
/** * Handle the declaration part. * * @param sb * @param map * @param rover */ private void declare(StringBuffer sb, Map<String, String> map, Rover rover) { char c = rover.peek(); if (c == '<') { sb.append(rover.take('<')); while (rover.peek() != '>') { String name = rover.upTo(":"); name = assign(map, name); sb.append(name); typeVar: while (rover.peek() == ':') { sb.append(rover.take(':')); switch (rover.peek()) { case ':' : // empty class cases continue typeVar; default : reference(sb, map, rover, false); break; } } } sb.append(rover.take('>')); } }
/** * Normalize a signature to make sure the name of the variables are always * the same. We change the names of the type variables to _n, where n is an * integer. n is incremented for every new name and already used names are * replaced with the _n name. * * @return a normalized signature */ public String normalize(String signature) { StringBuilder sb = new StringBuilder(); Map<String, String> map = new HashMap<>(); Rover rover = new Rover(signature); declare(sb, map, rover); if (rover.peek() == '(') { // method or constructor sb.append(rover.take('(')); while (rover.peek() != ')') { reference(sb, map, rover, true); } sb.append(rover.take(')')); reference(sb, map, rover, true); // return type } else { // field or class reference(sb, map, rover, true); // field type or super class while (!rover.isEOF()) { reference(sb, map, rover, true); // interfaces } } return sb.toString(); }
/** * Handle the declaration part. * * @param sb * @param map * @param rover */ private void declare(StringBuilder sb, Map<String,String> map, Rover rover) { char c = rover.peek(); if (c == '<') { sb.append(rover.take('<')); while (rover.peek() != '>') { String name = rover.upTo(":"); name = assign(map, name); sb.append(name); typeVar: while (rover.peek() == ':') { sb.append(rover.take(':')); switch (rover.peek()) { case ':' : // empty class cases continue typeVar; default : reference(sb, map, rover, false); break; } } } sb.append(rover.take('>')); } }
/** * Handle the declaration part. * * @param sb * @param map * @param rover */ private void declare(StringBuilder sb, Map<String,String> map, Rover rover) { char c = rover.peek(); if (c == '<') { sb.append(rover.take('<')); while (rover.peek() != '>') { String name = rover.upTo(":"); name = assign(map, name); sb.append(name); typeVar: while (rover.peek() == ':') { sb.append(rover.take(':')); switch (rover.peek()) { case ':' : // empty class cases continue typeVar; default : reference(sb, map, rover, false); break; } } } sb.append(rover.take('>')); } }