From d22d469d82f70698add0242e240ab118de098c9f Mon Sep 17 00:00:00 2001 From: Martin Kouba Date: Wed, 26 Feb 2025 08:54:21 +0100 Subject: [PATCH] Qute: fix validation of an expression with "logical or" - fixes #46476 --- .../java/io/quarkus/qute/deployment/TypeInfos.java | 4 +++- .../qute/deployment/globals/TemplateGlobalTest.java | 11 ++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/TypeInfos.java b/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/TypeInfos.java index 51aa6b0e8aa03..fbc0ec54a7400 100644 --- a/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/TypeInfos.java +++ b/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/TypeInfos.java @@ -51,7 +51,9 @@ static List create(Expression expression, IndexView index, Function templateIdToPathFun, Origin expressionOrigin) { - if (typeInfo.startsWith(TYPE_INFO_SEPARATOR)) { + if (typeInfo.startsWith(TYPE_INFO_SEPARATOR) + && (typeInfo.endsWith(TYPE_INFO_SEPARATOR) || typeInfo.endsWith(RIGHT_ANGLE))) { + // |TYPE_INFO| or |TYPE_INFO| int endIdx = typeInfo.substring(1, typeInfo.length()).indexOf(Expressions.TYPE_INFO_SEPARATOR); if (endIdx < 1) { throw new IllegalArgumentException("Invalid type info: " + typeInfo); diff --git a/extensions/qute/deployment/src/test/java/io/quarkus/qute/deployment/globals/TemplateGlobalTest.java b/extensions/qute/deployment/src/test/java/io/quarkus/qute/deployment/globals/TemplateGlobalTest.java index 35674762c495a..d9fc5fb1befa5 100644 --- a/extensions/qute/deployment/src/test/java/io/quarkus/qute/deployment/globals/TemplateGlobalTest.java +++ b/extensions/qute/deployment/src/test/java/io/quarkus/qute/deployment/globals/TemplateGlobalTest.java @@ -26,7 +26,7 @@ public class TemplateGlobalTest { .withApplicationRoot(root -> root .addClasses(Globals.class, NextGlobals.class) .addAsResource(new StringAsset( - "Hello {currentUser}|{global:currentUser}! Your name is {_name}|{global:_name}. You're {age}|{global:age} years old."), + "Hello {currentUser}|{global:currentUser}! Your name is {_name}|{global:_name}. You're {age}|{global:age} years old. [{serviceEnabled || true}]"), "templates/hello.txt")); @Inject @@ -42,13 +42,13 @@ public void testTemplateData() { assertEquals("Hello 40!", instance.render()); assertTrue(Globals.AGE_USED.get()); - assertEquals("Hello Fu|Fu! Your name is Lu|Lu. You're 40|40 years old.", hello.render()); + assertEquals("Hello Fu|Fu! Your name is Lu|Lu. You're 40|40 years old. [true]", hello.render()); assertEquals("Hello Fu|Fu! Your name is Lu|Lu. You're 40|40 years old.", Qute.fmt( "Hello {currentUser}|{global:currentUser}! Your name is {_name}|{global:_name}. You're {age}|{global:age} years old.") .render()); Globals.user = "Hu"; - assertEquals("Hello Hu|Hu! Your name is Lu|Lu. You're 20|20 years old.", hello.render()); + assertEquals("Hello Hu|Hu! Your name is Lu|Lu. You're 20|20 years old. [true]", hello.render()); assertEquals("Hello Hu|Hu! Your name is Lu|Lu. You're 20|20 years old.", Qute.fmt( "Hello {currentUser}|{global:currentUser}! Your name is {_name}|{global:_name}. You're {age}|{global:age} years old.") @@ -70,6 +70,11 @@ static int age() { return user.equals("Fu") ? 40 : 20; } + @TemplateGlobal + static boolean serviceEnabled() { + return true; + } + } static enum Color {