From db81e7a5c14530c597ee204553e574125eeaa466 Mon Sep 17 00:00:00 2001
From: Michael Reiche <48999328+mikereiche@users.noreply.github.com>
Date: Wed, 10 Apr 2024 17:35:27 -0700
Subject: [PATCH] Exclude javax.inject and CouchbaseAnnotationProcessor to exit
gracefully without. (#1934)
CouchbaseAnnotationProcessor will provide a warning and skip generation
if javax.inject is not present.
---
pom.xml | 67 ++++++++++++-------
.../support/CouchbaseAnnotationProcessor.java | 57 +++++++++++++++-
...hbaseTemplateKeyValueIntegrationTests.java | 2 +-
.../core/query/QueryCriteriaTests.java | 2 +-
.../domain/BigAirlineRepository.java | 2 +-
5 files changed, 98 insertions(+), 32 deletions(-)
diff --git a/pom.xml b/pom.xml
index 9087cd829..17a9acbba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,8 +23,6 @@
3.1.11-SNAPSHOT
spring.data.couchbase
7.0.1.Final
- 1.1.3
- 5.0.0
3.1.0
2.10.13
2.13.4
@@ -50,6 +48,19 @@
querydsl-apt
${querydsl}
jakarta
+
+
+ javax.inject
+ javax.inject
+
+
+
+
+
+ javax.inject
+ javax.inject
+ 1
+ test
@@ -248,6 +259,33 @@
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ none
+
+
+
+ test-annotation-processing
+ generate-test-sources
+
+ testCompile
+
+
+ only
+
+ org.springframework.data.couchbase.repository.support.CouchbaseAnnotationProcessor
+
+ target/generated-test-sources
+
+ -Aquerydsl.logInfo=true
+
+
+
+
+
+
org.apache.maven.plugins
maven-surefire-plugin
@@ -291,30 +329,7 @@
org.asciidoctor
asciidoctor-maven-plugin
-
- com.mysema.maven
- apt-maven-plugin
- ${apt}
-
-
- com.querydsl
- querydsl-apt
- ${querydsl}
-
-
-
-
- generate-test-sources
-
- test-process
-
-
- target/generated-test-sources
- org.springframework.data.couchbase.repository.support.CouchbaseAnnotationProcessor
-
-
-
-
+
diff --git a/src/main/java/org/springframework/data/couchbase/repository/support/CouchbaseAnnotationProcessor.java b/src/main/java/org/springframework/data/couchbase/repository/support/CouchbaseAnnotationProcessor.java
index 8bf16cf24..cc21bf565 100644
--- a/src/main/java/org/springframework/data/couchbase/repository/support/CouchbaseAnnotationProcessor.java
+++ b/src/main/java/org/springframework/data/couchbase/repository/support/CouchbaseAnnotationProcessor.java
@@ -15,16 +15,19 @@
*/
package org.springframework.data.couchbase.repository.support;
+import static com.querydsl.apt.APTOptions.QUERYDSL_LOG_INFO;
+
import java.util.Collections;
+import java.util.Set;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
+import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;
import org.springframework.data.couchbase.core.mapping.Document;
-import org.springframework.lang.Nullable;
import com.querydsl.apt.AbstractQuerydslProcessor;
import com.querydsl.apt.Configuration;
@@ -49,9 +52,9 @@ public class CouchbaseAnnotationProcessor extends AbstractQuerydslProcessor {
* @see com.querydsl.apt.AbstractQuerydslProcessor#createConfiguration(javax.annotation.processing.RoundEnvironment)
*/
@Override
- protected Configuration createConfiguration(@Nullable RoundEnvironment roundEnv) {
+ protected Configuration createConfiguration(/*@Nullable */RoundEnvironment roundEnv) {
- processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Running " + getClass().getSimpleName());
+ processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Running override createConfiguration() " + getClass().getSimpleName());
DefaultConfiguration configuration = new DefaultConfiguration(processingEnv, roundEnv, Collections.emptySet(),
QueryEntities.class, Document.class, QuerySupertype.class, QueryEmbeddable.class, QueryEmbedded.class,
@@ -60,4 +63,52 @@ protected Configuration createConfiguration(@Nullable RoundEnvironment roundEnv)
return configuration;
}
+
+ @Override
+ public boolean process(Set extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ setLogInfo();
+ logInfo("Running override process() " + getClass().getSimpleName() +" isOver: "+roundEnv.processingOver() +" annotations: "+annotations.size());
+
+ if (roundEnv.processingOver() || annotations.size() == 0) {
+ return ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS;
+ }
+
+ if (roundEnv.getRootElements() == null || roundEnv.getRootElements().isEmpty()) {
+ logInfo("No sources to process");
+ return ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS;
+ }
+
+ Configuration conf = createConfiguration(roundEnv);
+ try {
+ conf.getTypeMappings();
+ } catch (NoClassDefFoundError cnfe ){
+ logWarn( cnfe +" add a dependency on javax.inject:javax.inject to create querydsl classes");
+ return ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS;
+ }
+ return super.process(annotations, roundEnv);
+
+ }
+
+ private boolean shouldLogInfo;
+
+ private void setLogInfo() {
+ boolean hasProperty = processingEnv.getOptions().containsKey(QUERYDSL_LOG_INFO);
+ if (hasProperty) {
+ String val = processingEnv.getOptions().get(QUERYDSL_LOG_INFO);
+ shouldLogInfo = Boolean.parseBoolean(val);
+ }
+ }
+
+ private void logInfo(String message) {
+ if (shouldLogInfo) {
+ System.out.println("[NOTE] "+message); // maven compiler swallows messages to messager
+ processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, message);
+ }
+ }
+
+ private void logWarn(String message) {
+ System.err.println("[WARNING] "+message); // maven compiler swallows messages to messager
+ processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING, message);
+ }
}
+
diff --git a/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateKeyValueIntegrationTests.java b/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateKeyValueIntegrationTests.java
index cf73d5c4b..68ed965f3 100644
--- a/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateKeyValueIntegrationTests.java
+++ b/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateKeyValueIntegrationTests.java
@@ -1329,7 +1329,7 @@ void sampleScan() {
MutationToken mt = couchbaseTemplate.getCouchbaseClientFactory().getDefaultCollection()
.upsert(id, JsonObject.create().put("id", id)).mutationToken().get();
Stream users = couchbaseTemplate.rangeScan(User.class).consistentWith(MutationState.from(mt))
- /*.withSort(ScanSort.ASCENDING)*/.samplingScan(5l, null);
+ /*.withSort(ScanSort.ASCENDING)*/.samplingScan(5l, (Long)null);
List usersList = users.toList();
assertEquals(5, usersList.size(), "number in sample");
for (User u : usersList) {
diff --git a/src/test/java/org/springframework/data/couchbase/core/query/QueryCriteriaTests.java b/src/test/java/org/springframework/data/couchbase/core/query/QueryCriteriaTests.java
index fdafe89a6..70379e7d9 100644
--- a/src/test/java/org/springframework/data/couchbase/core/query/QueryCriteriaTests.java
+++ b/src/test/java/org/springframework/data/couchbase/core/query/QueryCriteriaTests.java
@@ -90,7 +90,7 @@ void testNestedOrCriteria() {
@Test
void testNestedNotIn() {
QueryCriteria c = where(i("name")).is("Bubba").or(where(i("age")).gt(12).and(i("country")).is("Austria"))
- .and(where(i("state")).notIn(new String[] { "Alabama", "Florida" }));
+ .and(where(i("state")).notIn( "Alabama", "Florida" ));
JsonArray parameters = JsonArray.create();
assertEquals(" ( (`name` = $1) or (`age` > $2 and `country` = $3)) and (not( (`state` in $4) ))",
c.export(new int[1], parameters, null));
diff --git a/src/test/java/org/springframework/data/couchbase/domain/BigAirlineRepository.java b/src/test/java/org/springframework/data/couchbase/domain/BigAirlineRepository.java
index e4167fdc1..b19f397be 100644
--- a/src/test/java/org/springframework/data/couchbase/domain/BigAirlineRepository.java
+++ b/src/test/java/org/springframework/data/couchbase/domain/BigAirlineRepository.java
@@ -30,7 +30,7 @@
*/
@Repository
public interface BigAirlineRepository extends CouchbaseRepository,
- QuerydslPredicateExecutor, DynamicProxyable {
+ DynamicProxyable {
@Query("#{#n1ql.selectEntity} where #{#n1ql.filter} and (name = $1)")
List getByName(@Param("airline_name") String airlineName);