You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2020/03/02 10:45:51 UTC
[myfaces] branch master updated: moved PF to own methods and
collect all public @Named beans
This is an automated email from the ASF dual-hosted git repository.
tandraschko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces.git
The following commit(s) were added to refs/heads/master by this push:
new b20c30b moved PF to own methods and collect all public @Named beans
b20c30b is described below
commit b20c30b8b7d992769196fbd274155062220a7b9b
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Mon Mar 2 11:45:43 2020 +0100
moved PF to own methods and collect all public @Named beans
---
.../quarkus/deployment/MyFacesProcessor.java | 218 ++++++++++++++++-----
1 file changed, 165 insertions(+), 53 deletions(-)
diff --git a/extensions/quarkus/deployment/src/main/java/org/apache/myfaces/core/extensions/quarkus/deployment/MyFacesProcessor.java b/extensions/quarkus/deployment/src/main/java/org/apache/myfaces/core/extensions/quarkus/deployment/MyFacesProcessor.java
index 6cf6775..0de6747 100644
--- a/extensions/quarkus/deployment/src/main/java/org/apache/myfaces/core/extensions/quarkus/deployment/MyFacesProcessor.java
+++ b/extensions/quarkus/deployment/src/main/java/org/apache/myfaces/core/extensions/quarkus/deployment/MyFacesProcessor.java
@@ -94,6 +94,7 @@ import io.quarkus.runtime.configuration.ProfileManager;
import io.quarkus.undertow.deployment.ListenerBuildItem;
import io.quarkus.undertow.deployment.ServletBuildItem;
import io.quarkus.undertow.deployment.ServletInitParamBuildItem;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -115,6 +116,8 @@ import javax.faces.view.facelets.ConverterHandler;
import javax.faces.view.facelets.MetaRuleset;
import javax.faces.view.facelets.TagHandler;
import javax.faces.view.facelets.ValidatorHandler;
+import javax.inject.Named;
+import org.apache.el.ExpressionFactoryImpl;
import org.apache.myfaces.application.viewstate.StateUtils;
import org.apache.myfaces.cdi.util.BeanEntry;
import org.apache.myfaces.config.FacesConfigurator;
@@ -134,7 +137,10 @@ import org.apache.myfaces.view.facelets.tag.jsf.ComponentSupport;
import org.apache.myfaces.webapp.AbstractFacesInitializer;
import org.apache.myfaces.webapp.FaceletsInitilializer;
import org.apache.myfaces.webapp.MyFacesContainerInitializer;
+import org.jboss.jandex.AnnotationTarget;
import org.jboss.jandex.ClassInfo;
+import org.jboss.jandex.FieldInfo;
+import org.jboss.jandex.MethodInfo;
class MyFacesProcessor
{
@@ -309,12 +315,6 @@ class MyFacesProcessor
initParam.produce(new ServletInitParamBuildItem(
ViewHandler.FACELETS_REFRESH_PERIOD_PARAM_NAME, "1"));
}
-
- // primefaces perf
- initParam.produce(new ServletInitParamBuildItem(
- "primefaces.SUBMIT", "partial"));
- initParam.produce(new ServletInitParamBuildItem(
- "primefaces.MOVE_SCRIPTS_TO_BOTTOM", "true"));
}
@BuildStep
@@ -401,7 +401,6 @@ class MyFacesProcessor
void produceApplicationArchiveMarker(
BuildProducer<AdditionalApplicationArchiveMarkerBuildItem> additionalArchiveMarkers)
{
- additionalArchiveMarkers.produce(new AdditionalApplicationArchiveMarkerBuildItem("org/primefaces/component"));
additionalArchiveMarkers.produce(new AdditionalApplicationArchiveMarkerBuildItem("javax/faces/component"));
additionalArchiveMarkers.produce(new AdditionalApplicationArchiveMarkerBuildItem("org/apache/myfaces/view"));
}
@@ -415,26 +414,22 @@ class MyFacesProcessor
List<String> classNames = new ArrayList<>();
List<Class<?>> classes = new ArrayList<>();
- classNames.addAll(collectClassAndSubclasses(combinedIndex, Renderer.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, ClientBehaviorRenderer.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, javax.el.ValueExpression.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, SystemEvent.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, FacesContext.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, Application.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, Renderer.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, ClientBehaviorRenderer.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, javax.el.ValueExpression.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, SystemEvent.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, FacesContext.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, Application.class.getName()));
for (String factory : FACTORIES)
{
- classNames.addAll(collectClassAndSubclasses(combinedIndex, factory));
+ classNames.addAll(collectSubclasses(combinedIndex, factory));
}
classNames.addAll(Arrays.asList(
- "org.primefaces.config.PrimeEnvironment",
- "com.lowagie.text.pdf.MappedRandomAccessFile",
- "org.apache.myfaces.application._ApplicationUtils",
- "org.apache.el.ExpressionFactoryImpl",
- "org.primefaces.util.MessageFactory",
"javax.faces.component._DeltaStateHelper",
- "javax.faces.component._DeltaStateHelper$InternalMap"));
+ "javax.faces.component._DeltaStateHelper$InternalMap",
+ "org.apache.myfaces.application._ApplicationUtils"));
classes.addAll(Arrays.asList(
DefaultWebConfigProviderFactory.class,
@@ -451,7 +446,8 @@ class MyFacesProcessor
String.class,
ViewScopeProxyMap.class,
SAXCompiler.class,
- StateUtils.class));
+ StateUtils.class,
+ ExpressionFactoryImpl.class));
reflectiveClass.produce(
new ReflectiveClassBuildItem(false, false, classNames.toArray(new String[classNames.size()])));
@@ -467,26 +463,21 @@ class MyFacesProcessor
List<String> classNames = new ArrayList<>();
List<Class<?>> classes = new ArrayList<>();
- classNames.addAll(collectClassAndSubclasses(combinedIndex, TagHandler.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, ConverterHandler.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, ComponentHandler.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, ValidatorHandler.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, UIComponent.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, ELResolver.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, MethodRule.class.getName()));
- classNames.addAll(collectClassAndSubclasses(combinedIndex, MetaRuleset.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, TagHandler.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, ConverterHandler.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, ComponentHandler.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, ValidatorHandler.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, UIComponent.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, ELResolver.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, MethodRule.class.getName()));
+ classNames.addAll(collectSubclasses(combinedIndex, MetaRuleset.class.getName()));
classNames.addAll(Arrays.asList(
- "org.primefaces.util.ComponentUtils",
- "org.primefaces.expression.SearchExpressionUtils",
- "org.primefaces.util.SecurityUtils",
- "org.primefaces.util.LangUtils",
"javax.faces._FactoryFinderProviderFactory"));
classNames.addAll(collectImplementors(combinedIndex, Converter.class.getName()));
classNames.addAll(collectImplementors(combinedIndex, Validator.class.getName()));
classNames.addAll(collectImplementors(combinedIndex, Behavior.class.getName()));
-
classes.addAll(Arrays.asList(
ClassUtils.class,
FactoryFinderProviderFactory.class,
@@ -517,8 +508,6 @@ class MyFacesProcessor
void substrateResourceBuildItems(BuildProducer<NativeImageResourceBuildItem> nativeImageResourceProducer,
BuildProducer<NativeImageResourceBundleBuildItem> resourceBundleBuildItem)
{
- nativeImageResourceProducer
- .produce(new NativeImageResourceBuildItem("META-INF/maven/org.primefaces/primefaces/pom.properties"));
nativeImageResourceProducer.produce(new NativeImageResourceBuildItem(
"META-INF/rsc/myfaces-dev-error.xml",
"META-INF/rsc/myfaces-dev-debug.xml",
@@ -564,11 +553,9 @@ class MyFacesProcessor
resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.el.PrivateMessages"));
resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.servlet.LocalStrings"));
resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.el.LocalStrings"));
- resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("org.primefaces.Messages"));
- resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("org.primefaces.Messages_en"));
}
- public List<String> collectClassAndSubclasses(CombinedIndexBuildItem combinedIndex, String className)
+ public List<String> collectSubclasses(CombinedIndexBuildItem combinedIndex, String className)
{
List<String> classes = combinedIndex.getIndex()
.getAllKnownSubclasses(DotName.createSimple(className))
@@ -589,25 +576,150 @@ class MyFacesProcessor
classes.add(className);
return classes;
}
-
+
+
@BuildStep
@Record(ExecutionTime.STATIC_INIT)
void registerWebappClassesForReflection(MyFacesRecorder recorder,
BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
CombinedIndexBuildItem combinedIndex)
- {
- List<String> classNames = new ArrayList<>();
- classNames.addAll(Arrays.asList(
- "org.apache.myfaces.core.extensions.quarkus.showcase.view.LazyView",
- "org.apache.myfaces.core.extensions.quarkus.showcase.view.LazyView_ClientProxy",
- "org.apache.myfaces.core.extensions.quarkus.showcase.view.Car",
- "org.apache.myfaces.core.extensions.quarkus.showcase.view.LazyCarDataModel",
- "org.apache.myfaces.core.extensions.quarkus.showcase.view.CarService",
- "org.apache.myfaces.core.extensions.quarkus.showcase.view.LazySorter"));
- reflectiveClass.produce(
- new ReflectiveClassBuildItem(true, false, classNames.toArray(new String[classNames.size()])));
+ {
+ List<ClassInfo> types = new ArrayList<>();
+
+ // loop all @Named beans
+ for (AnnotationInstance ai :
+ combinedIndex.getIndex().getAnnotations(DotName.createSimple(Named.class.getName())))
+ {
+ if (ai.target().kind() == AnnotationTarget.Kind.CLASS)
+ {
+ types.add(ai.target().asClass());
+ }
+ else if (ai.target().kind() == AnnotationTarget.Kind.FIELD)
+ {
+ types.add(ai.target().asField().asClass());
+ }
+ else if (ai.target().kind() == AnnotationTarget.Kind.METHOD)
+ {
+ types.add(combinedIndex.getIndex().getClassByName(ai.target().asMethod().returnType().name()));
+ }
+ }
+
+ // sort our duplicate
+ types = types.stream().distinct().collect(Collectors.toList());
+ types.removeIf(ci -> ci == null);
+
+ // collect all public types from getters and fields
+ List<ClassInfo> temp = new ArrayList();
+ types.stream().forEach(ci -> collectPublicTypes(ci, temp, combinedIndex));
+ types.addAll(temp);
+
+ // sort our duplicate
+ types = types.stream().distinct().collect(Collectors.toList());
+ types.removeIf(ci -> ci == null);
+
+ for (ClassInfo type : types)
+ {
+ // register type
+ reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, type.name().toString()));
+ // and try to register the ClientProxy
+ reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, type.name().toString() + "_ClientProxy"));
+ }
- reflectiveClass.produce(new ReflectiveClassBuildItem(true, true,
- "org.apache.myfaces.core.extensions.quarkus.showcase.view.LazyView_ClientProxy"));
+ types.stream().forEach(c -> System.err.println(c));
+ }
+
+ void collectPublicTypes(ClassInfo type, List<ClassInfo> publicTypes, CombinedIndexBuildItem combinedIndex)
+ {
+ if (type == null)
+ {
+ return;
+ }
+
+ ClassInfo ci = (ClassInfo) type;
+ for (MethodInfo mi : ci.methods())
+ {
+ if (Modifier.isPublic(mi.flags()) && mi.name().startsWith("get"))
+ {
+ ClassInfo returnType =
+ combinedIndex.getIndex().getClassByName(mi.returnType().name());
+ if (returnType == null || publicTypes.contains(returnType))
+ {
+ continue;
+ }
+ publicTypes.add(returnType);
+ collectPublicTypes(returnType, publicTypes, combinedIndex);
+ }
+ }
+ for (FieldInfo fi : ci.fields())
+ {
+ if (Modifier.isPublic(fi.flags()) && !Modifier.isStatic(fi.flags()))
+ {
+ ClassInfo fieldType =
+ combinedIndex.getIndex().getClassByName(fi.type().name());
+ if (fieldType == null || publicTypes.contains(fieldType))
+ {
+ continue;
+ }
+ publicTypes.add(fieldType);
+ collectPublicTypes(fieldType, publicTypes, combinedIndex);
+ }
+ }
}
+
+
+
+
+
+
+
+
+
+
+ @BuildStep
+ void buildPrimeFacesRecommendedInitParams(BuildProducer<ServletInitParamBuildItem> initParam) throws IOException
+ {
+ initParam.produce(new ServletInitParamBuildItem(
+ "primefaces.SUBMIT", "partial"));
+ initParam.produce(new ServletInitParamBuildItem(
+ "primefaces.MOVE_SCRIPTS_TO_BOTTOM", "true"));
+ }
+
+ @BuildStep
+ void producePrimeFacesApplicationArchiveMarker(
+ BuildProducer<AdditionalApplicationArchiveMarkerBuildItem> additionalArchiveMarkers)
+ {
+ additionalArchiveMarkers.produce(new AdditionalApplicationArchiveMarkerBuildItem("org/primefaces/component"));
+ }
+
+ @BuildStep
+ void substratePrimeFacesResourceBuildItems(BuildProducer<NativeImageResourceBuildItem> nativeImageResourceProducer,
+ BuildProducer<NativeImageResourceBundleBuildItem> resourceBundleBuildItem)
+ {
+ nativeImageResourceProducer
+ .produce(new NativeImageResourceBuildItem("META-INF/maven/org.primefaces/primefaces/pom.properties"));
+
+
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("org.primefaces.Messages"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("org.primefaces.Messages_en"));
+ }
+
+ @BuildStep
+ @Record(ExecutionTime.STATIC_INIT)
+ void registerPrimeFaces(MyFacesRecorder recorder,
+ BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
+ CombinedIndexBuildItem combinedIndex)
+ {
+ reflectiveClass.produce(new ReflectiveClassBuildItem(true, false,
+ "org.primefaces.util.ComponentUtils",
+ "org.primefaces.expression.SearchExpressionUtils",
+ "org.primefaces.util.SecurityUtils",
+ "org.primefaces.util.LangUtils"));
+
+ reflectiveClass.produce(new ReflectiveClassBuildItem(false, false,
+ "org.primefaces.config.PrimeEnvironment",
+ "org.primefaces.util.MessageFactory",
+ "com.lowagie.text.pdf.MappedRandomAccessFile"));
+ }
+
+
}