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() {