You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2022/03/31 09:47:42 UTC

[camel-quarkus] 10/43: Avoid compiling regular expressions in loops

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

ppalaga pushed a commit to branch 2.7.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 61c20c000ffbe6c06a43bd715eb307c9e1a16db4
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Tue Mar 22 12:14:07 2022 +0100

    Avoid compiling regular expressions in loops
---
 .../camel/quarkus/core/deployment/CamelContextProcessor.java      | 4 +++-
 .../camel/quarkus/core/deployment/spi/CamelServiceFilter.java     | 8 --------
 .../consul/client/deployment/ConsulClientSupportProcessor.java    | 5 ++++-
 .../camel/quarkus/support/spring/test/SpringSupportTest.java      | 4 +++-
 .../quarkus/component/xchange/deployment/XchangeProcessor.java    | 4 +++-
 5 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
index 6b8b6a4..56def6f 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
@@ -20,6 +20,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.function.BooleanSupplier;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import io.quarkus.arc.deployment.BeanContainerBuildItem;
@@ -134,10 +135,11 @@ public class CamelContextProcessor {
         // For management events the event class simple name is collected as users can
         // observe events on either the Camel event interface or the concrete event class, and
         // these are located in different packages
+        final Pattern pattern = Pattern.compile("org.apache.camel(?!.quarkus).*Event$");
         Set<String> observedManagementEvents = beanDiscovery.getObservers()
                 .stream()
                 .map(observerInfo -> observerInfo.getObservedType().name().toString())
-                .filter(className -> className.matches("org.apache.camel(?!.quarkus).*Event$"))
+                .filter(className -> pattern.matcher(className).matches())
                 .map(className -> CamelSupport.loadClass(className, Thread.currentThread().getContextClassLoader()))
                 .map(observedEventClass -> observedEventClass.getSimpleName())
                 .collect(Collectors.collectingAndThen(Collectors.toUnmodifiableSet(), HashSet::new));
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelServiceFilter.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelServiceFilter.java
index fac45a3..38ab95e 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelServiceFilter.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelServiceFilter.java
@@ -46,15 +46,7 @@ public interface CamelServiceFilter extends Predicate<CamelServiceBuildItem> {
         return serviceInfo -> serviceInfo.name.equals(name);
     }
 
-    static CamelServiceFilter forNameMatching(String regex) {
-        return serviceInfo -> serviceInfo.name.matches(regex);
-    }
-
     static CamelServiceFilter forType(String type) {
         return serviceInfo -> serviceInfo.type.equals(type);
     }
-
-    static CamelServiceFilter forTypeMathing(String regex) {
-        return serviceInfo -> serviceInfo.type.matches(regex);
-    }
 }
diff --git a/extensions-support/consul-client/deployment/src/main/java/org/apache/camel/quarkus/support/consul/client/deployment/ConsulClientSupportProcessor.java b/extensions-support/consul-client/deployment/src/main/java/org/apache/camel/quarkus/support/consul/client/deployment/ConsulClientSupportProcessor.java
index 0d27daf..96bab3a 100644
--- a/extensions-support/consul-client/deployment/src/main/java/org/apache/camel/quarkus/support/consul/client/deployment/ConsulClientSupportProcessor.java
+++ b/extensions-support/consul-client/deployment/src/main/java/org/apache/camel/quarkus/support/consul/client/deployment/ConsulClientSupportProcessor.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.quarkus.support.consul.client.deployment;
 
+import java.util.regex.Pattern;
 import java.util.stream.Stream;
 
 import io.quarkus.deployment.annotations.BuildProducer;
@@ -40,6 +41,8 @@ class ConsulClientSupportProcessor {
     private static final DotName DOT_NAME_IMMUTABLE_MAP = DotName.createSimple(
             "com.google.common.collect.ImmutableMap");
 
+    private static final Pattern CLIENT_API_PATTERN = Pattern.compile("com\\.orbitz\\.consul\\..*Client\\$Api");
+
     @BuildStep
     AdditionalApplicationArchiveMarkerBuildItem applicationArchiveMarkers() {
         return new AdditionalApplicationArchiveMarkerBuildItem("com/orbitz/consul");
@@ -73,7 +76,7 @@ class ConsulClientSupportProcessor {
                 .stream()
                 .map(ClassInfo::name)
                 .map(DotName::toString)
-                .filter(className -> className.matches("com\\.orbitz\\.consul\\..*Client\\$Api"))
+                .filter(className -> CLIENT_API_PATTERN.matcher(className).matches())
                 .map(NativeImageProxyDefinitionBuildItem::new)
                 .forEach(proxies::produce);
     }
diff --git a/extensions-support/spring/integration-test/src/test/java/org/apache/camel/quarkus/support/spring/test/SpringSupportTest.java b/extensions-support/spring/integration-test/src/test/java/org/apache/camel/quarkus/support/spring/test/SpringSupportTest.java
index 2ae0fd9..c14a16d 100644
--- a/extensions-support/spring/integration-test/src/test/java/org/apache/camel/quarkus/support/spring/test/SpringSupportTest.java
+++ b/extensions-support/spring/integration-test/src/test/java/org/apache/camel/quarkus/support/spring/test/SpringSupportTest.java
@@ -23,6 +23,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
+import java.util.regex.Pattern;
 
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
@@ -66,8 +67,9 @@ public class SpringSupportTest {
                 throw new IllegalStateException("The sources JAR location does not exist: " + file.getAbsolutePath());
             }
 
+            final Pattern pattern = Pattern.compile("^camel-quarkus-support-spring-" + module + "-.*-sources.jar");
             File[] files = file
-                    .listFiles(f -> f.getName().matches("^camel-quarkus-support-spring-" + module + "-.*-sources.jar"));
+                    .listFiles(f -> pattern.matcher(f.getName()).matches());
 
             if (files.length == 1) {
                 URL url = new URL("jar:file:" + files[0].getAbsolutePath() + "!/");
diff --git a/extensions/xchange/deployment/src/main/java/org/apache/camel/quarkus/component/xchange/deployment/XchangeProcessor.java b/extensions/xchange/deployment/src/main/java/org/apache/camel/quarkus/component/xchange/deployment/XchangeProcessor.java
index 467f3b2..7a941d1 100644
--- a/extensions/xchange/deployment/src/main/java/org/apache/camel/quarkus/component/xchange/deployment/XchangeProcessor.java
+++ b/extensions/xchange/deployment/src/main/java/org/apache/camel/quarkus/component/xchange/deployment/XchangeProcessor.java
@@ -17,6 +17,7 @@
 package org.apache.camel.quarkus.component.xchange.deployment;
 
 import java.lang.reflect.Modifier;
+import java.util.regex.Pattern;
 import java.util.stream.Stream;
 
 import io.quarkus.bootstrap.model.ApplicationModel;
@@ -91,10 +92,11 @@ class XchangeProcessor {
         reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, xchangeClasses));
 
         // DTO classes need to be serialized / deserialized
+        final Pattern pattern = Pattern.compile("^org\\.knowm\\.xchange.*dto.*");
         String[] dtoClasses = index.getKnownClasses()
                 .stream()
                 .map(classInfo -> classInfo.name().toString())
-                .filter(className -> className.matches("^org\\.knowm\\.xchange.*dto.*"))
+                .filter(className -> pattern.matcher(className).matches())
                 .toArray(String[]::new);
         reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, dtoClasses));