@@ -51,7 +51,7 @@ static TemplateMatchResult matchesTemplate(JavaTemplate template, Cursor input)
5151 throw new IllegalArgumentException ("Only expressions and statements can be matched against a template: " + input .getClass ());
5252 }
5353
54- J [] parameters = createTemplateParameters (template .getCode ());
54+ J [] parameters = createTemplateParameters (template .getCode (), template . getGenericTypes () );
5555 try {
5656 J templateTree = template .apply (input , coordinates , (Object []) parameters );
5757 return matchTemplate (templateTree , input );
@@ -61,10 +61,11 @@ static TemplateMatchResult matchesTemplate(JavaTemplate template, Cursor input)
6161 }
6262 }
6363
64- private static J [] createTemplateParameters (String code ) {
64+ private static J [] createTemplateParameters (String code , Set < String > genericTypes ) {
6565 PropertyPlaceholderHelper propertyPlaceholderHelper = new PropertyPlaceholderHelper (
6666 "#{" , "}" , null );
6767
68+ Map <String , JavaType .GenericTypeVariable > generics = TypeParameter .parseGenericTypes (genericTypes );
6869 List <J > parameters = new ArrayList <>();
6970 String substituted = code ;
7071 Map <String , String > typedPatternByName = new HashMap <>();
@@ -73,24 +74,7 @@ private static J[] createTemplateParameters(String code) {
7374 substituted = propertyPlaceholderHelper .replacePlaceholders (substituted , key -> {
7475 String s ;
7576 if (!key .isEmpty ()) {
76- BaseErrorListener errorListener = new BaseErrorListener () {
77- @ Override
78- public void syntaxError (Recognizer <?, ?> recognizer , Object offendingSymbol ,
79- int line , int charPositionInLine , String msg , RecognitionException e ) {
80- throw new IllegalArgumentException (
81- String .format ("Syntax error at line %d:%d %s." , line , charPositionInLine , msg ), e );
82- }
83- };
84-
85- TemplateParameterLexer lexer = new TemplateParameterLexer (CharStreams .fromString (key ));
86- lexer .removeErrorListeners ();
87- lexer .addErrorListener (errorListener );
88-
89- TemplateParameterParser parser = new TemplateParameterParser (new CommonTokenStream (lexer ));
90- parser .removeErrorListeners ();
91- parser .addErrorListener (errorListener );
92-
93- TemplateParameterParser .MatcherPatternContext ctx = parser .matcherPattern ();
77+ TemplateParameterParser .MatcherPatternContext ctx = TypeParameter .parser (key ).matcherPattern ();
9478 if (ctx .typedPattern () == null ) {
9579 String paramName = ctx .parameterName ().Identifier ().getText ();
9680 s = typedPatternByName .get (paramName );
@@ -99,7 +83,7 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol,
9983 }
10084 } else {
10185 TypedPatternContext typedPattern = ctx .typedPattern ();
102- JavaType type = typedParameter (key , typedPattern );
86+ JavaType type = typedParameter (key , typedPattern , generics );
10387 s = TypeUtils .toString (type );
10488
10589 String name = null ;
@@ -126,12 +110,12 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol,
126110 return parameters .toArray (new J [0 ]);
127111 }
128112
129- private static JavaType typedParameter (String key , TypedPatternContext typedPattern ) {
113+ private static JavaType typedParameter (String key , TypedPatternContext typedPattern , Map < String , JavaType . GenericTypeVariable > generics ) {
130114 String matcherName = typedPattern .patternType ().matcherName ().Identifier ().getText ();
131115 if ("any" .equals (matcherName )) {
132- return TypeParameter .toFullyQualifiedName (typedPattern .patternType ().type ());
116+ return TypeParameter .toJavaType (typedPattern .patternType ().type (), generics );
133117 } else if ("anyArray" .equals (matcherName )) {
134- return new JavaType .Array (null , TypeParameter .toFullyQualifiedName (typedPattern .patternType ().type ()), null );
118+ return new JavaType .Array (null , TypeParameter .toJavaType (typedPattern .patternType ().type (), generics ), null );
135119 } else {
136120 throw new IllegalArgumentException ("Unsupported template matcher '" + key + "'" );
137121 }
0 commit comments