private void visitExpression()

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);
        }
    }