langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java

Print this page

        

*** 1210,1238 **** } public List<VarSymbol> params() { owner.complete(); if (params == null) { ! List<Name> names = savedParameterNames; savedParameterNames = null; ! if (names == null) { ! names = List.nil(); ! int i = 0; ! for (Type t : type.getParameterTypes()) ! names = names.prepend(name.table.fromString("arg" + i++)); ! names = names.reverse(); ! } ListBuffer<VarSymbol> buf = new ListBuffer<VarSymbol>(); for (Type t : type.getParameterTypes()) { ! buf.append(new VarSymbol(PARAMETER, names.head, t, this)); ! names = names.tail; } params = buf.toList(); } return params; } public Symbol asMemberOf(Type site, Types types) { return new MethodSymbol(flags_field, name, types.memberType(site, this), owner); } public ElementKind getKind() { --- 1210,1259 ---- } public List<VarSymbol> params() { owner.complete(); if (params == null) { ! List<Name> paramNames = savedParameterNames; savedParameterNames = null; ! if (paramNames == null || paramNames.size() != type.getParameterTypes().size()) ! paramNames = List.nil(); ListBuffer<VarSymbol> buf = new ListBuffer<VarSymbol>(); + List<Name> remaining = paramNames; + // assert: remaining and paramNames are both empty or both + // have same cardinality as type.getParameterTypes() + int i = 0; for (Type t : type.getParameterTypes()) { ! Name paramName; ! if (remaining.isEmpty()) { ! // no names for any parameters available ! paramName = createArgName(i, paramNames); ! } else { ! paramName = remaining.head; ! remaining = remaining.tail; ! if (paramName.isEmpty()) { ! // no name for this specific parameter ! paramName = createArgName(i, paramNames); ! } ! } ! buf.append(new VarSymbol(PARAMETER, paramName, t, this)); ! i++; } params = buf.toList(); } return params; } + private Name createArgName(int index, List<Name> exclude) { + String prefix = "arg"; + while (true) { + Name argName = name.table.fromString(prefix + index); + if (!exclude.contains(argName)) + return argName; + prefix += "$"; + } + } + public Symbol asMemberOf(Type site, Types types) { return new MethodSymbol(flags_field, name, types.memberType(site, this), owner); } public ElementKind getKind() {