This is an automated email from the ASF dual-hosted git repository.

benweidig pushed a commit to branch property-expression-parser
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git

commit ea7095720414ea9e3bf7fd1a8d040e0cc49ed049
Author: Ben Weidig <[email protected]>
AuthorDate: Sun Oct 25 11:58:45 2026 +0100

    TAP5-2806: Parse property expressions independent of the default charset
    
    Expressions went through getBytes() and back with the platform default
    charset. On a JVM without a UTF-8 default, every non-ASCII character
    turned into '?' before the lexer saw it.
    
    The lexer now reads the String directly.
    
    The expected node types in two code generator errors now include MAP,
    which both switches already handle.
---
 .../services/PropertyConduitSourceImpl.java        | 23 ++++------------------
 .../tapestry5/beanmodel/DefaultCharsetTest.java    |  3 ---
 2 files changed, 4 insertions(+), 22 deletions(-)

diff --git 
a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
 
b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
index ad26631df..ae3971359 100644
--- 
a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
+++ 
b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
@@ -31,9 +31,6 @@ import static 
org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionPa
 import static 
org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.TRUE;
 
 import org.apache.tapestry5.ioc.annotations.ComponentLayer;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.Member;
@@ -48,7 +45,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.antlr.runtime.ANTLRInputStream;
+import org.antlr.runtime.ANTLRStringStream;
 import org.antlr.runtime.CommonTokenStream;
 import org.antlr.runtime.tree.Tree;
 import org.apache.tapestry5.beanmodel.PropertyConduit;
@@ -508,7 +505,7 @@ public class PropertyConduitSourceImpl implements 
PropertyConduitSource
                     return;
 
                 default:
-                    throw unexpectedNodeType(node, IDENTIFIER, INVOKE, 
RANGEOP, LIST, NOT);
+                    throw unexpectedNodeType(node, IDENTIFIER, INVOKE, 
RANGEOP, LIST, MAP, NOT);
             }
         }
 
@@ -885,7 +882,7 @@ public class PropertyConduitSourceImpl implements 
PropertyConduitSource
 
                     default:
                         throw unexpectedNodeType(node, TRUE, FALSE, INTEGER, 
DECIMAL, STRING, DEREF, SAFEDEREF,
-                                IDENTIFIER, INVOKE, LIST, NOT, THIS, NULL);
+                                IDENTIFIER, INVOKE, LIST, MAP, NOT, THIS, 
NULL);
                 }
             }
         }
@@ -1572,19 +1569,7 @@ public class PropertyConduitSourceImpl implements 
PropertyConduitSource
 
     private Tree parse(String expression)
     {
-        InputStream is = new ByteArrayInputStream(expression.getBytes());
-
-        ANTLRInputStream ais;
-
-        try
-        {
-            ais = new ANTLRInputStream(is);
-        } catch (IOException ex)
-        {
-            throw new RuntimeException(ex);
-        }
-
-        PropertyExpressionLexer lexer = new PropertyExpressionLexer(ais);
+        PropertyExpressionLexer lexer = new PropertyExpressionLexer(new 
ANTLRStringStream(expression));
 
         CommonTokenStream tokens = new CommonTokenStream(lexer);
 
diff --git 
a/beanmodel/src/test/java/org/apache/tapestry5/beanmodel/DefaultCharsetTest.java
 
b/beanmodel/src/test/java/org/apache/tapestry5/beanmodel/DefaultCharsetTest.java
index f5a3d6a4e..b7a4af38d 100644
--- 
a/beanmodel/src/test/java/org/apache/tapestry5/beanmodel/DefaultCharsetTest.java
+++ 
b/beanmodel/src/test/java/org/apache/tapestry5/beanmodel/DefaultCharsetTest.java
@@ -19,7 +19,6 @@ import java.nio.charset.StandardCharsets;
 
 import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
 import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
@@ -44,14 +43,12 @@ public class DefaultCharsetTest
         assertEquals(StandardCharsets.US_ASCII, Charset.defaultCharset());
     }
 
-    @Disabled("The parser round-trips the expression through the default 
charset")
     @Test
     void non_ascii_identifier_is_parsed()
     {
         assertEquals(Chinese.class, source.create(Root.class, "中文").get(new 
Root()).getClass());
     }
 
-    @Disabled("The parser round-trips the expression through the default 
charset")
     @Test
     void non_ascii_identifier_heads_a_chain()
     {

Reply via email to