Skip to content

Commit 2e797b6

Browse files
committed
feature: Java 21 support
1 parent 02add23 commit 2e797b6

File tree

11 files changed

+83
-56
lines changed

11 files changed

+83
-56
lines changed

.github/workflows/codeql-analysis.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ jobs:
4949

5050
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
5151
# If this step fails, then you should remove it and run the build manually (see below)
52-
- name: Set up JDK 17
52+
- name: Set up JDK 21
5353
uses: actions/setup-java@v2
5454
with:
55-
java-version: 17
55+
java-version: 21
5656
distribution: 'zulu'
5757
- name: Autobuild
5858
uses: github/codeql-action/autobuild@v2

.github/workflows/integration.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ jobs:
2121
~/.mv2/repository
2222
key: om-${{hashFiles('**/pom.xml')}}
2323

24-
- name: Set up JDK 17
24+
- name: Set up JDK 21
2525
uses: actions/setup-java@v2
2626
with:
27-
java-version: 17
27+
java-version: 21
2828
distribution: 'zulu'
2929
- run: mvn dependency:go-offline
3030
- name: Build

.github/workflows/snapshot.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ jobs:
2323
path: |
2424
~/.mv2/repository
2525
key: om-${{hashFiles('**/pom.xml')}}
26-
- name: Set up JDK 17
26+
- name: Set up JDK 21
2727
uses: actions/setup-java@v2
2828
with:
29-
java-version: 17
29+
java-version: 21
3030
distribution: 'zulu'
3131
server-id: ossrh
3232
server-username: MAVEN_USERNAME

.github/workflows/version-and-release.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
- name: Set up publishing to maven central
2222
uses: actions/setup-java@v2
2323
with:
24-
java-version: 17
24+
java-version: 21
2525
distribution: 'zulu'
2626
server-id: ossrh
2727
server-username: MAVEN_USERNAME

demos/roms-documents/pom.xml

+7-7
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
<description>Redis OM Spring Document Demo</description>
1818

1919
<properties>
20-
<java.version>17</java.version>
21-
<maven.compiler.release>17</maven.compiler.release>
22-
<maven.compiler.source>17</maven.compiler.source>
23-
<maven.compiler.target>17</maven.compiler.target>
24-
<maven.test.source>17</maven.test.source>
25-
<maven.test.target>17</maven.test.target>
20+
<java.version>21</java.version>
21+
<maven.compiler.release>21</maven.compiler.release>
22+
<maven.compiler.source>21</maven.compiler.source>
23+
<maven.compiler.target>21</maven.compiler.target>
24+
<maven.test.source>21</maven.test.source>
25+
<maven.test.target>21</maven.test.target>
2626
<maven.deploy.skip>true</maven.deploy.skip>
2727
<testcontainers.redis.version>2.2.2</testcontainers.redis.version>
2828
</properties>
@@ -141,7 +141,7 @@
141141
<path>
142142
<groupId>com.redis.om</groupId>
143143
<artifactId>redis-om-spring</artifactId>
144-
<version>0.9.5</version>
144+
<version>0.9.6-SNAPSHOT</version>
145145
</path>
146146
</annotationProcessorPaths>
147147
</configuration>

demos/roms-hashes/pom.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
<description>Redis OM Spring Enhanced RedisHash Demo</description>
1818

1919
<properties>
20-
<java.version>17</java.version>
21-
<maven.compiler.release>17</maven.compiler.release>
22-
<maven.compiler.source>17</maven.compiler.source>
23-
<maven.compiler.target>17</maven.compiler.target>
24-
<maven.test.source>17</maven.test.source>
25-
<maven.test.target>17</maven.test.target>
20+
<java.version>21</java.version>
21+
<maven.compiler.release>21</maven.compiler.release>
22+
<maven.compiler.source>21</maven.compiler.source>
23+
<maven.compiler.target>21</maven.compiler.target>
24+
<maven.test.source>21</maven.test.source>
25+
<maven.test.target>21</maven.test.target>
2626
<maven.deploy.skip>true</maven.deploy.skip>
2727
</properties>
2828

demos/roms-permits/pom.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
<description>Demo project for Spring Boot</description>
1818

1919
<properties>
20-
<java.version>17</java.version>
21-
<maven.compiler.release>17</maven.compiler.release>
22-
<maven.compiler.source>17</maven.compiler.source>
23-
<maven.compiler.target>17</maven.compiler.target>
24-
<maven.test.source>17</maven.test.source>
25-
<maven.test.target>17</maven.test.target>
20+
<java.version>21</java.version>
21+
<maven.compiler.release>21</maven.compiler.release>
22+
<maven.compiler.source>21</maven.compiler.source>
23+
<maven.compiler.target>21</maven.compiler.target>
24+
<maven.test.source>21</maven.test.source>
25+
<maven.test.target>21</maven.test.target>
2626
<maven.deploy.skip>true</maven.deploy.skip>
2727
</properties>
2828

demos/roms-vss/pom.xml

+7-7
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,20 @@
1717
<description>Redis OM Spring Vector Similarity Search Demo</description>
1818

1919
<properties>
20-
<java.version>17</java.version>
21-
<maven.compiler.release>17</maven.compiler.release>
22-
<maven.compiler.source>17</maven.compiler.source>
23-
<maven.compiler.target>17</maven.compiler.target>
24-
<maven.test.source>17</maven.test.source>
25-
<maven.test.target>17</maven.test.target>
20+
<java.version>21</java.version>
21+
<maven.compiler.release>21</maven.compiler.release>
22+
<maven.compiler.source>21</maven.compiler.source>
23+
<maven.compiler.target>21</maven.compiler.target>
24+
<maven.test.source>21</maven.test.source>
25+
<maven.test.target>21</maven.test.target>
2626
<maven.deploy.skip>true</maven.deploy.skip>
2727
</properties>
2828

2929
<dependencies>
3030
<dependency>
3131
<groupId>com.redis.om</groupId>
3232
<artifactId>redis-om-spring</artifactId>
33-
<version>0.9.5</version>
33+
<version>0.9.6-SNAPSHOT</version>
3434
</dependency>
3535
<dependency>
3636
<groupId>org.springframework.boot</groupId>

pom.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212

1313
<properties>
1414
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15-
<maven.compiler.release>17</maven.compiler.release>
16-
<maven.compiler.source>17</maven.compiler.source>
17-
<maven.compiler.target>17</maven.compiler.target>
18-
<maven.test.source>17</maven.test.source>
19-
<maven.test.target>17</maven.test.target>
20-
<java.version>17</java.version>
15+
<maven.compiler.release>21</maven.compiler.release>
16+
<maven.compiler.source>21</maven.compiler.source>
17+
<maven.compiler.target>21</maven.compiler.target>
18+
<maven.test.source>21</maven.test.source>
19+
<maven.test.target>21</maven.test.target>
20+
<java.version>21</java.version>
2121
</properties>
2222

2323
<modules>

redis-om-spring/pom.xml

+9-9
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<groupId>com.redis.om</groupId>
99
<artifactId>redis-om-spring</artifactId>
10-
<version>0.9.5</version>
10+
<version>0.9.6-SNAPSHOT</version>
1111
<packaging>jar</packaging>
1212

1313
<name>redis-om-spring</name>
@@ -55,12 +55,12 @@
5555

5656
<properties>
5757
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
58-
<maven.compiler.release>17</maven.compiler.release>
59-
<maven.compiler.source>17</maven.compiler.source>
60-
<maven.compiler.target>17</maven.compiler.target>
61-
<maven.test.source>17</maven.test.source>
62-
<maven.test.target>17</maven.test.target>
63-
<java.version>17</java.version>
58+
<maven.compiler.release>21</maven.compiler.release>
59+
<maven.compiler.source>21</maven.compiler.source>
60+
<maven.compiler.target>21</maven.compiler.target>
61+
<maven.test.source>21</maven.test.source>
62+
<maven.test.target>21</maven.test.target>
63+
<java.version>21</java.version>
6464
<spring.version>3.3.2</spring.version>
6565
<sdr.version>3.3.2</sdr.version>
6666
<jedis.version>5.0.2</jedis.version>
@@ -374,8 +374,8 @@
374374
<artifactId>maven-compiler-plugin</artifactId>
375375
<version>3.10.1</version>
376376
<configuration>
377-
<source>${maven.compiler.source}</source>
378-
<target>${maven.compiler.target}</target>
377+
<source>21</source>
378+
<target>21</target>
379379
<encoding>${project.build.sourceEncoding}</encoding>
380380
<parameters>true</parameters>
381381
</configuration>

redis-om-spring/src/main/java/com/redis/om/spring/metamodel/MetamodelGenerator.java

+35-8
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
@SupportedAnnotationTypes(
4545
value = { "com.redis.om.spring.annotations.Document", "org.springframework.data.redis.core.RedisHash" }
4646
)
47-
@SupportedSourceVersion(SourceVersion.RELEASE_17)
4847
@AutoService(Processor.class)
4948
public final class MetamodelGenerator extends AbstractProcessor {
5049

@@ -60,6 +59,11 @@ public final class MetamodelGenerator extends AbstractProcessor {
6059
public MetamodelGenerator() {
6160
}
6261

62+
@Override
63+
public SourceVersion getSupportedSourceVersion() {
64+
return SourceVersion.latest();
65+
}
66+
6367
private static TypeSpec getTypeSpecForMetamodelClass(String genEntityName, List<FieldSpec> interceptors,
6468
List<ObjectGraphFieldSpec> fields, List<FieldSpec> nestedFieldsConstants, CodeBlock staticBlock) {
6569
return TypeSpec.classBuilder(genEntityName) //
@@ -242,7 +246,7 @@ private List<Triple<ObjectGraphFieldSpec, FieldSpec, CodeBlock>> processFieldMet
242246
TypeName entityField = TypeName.get(field.asType());
243247

244248
TypeMirror fieldType = field.asType();
245-
String fullTypeClassName = fieldType.toString();
249+
String fullTypeClassName = fieldType.toString().replace("@lombok.NonNull ", "").trim();
246250
String cls = ObjectUtils.getTargetClassName(fullTypeClassName);
247251

248252
if (field.asType().getKind().isPrimitive()) {
@@ -575,20 +579,26 @@ private Map<? extends Element, String> getInstanceFields(Element element) {
575579
// Only consider methods with no parameters
576580
.filter(ee -> ee.getEnclosedElements().stream().noneMatch(eee -> eee.getKind() == ElementKind.PARAMETER))
577581
// Todo: Filter out methods that returns void or Void
578-
.collect(Collectors.toMap(e -> e.getSimpleName().toString(), Function.identity()));
582+
.collect(Collectors.toMap(
583+
e -> e.getSimpleName().toString(),
584+
Function.identity(),
585+
(v1, v2) -> v1 // Merge function to handle duplicate keys
586+
));
579587

580588
final Set<String> isGetters = getters.values().stream()
581589
// todo: Filter out methods only returning boolean or Boolean
582590
.map(Element::getSimpleName).map(Object::toString).filter(n -> n.startsWith(IS_PREFIX)).map(n -> n.substring(2))
583591
.map(ObjectUtils::toLowercaseFirstCharacter).collect(Collectors.toSet());
584592

593+
// Use a mutable map to collect the results
594+
Map<Element, String> results = new HashMap<>();
595+
585596
// Retrieve all declared non-final instance fields of the annotated class
586-
Map<Element, String> results = element.getEnclosedElements().stream()
587-
.filter(ee -> ee.getKind().isField() && !ee.getModifiers().contains(Modifier.STATIC) // Ignore static
588-
// fields
597+
element.getEnclosedElements().stream()
598+
.filter(ee -> ee.getKind().isField() && !ee.getModifiers().contains(Modifier.STATIC) // Ignore static fields
589599
&& !ee.getModifiers().contains(Modifier.FINAL)) // Ignore final fields
590-
.collect(Collectors.toMap(Function.identity(),
591-
ee -> findGetter(ee, getters, isGetters, element.toString(), lombokGetterAvailable(element, ee))));
600+
.forEach(ee -> results.put(ee,
601+
findGetter(ee, getters, isGetters, element.toString(), lombokGetterAvailable(element, ee))));
592602

593603
Types types = processingEnvironment.getTypeUtils();
594604
List<? extends TypeMirror> superTypes = types.directSupertypes(element.asType());
@@ -679,6 +689,23 @@ private String findGetter(final Element field, final Map<String, Element> getter
679689
return lambdaName + " -> " + lambdaName + "." + fieldName;
680690
}
681691

692+
// Handle specific cases for java.lang.String, java.lang.Enum, and java.util.Date
693+
if (field.getEnclosingElement().toString().equals("java.lang.String")) {
694+
if (fieldName.equals("hash") || fieldName.equals("hashIsZero")) {
695+
return lambdaName + " -> 0"; // Return a default value for hash and hashIsZero
696+
}
697+
} else if (field.getEnclosingElement().toString().equals("java.lang.Enum")) {
698+
if (fieldName.equals("hash")) {
699+
return lambdaName + " -> 0"; // Return a default value for hash
700+
}
701+
} else if (field.getEnclosingElement().toString().equals("java.util.Date")) {
702+
if (fieldName.equals("fastTime")) {
703+
return lambdaName + " -> " + lambdaName + ".getTime()"; // Use getTime() as a fallback for fastTime
704+
} else if (fieldName.equals("cdate")) {
705+
return lambdaName + " -> " + lambdaName + ".getTime()"; // Use getTime() as a fallback for cdate
706+
}
707+
}
708+
682709
// default to thrower
683710
messager.printMessage(Diagnostic.Kind.ERROR,
684711
"Class " + entityName + " is not a proper JavaBean because " + field.getSimpleName()

0 commit comments

Comments
 (0)