From 403bf6c960eb9e4fc2fb84a93f735dd95f950c21 Mon Sep 17 00:00:00 2001 From: Alexey Loubyansky Date: Thu, 19 Mar 2020 22:25:43 +0100 Subject: [PATCH] Replace ApplicationIndexBuildItem with CombinedIndexBuildItem and search for resources in all the application archives instead of only in the root where it makes sense --- .../quarkus/arc/deployment/ArcProcessor.java | 2 +- .../ConfigPropertiesBuildStep.java | 4 +- .../deployment/pom.xml | 4 -- .../deployment/InfinispanClientProcessor.java | 60 ++++++++++--------- .../deployment/PanacheResourceProcessor.java | 4 +- .../deployment/SpringSecurityProcessor.java | 10 ++-- 6 files changed, 39 insertions(+), 45 deletions(-) diff --git a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/ArcProcessor.java b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/ArcProcessor.java index de23929e33af6..004ce665016e2 100644 --- a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/ArcProcessor.java +++ b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/ArcProcessor.java @@ -78,7 +78,7 @@ *
  • {@link ValidationPhaseBuildItem}
  • * * These build items are especially useful if an extension needs to produce other build items within the given phase. - * + * * @see BeanProcessor */ public class ArcProcessor { diff --git a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/ConfigPropertiesBuildStep.java b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/ConfigPropertiesBuildStep.java index c698b1b078cd9..3e52d4745ac5c 100644 --- a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/ConfigPropertiesBuildStep.java +++ b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/ConfigPropertiesBuildStep.java @@ -18,7 +18,6 @@ import io.quarkus.deployment.GeneratedClassGizmoAdaptor; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.deployment.builditem.ApplicationIndexBuildItem; import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.DeploymentClassLoaderBuildItem; import io.quarkus.deployment.builditem.GeneratedClassBuildItem; @@ -40,7 +39,6 @@ void produceConfigPropertiesMetadata(CombinedIndexBuildItem combinedIndex, ArcCo @BuildStep void setup(CombinedIndexBuildItem combinedIndex, - ApplicationIndexBuildItem applicationIndex, List configPropertiesMetadataList, BuildProducer generatedClasses, BuildProducer generatedBeans, @@ -89,7 +87,7 @@ void setup(CombinedIndexBuildItem combinedIndex, boolean needsValidation = ClassConfigPropertiesUtil.addProducerMethodForClassConfigProperties( deploymentClassLoader.getClassLoader(), classInfo, producerClassCreator, configPropertiesMetadata.getPrefix(), configPropertiesMetadata.getNamingStrategy(), - applicationIndex.getIndex(), configProperties); + combinedIndex.getIndex(), configProperties); if (needsValidation) { configClassesThatNeedValidation.add(classInfo.name()); } diff --git a/extensions/elytron-security-properties-file/deployment/pom.xml b/extensions/elytron-security-properties-file/deployment/pom.xml index 3d4558c3e2152..bc7605804a9f8 100644 --- a/extensions/elytron-security-properties-file/deployment/pom.xml +++ b/extensions/elytron-security-properties-file/deployment/pom.xml @@ -28,10 +28,6 @@ io.quarkus quarkus-vertx-http-deployment - - io.quarkus - quarkus-elytron-security - io.quarkus quarkus-elytron-security-deployment diff --git a/extensions/infinispan-client/deployment/src/main/java/io/quarkus/infinispan/client/deployment/InfinispanClientProcessor.java b/extensions/infinispan-client/deployment/src/main/java/io/quarkus/infinispan/client/deployment/InfinispanClientProcessor.java index 33cdd82d6c5e9..1911d12756733 100644 --- a/extensions/infinispan-client/deployment/src/main/java/io/quarkus/infinispan/client/deployment/InfinispanClientProcessor.java +++ b/extensions/infinispan-client/deployment/src/main/java/io/quarkus/infinispan/client/deployment/InfinispanClientProcessor.java @@ -8,10 +8,10 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; -import java.util.List; import java.util.Properties; import java.util.Set; import java.util.stream.Stream; @@ -34,7 +34,7 @@ import org.jboss.jandex.AnnotationTarget; import org.jboss.jandex.ClassInfo; import org.jboss.jandex.DotName; -import org.jboss.jandex.Index; +import org.jboss.jandex.IndexView; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.arc.deployment.BeanContainerListenerBuildItem; @@ -45,7 +45,7 @@ import io.quarkus.deployment.annotations.ExecutionTime; import io.quarkus.deployment.annotations.Record; import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem; -import io.quarkus.deployment.builditem.ApplicationIndexBuildItem; +import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem; @@ -78,7 +78,7 @@ InfinispanPropertiesBuildItem setup(ApplicationArchivesBuildItem applicationArch BuildProducer additionalBeans, BuildProducer sslNativeSupport, BuildProducer nativeImageConfig, - ApplicationIndexBuildItem applicationIndexBuildItem) throws ClassNotFoundException, IOException { + CombinedIndexBuildItem applicationIndexBuildItem) throws ClassNotFoundException, IOException { feature.produce(new FeatureBuildItem(FeatureBuildItem.INFINISPAN_CLIENT)); additionalBeans.produce(AdditionalBeanBuildItem.unremovableOf(InfinispanClientProducer.class)); @@ -114,40 +114,42 @@ InfinispanPropertiesBuildItem setup(ApplicationArchivesBuildItem applicationArch InfinispanClientProducer.replaceProperties(properties); - Index index = applicationIndexBuildItem.getIndex(); + IndexView index = applicationIndexBuildItem.getIndex(); // This is always non null Object marshaller = properties.get(ConfigurationProperties.MARSHALLER); if (marshaller instanceof ProtoStreamMarshaller) { - ApplicationArchive applicationArchive = applicationArchivesBuildItem.getRootArchive(); - // If we have properties file we may have to care about - Path metaPath = applicationArchive.getChildPath(META_INF); - - if (metaPath != null) { - try (Stream dirElements = Files.list(metaPath)) { - Iterator protoFiles = dirElements - .filter(Files::isRegularFile) - .filter(p -> p.toString().endsWith(PROTO_EXTENSION)) - .iterator(); - // We monitor the entire meta inf directory if properties are available - if (protoFiles.hasNext()) { - // Quarkus doesn't currently support hot deployment watching directories - // hotDeployment.produce(new HotDeploymentConfigFileBuildItem(META_INF)); - } - - while (protoFiles.hasNext()) { - Path path = protoFiles.next(); - byte[] bytes = Files.readAllBytes(path); - // This uses the default file encoding - should we enforce UTF-8? - properties.put(InfinispanClientProducer.PROTOBUF_FILE_PREFIX + path.getFileName().toString(), - new String(bytes, StandardCharsets.UTF_8)); + for (ApplicationArchive applicationArchive : applicationArchivesBuildItem.getAllApplicationArchives()) { + // If we have properties file we may have to care about + Path metaPath = applicationArchive.getChildPath(META_INF); + + if (metaPath != null) { + try (Stream dirElements = Files.list(metaPath)) { + Iterator protoFiles = dirElements + .filter(Files::isRegularFile) + .filter(p -> p.toString().endsWith(PROTO_EXTENSION)) + .iterator(); + // We monitor the entire meta inf directory if properties are available + if (protoFiles.hasNext()) { + // Quarkus doesn't currently support hot deployment watching directories + // hotDeployment.produce(new HotDeploymentConfigFileBuildItem(META_INF)); + } + + while (protoFiles.hasNext()) { + Path path = protoFiles.next(); + System.out.println(" " + path.toAbsolutePath()); + byte[] bytes = Files.readAllBytes(path); + // This uses the default file encoding - should we enforce UTF-8? + properties.put(InfinispanClientProducer.PROTOBUF_FILE_PREFIX + path.getFileName().toString(), + new String(bytes, StandardCharsets.UTF_8)); + } } } } InfinispanClientProducer.handleProtoStreamRequirements(properties); - Set initializerClasses = index.getAllKnownImplementors(DotName.createSimple( + Collection initializerClasses = index.getAllKnownImplementors(DotName.createSimple( SerializationContextInitializer.class.getName())); Set initializers = new HashSet<>(initializerClasses.size()); for (ClassInfo ci : initializerClasses) { @@ -168,7 +170,7 @@ InfinispanPropertiesBuildItem setup(ApplicationArchivesBuildItem applicationArch } // Add any user project listeners to allow reflection in native code - List listenerInstances = index.getAnnotations( + Collection listenerInstances = index.getAnnotations( DotName.createSimple(ClientListener.class.getName())); for (AnnotationInstance instance : listenerInstances) { AnnotationTarget target = instance.target(); diff --git a/extensions/panache/hibernate-orm-panache/deployment/src/main/java/io/quarkus/hibernate/orm/panache/deployment/PanacheResourceProcessor.java b/extensions/panache/hibernate-orm-panache/deployment/src/main/java/io/quarkus/hibernate/orm/panache/deployment/PanacheResourceProcessor.java index cc9b9cb6fe7c0..523a787771c6b 100644 --- a/extensions/panache/hibernate-orm-panache/deployment/src/main/java/io/quarkus/hibernate/orm/panache/deployment/PanacheResourceProcessor.java +++ b/extensions/panache/hibernate-orm-panache/deployment/src/main/java/io/quarkus/hibernate/orm/panache/deployment/PanacheResourceProcessor.java @@ -13,7 +13,6 @@ import io.quarkus.arc.deployment.UnremovableBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.deployment.builditem.ApplicationIndexBuildItem; import io.quarkus.deployment.builditem.BytecodeTransformerBuildItem; import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; @@ -59,7 +58,6 @@ UnremovableBeanBuildItem ensureBeanLookupAvailable() { @BuildStep void build(CombinedIndexBuildItem index, - ApplicationIndexBuildItem applicationIndex, BuildProducer transformers, HibernateEnhancersRegisteredBuildItem hibernateMarker, BuildProducer entityClasses) throws Exception { @@ -109,7 +107,7 @@ void build(CombinedIndexBuildItem index, MetamodelInfo> modelInfo = modelEnhancer.getModelInfo(); if (modelInfo.hasEntities()) { PanacheFieldAccessEnhancer panacheFieldAccessEnhancer = new PanacheFieldAccessEnhancer(modelInfo); - for (ClassInfo classInfo : applicationIndex.getIndex().getKnownClasses()) { + for (ClassInfo classInfo : index.getIndex().getKnownClasses()) { String className = classInfo.name().toString(); if (!modelClasses.contains(className)) { transformers.produce(new BytecodeTransformerBuildItem(className, panacheFieldAccessEnhancer)); diff --git a/extensions/spring-security/deployment/src/main/java/io/quarkus/spring/security/deployment/SpringSecurityProcessor.java b/extensions/spring-security/deployment/src/main/java/io/quarkus/spring/security/deployment/SpringSecurityProcessor.java index 8f4b838aef591..5d87c94a97a5e 100644 --- a/extensions/spring-security/deployment/src/main/java/io/quarkus/spring/security/deployment/SpringSecurityProcessor.java +++ b/extensions/spring-security/deployment/src/main/java/io/quarkus/spring/security/deployment/SpringSecurityProcessor.java @@ -34,7 +34,7 @@ import io.quarkus.deployment.GeneratedClassGizmoAdaptor; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.deployment.builditem.ApplicationIndexBuildItem; +import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.GeneratedClassBuildItem; import io.quarkus.gizmo.BytecodeCreator; @@ -77,7 +77,7 @@ void registerSecurityInterceptors(BuildProducer additionalSecurityCheckBuildItems) { Set methodsWithSecurityAnnotation = new HashSet<>(); @@ -175,7 +175,7 @@ private boolean isPublicNonStaticNonConstructor(MethodInfo methodInfo) { @BuildStep void locatePreAuthorizedInstances( - ApplicationIndexBuildItem index, + CombinedIndexBuildItem index, BuildProducer springPreAuthorizeAnnotatedMethods, BuildProducer annotationsTransformer) { Map result = new HashMap<>(); @@ -268,7 +268,7 @@ public void transform(TransformationContext transformationContext) { * The generation needs to be done in it's own build step otherwise we can end up with build cycle errors */ @BuildStep - void generateNecessarySupportClasses(ApplicationIndexBuildItem index, + void generateNecessarySupportClasses(CombinedIndexBuildItem index, SpringPreAuthorizeAnnotatedMethodBuildItem springPreAuthorizeAnnotatedMethods, BuildProducer generatedBeans, BuildProducer unremovableBeans) { @@ -343,7 +343,7 @@ void generateNecessarySupportClasses(ApplicationIndexBuildItem index, } @BuildStep - void addSpringPreAuthorizeSecurityCheck(ApplicationIndexBuildItem index, + void addSpringPreAuthorizeSecurityCheck(CombinedIndexBuildItem index, SpringPreAuthorizeAnnotatedMethodBuildItem springPreAuthorizeAnnotatedMethods, SpringBeanNameToDotNameBuildItem springBeanNames, BuildProducer additionalSecurityChecks,