Search in sources :

Example 6 with Parts

use of com.redhat.qute.parser.expression.Parts in project quarkus-ls by redhat-developer.

the class Expression method getNamespacePart.

/**
 * Returns the namespace part of the expression and null otherwise.
 *
 * @return the namespace part of the expression and null otherwise.
 */
public NamespacePart getNamespacePart() {
    List<Node> nodes = getExpressionContent();
    if (nodes.isEmpty()) {
        return null;
    }
    Parts parts = (Parts) nodes.get(0);
    return parts.getNamespacePart();
}
Also used : Parts(com.redhat.qute.parser.expression.Parts)

Example 7 with Parts

use of com.redhat.qute.parser.expression.Parts in project quarkus-ls by redhat-developer.

the class QuteSearchUtils method tryToCollectObjectParts.

/**
 * Try to collect all object parts from the given expression
 * <code>nodeExpr</code> which matches the given part name
 * <code>partName</code>.
 *
 * @param partName  the part name.
 * @param matcher   the matcher strategy.
 * @param nodeExpr  the Qute node expression
 * @param collector the node collector.
 *
 * @return true if the given nodeExpr reference the part name as object part and
 *         false otherwise.
 */
private static boolean tryToCollectObjectParts(String partName, PartNameMatcher matcher, Node nodeExpr, BiConsumer<Node, Range> collector) {
    switch(nodeExpr.getKind()) {
        case Expression:
            {
                Expression expression = (Expression) nodeExpr;
                boolean result = false;
                List<Node> nodes = expression.getExpressionContent();
                for (Node node : nodes) {
                    // ex : partName=item
                    // node expression can be
                    // 1) a simple expression:
                    // --> {item_count} --> [ObjectPart=item_count]
                    // --> {item.name} --> [ObjectPart=item, PropertyPart=name)
                    // --> {item.getName()} --> [ObjectPart=item, MethodPart=getName())
                    // In those cases, one object part will be collected =>{|item|_count},
                    // {|item|.name}, {|item|.getName()}
                    // 2) an expression with method part which can host another expressions when
                    // method have parameters
                    // --> {item.getName(item.name)} --> [ObjectPart=item,
                    // MethodPart=getName(item.name))
                    // In this case, two object parts will be collected =>
                    // {|item|.getName(|item|.name)}
                    result |= tryToCollectObjectParts(partName, matcher, node, collector);
                }
                return result;
            }
        case ExpressionParts:
            {
                Parts parts = (Parts) nodeExpr;
                boolean result = false;
                for (Node partNode : parts.getChildren()) {
                    result |= tryToCollectObjectParts(partName, matcher, partNode, collector);
                }
                return result;
            }
        case ExpressionPart:
            {
                Part part = (Part) nodeExpr;
                if (part.getPartKind() == PartKind.Object) {
                    ObjectPart objectPart = (ObjectPart) part;
                    if (isMatch(objectPart, partName, matcher)) {
                        Range range = QutePositionUtility.createRange(objectPart);
                        collector.accept(objectPart, range);
                        return true;
                    }
                } else if (part.getPartKind() == PartKind.Method) {
                    MethodPart methodPart = (MethodPart) part;
                    List<Parameter> parameters = methodPart.getParameters();
                    boolean result = false;
                    for (Parameter parameter : parameters) {
                        Expression paramExpr = parameter.getJavaTypeExpression();
                        if (paramExpr != null) {
                            result |= tryToCollectObjectParts(partName, matcher, paramExpr, collector);
                        }
                    }
                    return result;
                }
            }
            break;
        default:
            break;
    }
    return false;
}
Also used : ObjectPart(com.redhat.qute.parser.expression.ObjectPart) Expression(com.redhat.qute.parser.template.Expression) Parts(com.redhat.qute.parser.expression.Parts) ObjectPart(com.redhat.qute.parser.expression.ObjectPart) NamespacePart(com.redhat.qute.parser.expression.NamespacePart) MethodPart(com.redhat.qute.parser.expression.MethodPart) Part(com.redhat.qute.parser.expression.Part) Node(com.redhat.qute.parser.template.Node) Parameter(com.redhat.qute.parser.template.Parameter) List(java.util.List) Range(org.eclipse.lsp4j.Range) MethodPart(com.redhat.qute.parser.expression.MethodPart)

Example 8 with Parts

use of com.redhat.qute.parser.expression.Parts in project quarkus-ls by redhat-developer.

the class Expression method getObjectPart.

/**
 * Returns the object part of the expression and null otherwise.
 *
 * @return the object part of the expression and null otherwise.
 */
public ObjectPart getObjectPart() {
    List<Node> nodes = getExpressionContent();
    if (nodes.isEmpty()) {
        return null;
    }
    Parts parts = (Parts) nodes.get(0);
    return parts.getObjectPart();
}
Also used : Parts(com.redhat.qute.parser.expression.Parts)

Example 9 with Parts

use of com.redhat.qute.parser.expression.Parts in project quarkus-ls by redhat-developer.

the class QuteDefinition method findDefinitionFromPropertyPart.

private CompletableFuture<List<? extends LocationLink>> findDefinitionFromPropertyPart(Part part, Template template) {
    String projectUri = template.getProjectUri();
    if (projectUri != null) {
        Parts parts = part.getParent();
        Part previousPart = parts.getPreviousPart(part);
        return // 
        javaCache.resolveJavaType(previousPart, projectUri).thenCompose(previousResolvedType -> {
            if (previousResolvedType != null) {
                if (previousResolvedType.isIterable()) {
                    // Expression uses iterable type
                    // {@java.util.List<org.acme.Item items>
                    // {items.si|ze()}
                    // Property, method to find as definition must be done for iterable type (ex :
                    // java.util.List>
                    String iterableType = previousResolvedType.getIterableType();
                    CompletableFuture<ResolvedJavaTypeInfo> iterableResolvedTypeFuture = javaCache.resolveJavaType(iterableType, projectUri);
                    return iterableResolvedTypeFuture.thenCompose((iterableResolvedType) -> {
                        return findDefinitionFromPropertyPart(part, projectUri, iterableResolvedType);
                    });
                }
                return findDefinitionFromPropertyPart(part, projectUri, previousResolvedType);
            }
            return NO_DEFINITION;
        });
    }
    return NO_DEFINITION;
}
Also used : Parts(com.redhat.qute.parser.expression.Parts) ObjectPart(com.redhat.qute.parser.expression.ObjectPart) MethodPart(com.redhat.qute.parser.expression.MethodPart) NamespacePart(com.redhat.qute.parser.expression.NamespacePart) Part(com.redhat.qute.parser.expression.Part) PropertyPart(com.redhat.qute.parser.expression.PropertyPart) ResolvedJavaTypeInfo(com.redhat.qute.commons.ResolvedJavaTypeInfo)

Example 10 with Parts

use of com.redhat.qute.parser.expression.Parts in project quarkus-ls by redhat-developer.

the class JavaDataModelCache method resolveJavaType.

public CompletableFuture<ResolvedJavaTypeInfo> resolveJavaType(Part part, String projectUri, boolean nullIfDontMatchWithIterable) {
    Parts parts = part.getParent();
    int partIndex = parts.getPartIndex(part);
    return resolveJavaType(parts, partIndex, projectUri, nullIfDontMatchWithIterable);
}
Also used : Parts(com.redhat.qute.parser.expression.Parts)

Aggregations

Parts (com.redhat.qute.parser.expression.Parts)10 Part (com.redhat.qute.parser.expression.Part)6 ResolvedJavaTypeInfo (com.redhat.qute.commons.ResolvedJavaTypeInfo)4 NamespacePart (com.redhat.qute.parser.expression.NamespacePart)4 ObjectPart (com.redhat.qute.parser.expression.ObjectPart)4 Node (com.redhat.qute.parser.template.Node)4 Expression (com.redhat.qute.parser.template.Expression)3 MethodPart (com.redhat.qute.parser.expression.MethodPart)2 Parameter (com.redhat.qute.parser.template.Parameter)2 Section (com.redhat.qute.parser.template.Section)2 List (java.util.List)2 InvalidMethodReason (com.redhat.qute.commons.InvalidMethodReason)1 JavaElementInfo (com.redhat.qute.commons.JavaElementInfo)1 JavaMemberInfo (com.redhat.qute.commons.JavaMemberInfo)1 JavaTypeInfo (com.redhat.qute.commons.JavaTypeInfo)1 QuteJavaDefinitionParams (com.redhat.qute.commons.QuteJavaDefinitionParams)1 QuteJavaTypesParams (com.redhat.qute.commons.QuteJavaTypesParams)1 NamespaceResolverInfo (com.redhat.qute.commons.datamodel.resolvers.NamespaceResolverInfo)1 BadLocationException (com.redhat.qute.ls.commons.BadLocationException)1 PropertyPart (com.redhat.qute.parser.expression.PropertyPart)1