use of com.redhat.qute.parser.expression.ObjectPart in project quarkus-ls by redhat-developer.
the class QuteDiagnostics method validateExpressionParts.
private ResolvedJavaTypeInfo validateExpressionParts(Parts parts, Section ownerSection, Template template, String projectUri, QuteValidationSettings validationSettings, ResolutionContext resolutionContext, ResolvingJavaTypeContext resolvingJavaTypeContext, List<Diagnostic> diagnostics) {
ResolvedJavaTypeInfo resolvedJavaType = null;
String namespace = null;
for (int i = 0; i < parts.getChildCount(); i++) {
Part current = parts.getChild(i);
if (current.isLast()) {
// It's the last part, check if it is not ended with '.'
int end = current.getEnd();
String text = template.getText();
if (end < text.length()) {
char c = text.charAt(end);
if (c == '.') {
Range range = QutePositionUtility.createRange(end, end + 1, template);
Diagnostic diagnostic = createDiagnostic(range, DiagnosticSeverity.Error, QuteErrorCode.SyntaxError, "Unexpected '.' token.");
diagnostics.add(diagnostic);
}
}
}
switch(current.getPartKind()) {
case Namespace:
{
NamespacePart namespacePart = (NamespacePart) current;
namespace = validateNamespace(namespacePart, projectUri, validationSettings, resolvingJavaTypeContext, diagnostics);
if (namespace == null) {
// Invalid namespace
return null;
}
break;
}
case Object:
{
ObjectPart objectPart = (ObjectPart) current;
resolvedJavaType = validateObjectPart(namespace, objectPart, ownerSection, template, projectUri, validationSettings, resolutionContext, diagnostics, resolvingJavaTypeContext);
if (resolvedJavaType == null) {
// property, method.
return null;
}
break;
}
case Method:
case Property:
{
// java.util.List<org.acme.Item>
ResolvedJavaTypeInfo iter = resolvedJavaType;
if (resolvedJavaType != null && resolvedJavaType.isIterable() && !resolvedJavaType.isArray()) {
// Expression uses iterable type
// {@java.util.List<org.acme.Item items>
// {items.size()}
// Property, method to validate must be done for iterable type (ex :
// java.util.List
String iterableType = resolvedJavaType.getIterableType();
resolvedJavaType = resolveJavaType(iterableType, projectUri, resolvingJavaTypeContext);
if (resolvedJavaType == null || isResolvingJavaType(resolvedJavaType)) {
// The java type doesn't exists or it is resolving, stop the validation
return null;
}
}
resolvedJavaType = validateMemberPart(current, ownerSection, template, projectUri, validationSettings, resolutionContext, resolvedJavaType, iter, diagnostics, resolvingJavaTypeContext);
if (resolvedJavaType == null) {
// followings property, method.
return null;
}
break;
}
}
}
return resolvedJavaType;
}
use of com.redhat.qute.parser.expression.ObjectPart in project quarkus-ls by redhat-developer.
the class QuteHighlighting method findDocumentHighlights.
public List<DocumentHighlight> findDocumentHighlights(Template template, Position position, CancelChecker cancelChecker) {
try {
List<DocumentHighlight> highlights = new ArrayList<>();
int offset = template.offsetAt(position);
Node node = template.findNodeAt(offset);
if (node == null) {
return Collections.emptyList();
}
node = QutePositionUtility.findBestNode(offset, node);
switch(node.getKind()) {
case ParameterDeclaration:
case Parameter:
highlightReferenceObjectPart(node, offset, highlights, cancelChecker);
break;
case ExpressionPart:
Part part = (Part) node;
if (part.getPartKind() == PartKind.Object) {
highlightDeclaredObject((ObjectPart) part, highlights, cancelChecker);
}
break;
case Section:
higlightSection((Section) node, offset, position, highlights, cancelChecker);
break;
default:
}
return highlights;
} catch (BadLocationException e) {
LOGGER.log(Level.SEVERE, "In QuteHighlighting the client provided Position is at a BadLocation", e);
return Collections.emptyList();
}
}
use of com.redhat.qute.parser.expression.ObjectPart in project quarkus-ls by redhat-developer.
the class UserTagUtils method collectUserTagParameters.
private static void collectUserTagParameters(Expression expression, Set<String> extistingObjectParts, Consumer<ObjectPart> collector, CancelChecker cancelChecker) {
ObjectPart objectPart = expression.getObjectPart();
if (objectPart != null && expression.getNamespacePart() == null) {
String partName = objectPart.getPartName();
if (!extistingObjectParts.contains(partName)) {
extistingObjectParts.add(partName);
collector.accept(objectPart);
}
}
}
use of com.redhat.qute.parser.expression.ObjectPart in project quarkus-ls by redhat-developer.
the class QuteSearchUtils method tryToCollectObjectPartOrParameter.
public static void tryToCollectObjectPartOrParameter(String partName, PartNameMatcher matcher, Expression expression, Node ownerNode, BiConsumer<Node, Range> collector) {
// object part)
if (!tryToCollectObjectParts(partName, matcher, expression, collector)) {
if (ownerNode.getKind() == NodeKind.Section) {
Section onwerSection = (Section) ownerNode;
// Check the current expression references a metadata of the section
ObjectPart objectPart = expression.getObjectPart();
if (objectPart != null) {
JavaTypeInfoProvider metadata = onwerSection.getMetadata(objectPart.getPartName());
if (metadata != null) {
// Adjust the object part range with the given part name
// Example if expression is like {item_count}
// Range should be {|item|_count}
Range range = QutePositionUtility.createRange(objectPart.getStart(), objectPart.getStart() + partName.length(), objectPart.getOwnerTemplate());
collector.accept(objectPart, range);
}
}
}
}
}
Aggregations