5656import org .jboss .jandex .ParameterizedType ;
5757import org .jboss .jandex .PrimitiveType ;
5858import org .jboss .jandex .PrimitiveType .Primitive ;
59- import org .jboss .jandex .RecordComponentInfo ;
6059import org .jboss .jandex .Type ;
6160import org .jboss .jandex .TypeVariable ;
6261import org .jboss .logging .Logger ;
8079import io .quarkus .arc .processor .QualifierRegistrar ;
8180import io .quarkus .deployment .ApplicationArchive ;
8281import io .quarkus .deployment .Feature ;
83- import io .quarkus .deployment .GeneratedClassGizmoAdaptor ;
82+ import io .quarkus .deployment .GeneratedClassGizmo2Adaptor ;
8483import io .quarkus .deployment .IsTest ;
8584import io .quarkus .deployment .annotations .BuildProducer ;
8685import io .quarkus .deployment .annotations .BuildStep ;
8988import io .quarkus .deployment .builditem .BytecodeTransformerBuildItem ;
9089import io .quarkus .deployment .builditem .FeatureBuildItem ;
9190import io .quarkus .deployment .builditem .GeneratedClassBuildItem ;
91+ import io .quarkus .deployment .builditem .GeneratedResourceBuildItem ;
9292import io .quarkus .deployment .builditem .HotDeploymentWatchedFileBuildItem ;
9393import io .quarkus .deployment .builditem .LiveReloadBuildItem ;
9494import io .quarkus .deployment .builditem .ServiceStartBuildItem ;
9595import io .quarkus .deployment .builditem .nativeimage .NativeImageResourceBuildItem ;
9696import io .quarkus .deployment .builditem .nativeimage .ReflectiveClassBuildItem ;
9797import io .quarkus .deployment .pkg .NativeConfig ;
9898import io .quarkus .deployment .pkg .builditem .CurateOutcomeBuildItem ;
99- import io .quarkus .gizmo .ClassOutput ;
100- import io .quarkus .gizmo .MethodDescriptor ;
99+ import io .quarkus .gizmo2 .ClassOutput ;
101100import io .quarkus .maven .dependency .ArtifactKey ;
102101import io .quarkus .maven .dependency .DependencyFlags ;
103102import io .quarkus .maven .dependency .ResolvedDependency ;
139138import io .quarkus .qute .deployment .TypeInfos .TypeInfo ;
140139import io .quarkus .qute .deployment .Types .AssignabilityCheck ;
141140import io .quarkus .qute .generator .ExtensionMethodGenerator ;
142- import io .quarkus .qute .generator .ExtensionMethodGenerator .NamespaceResolverCreator ;
143- import io .quarkus .qute .generator .ExtensionMethodGenerator .NamespaceResolverCreator .ResolveCreator ;
141+ import io .quarkus .qute .generator .ExtensionMethodGenerator .ExtensionMethodInfo ;
144142import io .quarkus .qute .generator .ExtensionMethodGenerator .Param ;
145143import io .quarkus .qute .generator .TemplateGlobalGenerator ;
146144import io .quarkus .qute .generator .ValueResolverGenerator ;
@@ -428,9 +426,7 @@ && isNotLocatedByCustomTemplateLocator(locatorPatternsBuildItem.getLocationPatte
428426 if (!recordClass .isRecord ()) {
429427 continue ;
430428 }
431- MethodInfo canonicalConstructor = recordClass .method (MethodDescriptor .INIT ,
432- recordClass .recordComponentsInDeclarationOrder ().stream ().map (RecordComponentInfo ::type )
433- .toArray (Type []::new ));
429+ MethodInfo canonicalConstructor = recordClass .canonicalRecordConstructor ();
434430
435431 AnnotationInstance checkedTemplateAnnotation = recordClass .declaredAnnotation (Names .CHECKED_TEMPLATE );
436432 String fragmentId = getCheckedFragmentId (recordClass , checkedTemplateAnnotation );
@@ -916,12 +912,8 @@ void validateCheckedFragments(List<CheckedFragmentValidationBuildItem> validatio
916912 String paramName = e .getKey ();
917913 MethodInfo methodOrConstructor = null ;
918914 if (validation .checkedTemplate .isRecord ()) {
919- Type [] componentTypes = validation .checkedTemplate .recordClass .recordComponentsInDeclarationOrder ()
920- .stream ()
921- .map (RecordComponentInfo ::type )
922- .toArray (Type []::new );
923915 methodOrConstructor = validation .checkedTemplate .recordClass
924- .method ( MethodDescriptor . INIT , componentTypes );
916+ .canonicalRecordConstructor ( );
925917 } else {
926918 methodOrConstructor = validation .checkedTemplate .method ;
927919 }
@@ -1938,7 +1930,9 @@ static String findTemplatePath(TemplatesAnalysisBuildItem analysis, String id) {
19381930 }
19391931
19401932 @ BuildStep
1941- void generateValueResolvers (QuteConfig config , BuildProducer <GeneratedClassBuildItem > generatedClasses ,
1933+ void generateValueResolvers (QuteConfig config ,
1934+ BuildProducer <GeneratedClassBuildItem > generatedClasses ,
1935+ BuildProducer <GeneratedResourceBuildItem > generatedResources ,
19421936 BeanArchiveIndexBuildItem beanArchiveIndex ,
19431937 ApplicationArchivesBuildItem applicationArchivesBuildItem ,
19441938 List <TemplateExtensionMethodBuildItem > templateExtensionMethods ,
@@ -1960,29 +1954,30 @@ void generateValueResolvers(QuteConfig config, BuildProducer<GeneratedClassBuild
19601954 }
19611955
19621956 IndexView index = beanArchiveIndex .getIndex ();
1963- ClassOutput classOutput = new GeneratedClassGizmoAdaptor (generatedClasses , new Function <String , String >() {
1964- @ Override
1965- public String apply (String name ) {
1966- int idx = name .lastIndexOf (ExtensionMethodGenerator .NAMESPACE_SUFFIX );
1967- if (idx == -1 ) {
1968- idx = name .lastIndexOf (ExtensionMethodGenerator .SUFFIX );
1969- }
1970- if (idx == -1 ) {
1971- idx = name .lastIndexOf (ValueResolverGenerator .NAMESPACE_SUFFIX );
1972- }
1973- if (idx == -1 ) {
1974- idx = name .lastIndexOf (ValueResolverGenerator .SUFFIX );
1975- }
1976- if (idx == -1 ) {
1977- idx = name .lastIndexOf (TemplateGlobalGenerator .SUFFIX );
1978- }
1979- String className = name .substring (0 , idx );
1980- if (className .contains (ValueResolverGenerator .NESTED_SEPARATOR )) {
1981- className = className .replace (ValueResolverGenerator .NESTED_SEPARATOR , "$" );
1982- }
1983- return className ;
1984- }
1985- });
1957+ ClassOutput classOutput = new GeneratedClassGizmo2Adaptor (generatedClasses , generatedResources ,
1958+ new Function <String , String >() {
1959+ @ Override
1960+ public String apply (String name ) {
1961+ int idx = name .lastIndexOf (ExtensionMethodGenerator .NAMESPACE_SUFFIX );
1962+ if (idx == -1 ) {
1963+ idx = name .lastIndexOf (ExtensionMethodGenerator .SUFFIX );
1964+ }
1965+ if (idx == -1 ) {
1966+ idx = name .lastIndexOf (ValueResolverGenerator .NAMESPACE_SUFFIX );
1967+ }
1968+ if (idx == -1 ) {
1969+ idx = name .lastIndexOf (ValueResolverGenerator .SUFFIX );
1970+ }
1971+ if (idx == -1 ) {
1972+ idx = name .lastIndexOf (TemplateGlobalGenerator .SUFFIX );
1973+ }
1974+ String className = name .substring (0 , idx );
1975+ if (className .contains (ValueResolverGenerator .NESTED_SEPARATOR )) {
1976+ className = className .replace (ValueResolverGenerator .NESTED_SEPARATOR , "$" );
1977+ }
1978+ return className ;
1979+ }
1980+ });
19861981
19871982 // NOTE: We can't use this optimization for classes generated by ValueResolverGenerator because we cannot easily
19881983 // map a target class to a specific set of generated classes
@@ -2094,19 +2089,18 @@ public Function<FieldInfo, String> apply(ClassInfo clazz) {
20942089 .collect (Collectors .groupingBy (TemplateExtensionMethodBuildItem ::getPriority ));
20952090
20962091 for (Entry <Integer , List <TemplateExtensionMethodBuildItem >> priorityEntry : priorityToMethods .entrySet ()) {
2097- try (NamespaceResolverCreator namespaceResolverCreator = extensionMethodGenerator
2098- .createNamespaceResolver (priorityEntry .getValue ().get (0 ).getMethod ().declaringClass (),
2099- nsEntry .getKey (), priorityEntry .getKey ())) {
2100- for (TemplateExtensionMethodBuildItem extensionMethod : priorityEntry .getValue ()) {
2101- existingValueResolvers .add (extensionMethod .getMethod (), namespaceResolverCreator .getClassName (),
2102- applicationClassPredicate );
2103- }
2104- try (ResolveCreator resolveCreator = namespaceResolverCreator .implementResolve ()) {
2105- for (TemplateExtensionMethodBuildItem method : priorityEntry .getValue ()) {
2106- resolveCreator .addMethod (method .getMethod (), method .getMatchName (), method .getMatchNames (),
2107- method .getMatchRegex ());
2108- }
2109- }
2092+ List <ExtensionMethodGenerator .ExtensionMethodInfo > extensionMethods = new ArrayList <>(
2093+ priorityEntry .getValue ().size ());
2094+ for (TemplateExtensionMethodBuildItem method : priorityEntry .getValue ()) {
2095+ extensionMethods
2096+ .add (new ExtensionMethodInfo (method .getMethod (), method .getMatchName (), method .getMatchNames (),
2097+ method .getMatchRegex ()));
2098+ }
2099+ String generatedType = extensionMethodGenerator .generateNamespaceResolver (
2100+ priorityEntry .getValue ().get (0 ).getMethod ().declaringClass (), nsEntry .getKey (),
2101+ priorityEntry .getKey (), extensionMethods );
2102+ for (TemplateExtensionMethodBuildItem extensionMethod : priorityEntry .getValue ()) {
2103+ existingValueResolvers .add (extensionMethod .getMethod (), generatedType , applicationClassPredicate );
21102104 }
21112105 }
21122106 }
0 commit comments