in ti/phase2/jars/compiler-xdoclet/src/java/org/apache/ti/compiler/xdoclet/internal/tools/AnnotationsToXDoclet.java [217:301]
private void translateAnnotation(StreamTokenizer tok, PrintWriter out, String firstToken, String indent,
ArrayList tags)
throws IOException {
for (int i = 0; i < QUALIFIED_ANNOTATIONS.length; i++) {
String qualifiedAnnotation = QUALIFIED_ANNOTATIONS[i];
if (firstToken.startsWith(qualifiedAnnotation)) {
firstToken = '@' + firstToken.substring(qualifiedAnnotation.length());
}
}
String nextToken = getToken(tok);
if (! nextToken.equals("(")) {
tok.pushBack();
tags.add(firstToken);
return;
} else {
StringBuffer tag = new StringBuffer(firstToken);
int thisTagPos = tags.size();
tags.add("");
while (! (nextToken = getToken(tok)).equals(")")) {
if (nextToken.equals(",")) nextToken = getToken(tok);
String attrName = nextToken;
expectToken(tok, "=");
String value = getToken(tok);
int pos;
if (value.charAt(0) == '@') {
if (attrName.equals("validationErrorForward")) {
// Special case:
// validationErrorForward=@ti.forward(...)
// goes to
// @ti.validationErrorForward(...)
value = "@ti.validationErrorForward";
}
translateAnnotation(tok, out, value, indent, tags);
value = null;
} else if (value.equals("{")) {
StringBuffer stringArray = null;
while (! (nextToken = getToken(tok)).equals("}")) {
if (nextToken.equals(",")) nextToken = getToken(tok);
if (nextToken.charAt(0) == '@') {
translateAnnotation(tok, out, nextToken, indent, tags);
} else {
// We're expecting a string array element here.
assert nextToken.length() > 1 && nextToken.charAt(0) == '"'
&& nextToken.charAt(nextToken.length() - 1) == '"' : nextToken;
if (stringArray == null) {
stringArray = new StringBuffer("\"");
} else {
stringArray.append(',');
}
stringArray.append(nextToken.substring(1, nextToken.length() - 1));
}
}
value = stringArray != null ? stringArray.append('"').toString() : null;
} else if (value.equals("true") || value.equals("false")) {
value = '"' + value + '"';
} else if (value.endsWith(".class")) {
value = '"' + value.substring(0, value.length() - 6) + '"';
} else if ((pos = value.indexOf("ti.NavigateTo.")) != -1) {
value = '"' + value.substring(pos + 14) + '"';
} else if ((pos = value.indexOf("ti.validatorVersion.")) != -1) {
value = '"' + value.substring(pos + 20) + '"';
} else if (isNumber(value)) {
value = '"' + value + '"';
} else {
assert value.charAt(0) == '"' && value.charAt(value.length() - 1) == '"' : value;
if (value.charAt(0) != '"') value = '"' + value;
if (value.charAt(value.length() - 1) != '"') value += '"';
}
if (value != null) {
tag.append(' ').append(attrName).append('=').append(value);
}
}
tags.set(thisTagPos, tag.toString());
}
}