langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java
Print this page
@@ -1210,29 +1210,50 @@
}
public List<VarSymbol> params() {
owner.complete();
if (params == null) {
- List<Name> names = savedParameterNames;
+ List<Name> paramNames = 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();
- }
+ 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()) {
- buf.append(new VarSymbol(PARAMETER, names.head, t, this));
- names = names.tail;
+ 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() {