public String upTo(String except) { int start = i; while (except.indexOf(peek()) < 0) take(); return s.substring(start, i); }
public String upTo(String except) { int start = i; while (except.indexOf(peek()) < 0) take(); return s.substring(start, i); }
public String upTo(String except) { int start = i; while (except.indexOf(peek()) < 0) take(); return s.substring(start, i); }
/** * 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); 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); 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<>(); 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(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('>')); } }
/** * 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('>')); } }
/** * 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(); }
/** * 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('>')); } }
/** * 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(); }
/** * 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('>')); } }
public String upTo(String except) { int start = i; while (except.indexOf(peek()) < 0) take(); return s.substring(start, i); }
public String upTo(String except) { int start = i; while (except.indexOf(peek()) < 0) take(); return s.substring(start, i); }
public String upTo(String except) { int start = i; while (except.indexOf(peek()) < 0) take(); return s.substring(start, i); }