in src/java/apiview-java-processor/src/main/java/com/azure/tools/apiview/processor/analysers/JavaASTAnalyser.java [1002:1104]
private void visitExpression(Expression expression, ReviewLine definitionLine, boolean condensed) {
if (expression instanceof MethodCallExpr) {
MethodCallExpr methodCallExpr = (MethodCallExpr) expression;
definitionLine.addToken(METHOD_NAME, methodCallExpr.getNameAsString(), Spacing.NO_SPACE);
definitionLine.addToken(PUNCTUATION, "(", Spacing.NO_SPACE);
NodeList<Expression> arguments = methodCallExpr.getArguments();
for (int i = 0; i < arguments.size(); i++) {
Expression argument = arguments.get(i);
if (argument instanceof StringLiteralExpr) {
definitionLine.addToken(STRING_LITERAL, argument.toString(), Spacing.NO_SPACE);
} else {
definitionLine.addToken(TEXT, argument.toString(), Spacing.NO_SPACE);
}
if (i < arguments.size() - 1) {
definitionLine.addToken(PUNCTUATION, ",");
}
}
definitionLine.addToken(PUNCTUATION, ")", Spacing.NO_SPACE);
return;
} else if (expression instanceof StringLiteralExpr) {
StringLiteralExpr stringLiteralExpr = (StringLiteralExpr) expression;
definitionLine.addToken(STRING_LITERAL, stringLiteralExpr.toString(), Spacing.NO_SPACE);
return;
} else if (expression instanceof ArrayInitializerExpr) {
ArrayInitializerExpr arrayInitializerExpr = (ArrayInitializerExpr) expression;
if (!condensed) {
definitionLine.addToken(PUNCTUATION, "{");
}
for (int i = 0; i < arrayInitializerExpr.getChildNodes().size(); i++) {
Node n = arrayInitializerExpr.getChildNodes().get(i);
if (n instanceof Expression) {
visitExpression((Expression) n, definitionLine, condensed);
} else {
definitionLine.addToken(TEXT, arrayInitializerExpr.toString()); // FIXME This was ANNOTATION_PARAMETER_VALUE
}
if (i < arrayInitializerExpr.getChildNodes().size() - 1) {
definitionLine.addToken(PUNCTUATION, ",");
}
}
if (!condensed) {
definitionLine.addToken(PUNCTUATION, "}", Spacing.SPACE_BEFORE);
}
return;
} else if (expression instanceof IntegerLiteralExpr ||
expression instanceof LongLiteralExpr ||
expression instanceof DoubleLiteralExpr) {
definitionLine.addToken(NUMBER, expression.toString(), Spacing.NO_SPACE);
return;
} else if (expression instanceof FieldAccessExpr) {
FieldAccessExpr fieldAccessExpr = (FieldAccessExpr) expression;
visitExpression(fieldAccessExpr.getScope(), definitionLine);
definitionLine
.addToken(PUNCTUATION, ".", Spacing.NO_SPACE)
.addToken(FIELD_NAME, fieldAccessExpr.getNameAsString(), Spacing.NO_SPACE);
return;
} else if (expression instanceof BinaryExpr) {
BinaryExpr binaryExpr = (BinaryExpr) expression;
visitExpression(binaryExpr.getLeft(), definitionLine);
definitionLine.addToken(TEXT, " " + binaryExpr.getOperator().asString() + " ");
visitExpression(binaryExpr.getRight(), definitionLine);
return;
} else if (expression instanceof ClassExpr) {
ClassExpr classExpr = (ClassExpr) expression;
// lookup to see if the type is known about, if so, make it a link, otherwise leave it as text
String typeName = classExpr.getChildNodes().get(0).toString();
// if (apiListing.getKnownTypes().containsKey(typeName)) {
definitionLine.addToken(TYPE_NAME, typeName, null, Spacing.NO_SPACE); // FIXME add ID
return;
// }
// } else {
// node.addToken(TEXT, expression.toString());
} else if (expression instanceof NameExpr) {
NameExpr nameExpr = (NameExpr) expression;
definitionLine.addToken(TYPE_NAME, nameExpr.toString(), Spacing.NO_SPACE);
return;
} else if (expression instanceof BooleanLiteralExpr) {
BooleanLiteralExpr booleanLiteralExpr = (BooleanLiteralExpr) expression;
definitionLine.addToken(KEYWORD, booleanLiteralExpr.toString(), Spacing.NO_SPACE);
return;
} else if (expression instanceof ObjectCreationExpr) {
definitionLine.addToken(KEYWORD, "new")
.addToken(TYPE_NAME, ((ObjectCreationExpr) expression).getTypeAsString())
.addToken(PUNCTUATION, "(")
.addToken(COMMENT, "/* Elided */")
.addToken(PUNCTUATION, ")");
return;
}
// if we fall through to here, just treat it as a string.
// If we are in condensed mode, we strip off everything before the last period
String value = expression.toString();
if (condensed) {
int lastPeriod = value.lastIndexOf('.');
if (lastPeriod != -1) {
value = value.substring(lastPeriod + 1);
}
definitionLine.addToken(TEXT, upperCase(value));
} else {
definitionLine.addToken(TEXT, value);
}
}