diff --git a/README.adoc b/README.adoc
index 8a45457..c572adf 100644
--- a/README.adoc
+++ b/README.adoc
@@ -1,16 +1,11 @@
:fn-managed: footnote:[The application's domain and related classes]
== Hibernate models
-Uses a mix of https://smallrye.io/jandex/[Jandex] and Java reflection to build the de-typed abstraction model of
-classes and annotations referenced by an application's managed resources{fn-managed}.
+Provides support for dealing with an application's managed resources{fn-managed} as a de-typed abstraction model
+backed by one or more sources. Consumers can then access details from that abstraction model in a unified way,
+regardless of the underlying source.
-Consumers can then access details from that abstraction model in a unified way, regardless of the underlying
-source. For classes which we are able to access from a Jandex index, this has the benefit that the classes are
-not loaded into the ClassLoader which is important because once a classes is loaded into a ClassLoader, its
-bytecode cannot be changed and run-time bytecode enhancement is not possible.
-
-This work is intended to replace the https://github.com/hibernate/hibernate-commons-annotations[`hibernate-commons-annotation`] (HCANN)
-library, which suffered from a number of shortcomings.
+NOTE: This work replaces the https://github.com/hibernate/hibernate-commons-annotations[`hibernate-commons-annotation`] library, which suffered from a number of shortcomings.
=== Annotations
@@ -37,3 +32,12 @@ FieldDetails:: Think `java.lang.reflect.Field`
MethodDetails:: Think `java.lang.reflect.Method`
RecordComponentDetails:: Think `java.lang.reflect.RecordComponent`
ClassDetailsRegistry:: registry of `ClassDetails` references
+
+
+=== Artifacts
+
+hibernate-models:: The base support, using Java reflection as the backing source.
+hibernate-models-jandex:: Optional support for using https://smallrye.io/jandex/[Jandex] as the backing source. Using
+definitions from a Jandex index has the benefit that the classes are not loaded into the ClassLoader which can be important
+in a few scenarios (e.g. retain the ability to enhance a class's bytecode).
+
diff --git a/build.gradle b/build.gradle
index 2a76731..bbf142f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,118 +1,23 @@
plugins {
- id "java-library"
-
- id "base-information"
-
- id "checkstyle"
- id "jacoco"
-
- id "maven-publish"
- id "io.github.gradle-nexus.publish-plugin" version "2.0.0"
- id "publishing-config"
- id "signing-config"
- id "release-process"
+ id "io.github.gradle-nexus.publish-plugin"
}
-dependencies {
- implementation libs.jandex
- implementation libs.logging
-
- compileOnly libs.loggingAnnotations
-
- annotationProcessor libs.loggingProcessor
- annotationProcessor libs.logging
- annotationProcessor libs.loggingAnnotations
-
- testImplementation jakartaLibs.jpa
- testImplementation testLibs.junit5Api
- testImplementation testLibs.assertjCore
-
- testRuntimeOnly testLibs.junit5Engine
- testRuntimeOnly testLibs.log4j
-}
-
-
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Java handling
+// OSSRH publishing
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// To force the build produce the same byte-for-byte archives and hence make Hibernate Models build reproducible.
-// See also https://docs.gradle.org/current/userguide/working_with_files.html#sec:reproducible_archives
-tasks.withType(AbstractArchiveTask).configureEach {
- preserveFileTimestamps = false
- reproducibleFileOrder = true
-}
-
-java {
- sourceCompatibility = jdks.versions.baseline.get() as int
- targetCompatibility = jdks.versions.baseline.get() as int
-
- withJavadocJar()
- withSourcesJar()
-}
-
-test {
- useJUnitPlatform()
-}
+String hibernatePublishUsername = project.hasProperty( 'hibernatePublishUsername' )
+ ? project.property( 'hibernatePublishUsername' )
+ : null
+String hibernatePublishPassword = project.hasProperty( 'hibernatePublishPassword' )
+ ? project.property( 'hibernatePublishPassword' )
+ : null
-// create a single "compile" task
-tasks.register( "compile" ).configure {
- dependsOn tasks.withType( JavaCompile )
-}
-
-tasks.withType( JavaCompile ).configureEach {javaCompile->
- options.encoding = "UTF-8"
- options.warnings false
-}
-
-
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Javadoc
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-tasks.named( "javadoc", Javadoc ) {
- options {
- use = true
- encoding = "UTF-8"
-
- addStringOption( "Xdoclint:none", "-quiet" )
-
- tags(
- "todo:X",
- "apiNote:a:API Note:",
- "implSpec:a:Implementation Specification:",
- "implNote:a:Implementation Note:"
- )
+nexusPublishing {
+ repositories {
+ sonatype {
+ username = hibernatePublishUsername
+ password = hibernatePublishPassword
+ }
}
}
-
-
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Checkstyle
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-checkstyle {
- sourceSets = [ project.sourceSets.main ]
- showViolations = false
-}
-
-
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// JaCoCo
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-def jacocoReportTask = tasks.named( "jacocoTestReport" ) {
- dependsOn tasks.named( "test" )
-}
-
-jacocoTestReport {
- reports {
- xml.required = false
- csv.required = false
- html.outputLocation = layout.buildDirectory.dir( "jacocoHtml" )
- }
-}
-
-tasks.named( "check" ) {
- dependsOn jacocoReportTask
-}
diff --git a/buildSrc/src/main/groovy/base-information.gradle b/buildSrc/src/main/groovy/base-information.gradle
index fe3f0e8..a8925fe 100644
--- a/buildSrc/src/main/groovy/base-information.gradle
+++ b/buildSrc/src/main/groovy/base-information.gradle
@@ -5,7 +5,7 @@ group = "org.hibernate.models"
// Version handling
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-def versionFile = project.file( "version.txt" )
+def versionFile = rootProject.file( "version.txt" )
def releaseVersion = determineVersion("releaseVersion", versionFile )
def developmentVersion = determineVersion("developmentVersion", versionFile)
diff --git a/buildSrc/src/main/groovy/java-module.gradle b/buildSrc/src/main/groovy/java-module.gradle
new file mode 100644
index 0000000..10c6b12
--- /dev/null
+++ b/buildSrc/src/main/groovy/java-module.gradle
@@ -0,0 +1,103 @@
+plugins {
+ id "base-information"
+ id "java-library"
+
+ id "checkstyle"
+ id "jacoco"
+}
+
+dependencies {
+ implementation libs.logging
+
+ compileOnly libs.loggingAnnotations
+
+ annotationProcessor libs.loggingProcessor
+ annotationProcessor libs.logging
+ annotationProcessor libs.loggingAnnotations
+
+ testImplementation jakartaLibs.jpa
+ testImplementation testLibs.junit5Api
+ testImplementation testLibs.assertjCore
+
+ testRuntimeOnly testLibs.junit5Engine
+ testRuntimeOnly testLibs.log4j
+}
+
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Java handling
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+java {
+ sourceCompatibility = jdks.versions.baseline.get() as int
+ targetCompatibility = jdks.versions.baseline.get() as int
+
+ withJavadocJar()
+ withSourcesJar()
+}
+
+test {
+ useJUnitPlatform()
+}
+
+// create a single "compile" task
+tasks.register( "compile" ).configure {
+ dependsOn tasks.withType( JavaCompile )
+}
+
+tasks.withType( JavaCompile ).configureEach {javaCompile->
+ options.encoding = "UTF-8"
+ options.warnings false
+}
+
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Javadoc
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+tasks.named( "javadoc", Javadoc ) {
+ options {
+ use = true
+ encoding = "UTF-8"
+
+ addStringOption( "Xdoclint:none", "-quiet" )
+
+ tags(
+ "todo:X",
+ "apiNote:a:API Note:",
+ "implSpec:a:Implementation Specification:",
+ "implNote:a:Implementation Note:"
+ )
+ }
+}
+
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Checkstyle
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+checkstyle {
+ sourceSets = [ project.sourceSets.main ]
+ showViolations = false
+}
+
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// JaCoCo
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def jacocoReportTask = tasks.named( "jacocoTestReport" ) {
+ dependsOn tasks.named( "test" )
+}
+
+jacocoTestReport {
+ reports {
+ xml.required = false
+ csv.required = false
+ html.outputLocation = layout.buildDirectory.dir( "jacocoHtml" )
+ }
+}
+
+tasks.named( "check" ) {
+ dependsOn jacocoReportTask
+}
\ No newline at end of file
diff --git a/buildSrc/src/main/groovy/published-java-module.gradle b/buildSrc/src/main/groovy/published-java-module.gradle
new file mode 100644
index 0000000..8d84648
--- /dev/null
+++ b/buildSrc/src/main/groovy/published-java-module.gradle
@@ -0,0 +1,8 @@
+plugins {
+ id "java-module"
+
+ id "maven-publish"
+ id "publishing-config"
+ id "signing-config"
+ id "release-process"
+}
\ No newline at end of file
diff --git a/buildSrc/src/main/groovy/publishing-config.gradle b/buildSrc/src/main/groovy/publishing-config.gradle
index e884a17..e8d624d 100644
--- a/buildSrc/src/main/groovy/publishing-config.gradle
+++ b/buildSrc/src/main/groovy/publishing-config.gradle
@@ -1,18 +1,8 @@
plugins {
- id "java-library"
- id "io.github.gradle-nexus.publish-plugin"
+ id "java-module"
+ id "maven-publish"
}
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// OSSRH publishing
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-String hibernatePublishUsername = project.hasProperty( 'hibernatePublishUsername' )
- ? project.property( 'hibernatePublishUsername' )
- : null
-String hibernatePublishPassword = project.hasProperty( 'hibernatePublishPassword' )
- ? project.property( 'hibernatePublishPassword' )
- : null
publishing {
publications {
@@ -62,12 +52,3 @@ publishing {
}
}
-nexusPublishing {
- repositories {
- sonatype {
- username = hibernatePublishUsername
- password = hibernatePublishPassword
- }
- }
-}
-
diff --git a/hibernate-models-jandex/build.gradle b/hibernate-models-jandex/build.gradle
new file mode 100644
index 0000000..c578da5
--- /dev/null
+++ b/hibernate-models-jandex/build.gradle
@@ -0,0 +1,13 @@
+plugins {
+ id "published-java-module"
+}
+
+description = "Jandex support for hibernate-models (isolated dependency)"
+
+dependencies {
+ api project( ":hibernate-models" )
+
+ implementation libs.jandex
+
+ testImplementation project( ":hibernate-models-testing" )
+}
diff --git a/src/main/java/org/hibernate/models/internal/jandex/AbstractAnnotationTarget.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/AbstractAnnotationTarget.java
similarity index 96%
rename from src/main/java/org/hibernate/models/internal/jandex/AbstractAnnotationTarget.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/AbstractAnnotationTarget.java
index 7265f0f..f6b1ed0 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/AbstractAnnotationTarget.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/AbstractAnnotationTarget.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.lang.annotation.Annotation;
import java.util.Map;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/AbstractValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/AbstractValueExtractor.java
similarity index 79%
rename from src/main/java/org/hibernate/models/internal/jandex/AbstractValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/AbstractValueExtractor.java
index 7595610..90045bd 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/AbstractValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/AbstractValueExtractor.java
@@ -4,10 +4,11 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexModelBuildingContext;
+import org.hibernate.models.jandex.spi.JandexValueExtractor;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueExtractor;
import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.AnnotationValue;
@@ -38,6 +39,6 @@ protected AnnotationValue resolveAnnotationValue(
return explicitValue;
}
- return annotation.valueWithDefault( buildingContext.getJandexIndex(), attributeName );
+ return annotation.valueWithDefault( buildingContext.as( JandexModelBuildingContext.class ).getJandexIndex(), attributeName );
}
}
diff --git a/src/main/java/org/hibernate/models/internal/jandex/AnnotationUsageBuilder.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/AnnotationUsageBuilder.java
similarity index 82%
rename from src/main/java/org/hibernate/models/internal/jandex/AnnotationUsageBuilder.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/AnnotationUsageBuilder.java
index 58ed27c..072da36 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/AnnotationUsageBuilder.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/AnnotationUsageBuilder.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
@@ -19,11 +19,12 @@
import java.util.function.BiConsumer;
import org.hibernate.models.internal.util.CollectionHelper;
+import org.hibernate.models.jandex.spi.JandexModelBuildingContext;
+import org.hibernate.models.jandex.spi.JandexValueExtractor;
import org.hibernate.models.spi.AnnotationDescriptor;
import org.hibernate.models.spi.AnnotationDescriptorRegistry;
import org.hibernate.models.spi.AttributeDescriptor;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueExtractor;
import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.DotName;
@@ -90,20 +91,25 @@ public static void processAnnotations(
}
public static A makeUsage(
- AnnotationInstance annotation,
+ AnnotationInstance jandexAnnotation,
AnnotationDescriptor annotationDescriptor,
SourceModelBuildingContext modelContext) {
- return annotationDescriptor.createUsage( annotation, modelContext );
+ final Map attributeValues = extractAttributeValues(
+ jandexAnnotation,
+ annotationDescriptor,
+ modelContext
+ );
+ return annotationDescriptor.createUsage( attributeValues, modelContext );
}
/**
- * Extracts values from an annotation creating AnnotationAttributeValue references.
- */
+ * Extracts values from an annotation creating AnnotationAttributeValue references.
+ */
@SuppressWarnings({ "rawtypes", "unchecked" })
public static Map extractAttributeValues(
- AnnotationInstance annotationInstance,
- AnnotationDescriptor annotationDescriptor,
- SourceModelBuildingContext modelContext) {
+ AnnotationInstance annotationInstance,
+ AnnotationDescriptor annotationDescriptor,
+ SourceModelBuildingContext modelContext) {
if ( CollectionHelper.isEmpty( annotationDescriptor.getAttributes() ) ) {
return Collections.emptyMap();
}
@@ -111,9 +117,9 @@ public static Map extractAttributeValues(
final ConcurrentHashMap valueMap = new ConcurrentHashMap<>();
for ( int i = 0; i < annotationDescriptor.getAttributes().size(); i++ ) {
final AttributeDescriptor attributeDescriptor = annotationDescriptor.getAttributes().get( i );
- final JandexValueExtractor> extractor = attributeDescriptor
- .getTypeDescriptor()
- .createJandexValueExtractor( modelContext );
+ final JandexValueExtractor> extractor = modelContext
+ .as( JandexModelBuildingContext.class )
+ .getJandexValueExtractor( attributeDescriptor.getTypeDescriptor() );
final Object attributeValue = extractor.extractValue(
annotationInstance,
attributeDescriptor,
diff --git a/src/main/java/org/hibernate/models/internal/jandex/ArrayValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ArrayValueConverter.java
similarity index 77%
rename from src/main/java/org/hibernate/models/internal/jandex/ArrayValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ArrayValueConverter.java
index 85d1609..9d8e814 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/ArrayValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ArrayValueConverter.java
@@ -4,13 +4,14 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.util.List;
+import org.hibernate.models.jandex.spi.JandexModelBuildingContext;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
import org.hibernate.models.spi.ValueTypeDescriptor;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
@@ -32,7 +33,7 @@ public V[] convert(AnnotationValue jandexValue, SourceModelBuildingContext model
assert values != null;
final V[] result = elementTypeDescriptor.makeArray( values.size(), modelContext );
- final JandexValueConverter elementWrapper = elementTypeDescriptor.createJandexValueConverter( modelContext );
+ final JandexValueConverter elementWrapper = modelContext.as( JandexModelBuildingContext.class ).getJandexValueConverter( elementTypeDescriptor );
for ( int i = 0; i < values.size(); i++ ) {
result[i] = elementWrapper.convert( values.get( i ), modelContext );
}
diff --git a/src/main/java/org/hibernate/models/internal/jandex/ArrayValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ArrayValueExtractor.java
similarity index 88%
rename from src/main/java/org/hibernate/models/internal/jandex/ArrayValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ArrayValueExtractor.java
index 8767648..6aa7f99 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/ArrayValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ArrayValueExtractor.java
@@ -4,12 +4,12 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.util.List;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/BooleanValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/BooleanValueConverter.java
similarity index 86%
rename from src/main/java/org/hibernate/models/internal/jandex/BooleanValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/BooleanValueConverter.java
index 2e80daf..aaa7fe2 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/BooleanValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/BooleanValueConverter.java
@@ -4,10 +4,10 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/BooleanValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/BooleanValueExtractor.java
similarity index 94%
rename from src/main/java/org/hibernate/models/internal/jandex/BooleanValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/BooleanValueExtractor.java
index f732ed5..d6b870c 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/BooleanValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/BooleanValueExtractor.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import org.hibernate.models.spi.SourceModelBuildingContext;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/ByteValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ByteValueConverter.java
similarity index 86%
rename from src/main/java/org/hibernate/models/internal/jandex/ByteValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ByteValueConverter.java
index 348d9e6..8628172 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/ByteValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ByteValueConverter.java
@@ -4,10 +4,10 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/ByteValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ByteValueExtractor.java
similarity index 94%
rename from src/main/java/org/hibernate/models/internal/jandex/ByteValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ByteValueExtractor.java
index f88a5a9..c68b98c 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/ByteValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ByteValueExtractor.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import org.hibernate.models.spi.SourceModelBuildingContext;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/CharacterValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/CharacterValueConverter.java
similarity index 86%
rename from src/main/java/org/hibernate/models/internal/jandex/CharacterValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/CharacterValueConverter.java
index 2e40146..ca1bb11 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/CharacterValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/CharacterValueConverter.java
@@ -4,10 +4,10 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/CharacterValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/CharacterValueExtractor.java
similarity index 74%
rename from src/main/java/org/hibernate/models/internal/jandex/CharacterValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/CharacterValueExtractor.java
index e6cc626..789cd81 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/CharacterValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/CharacterValueExtractor.java
@@ -4,14 +4,12 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import org.hibernate.models.spi.SourceModelBuildingContext;
import org.jboss.jandex.AnnotationValue;
-import static org.hibernate.models.internal.jandex.CharacterValueConverter.JANDEX_CHARACTER_VALUE_WRAPPER;
-
/**
* Extracts character values from an attribute
*
@@ -23,6 +21,6 @@ public class CharacterValueExtractor extends AbstractValueExtractor {
@Override
protected Character extractAndWrap(AnnotationValue jandexValue, SourceModelBuildingContext buildingContext) {
assert jandexValue != null;
- return JANDEX_CHARACTER_VALUE_WRAPPER.convert( jandexValue, buildingContext );
+ return CharacterValueConverter.JANDEX_CHARACTER_VALUE_WRAPPER.convert( jandexValue, buildingContext );
}
}
diff --git a/src/main/java/org/hibernate/models/internal/jandex/ClassValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ClassValueConverter.java
similarity index 89%
rename from src/main/java/org/hibernate/models/internal/jandex/ClassValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ClassValueConverter.java
index 370a37a..204a744 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/ClassValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ClassValueConverter.java
@@ -4,10 +4,10 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
import org.jboss.jandex.Type;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/ClassValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ClassValueExtractor.java
similarity index 93%
rename from src/main/java/org/hibernate/models/internal/jandex/ClassValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ClassValueExtractor.java
index 0d35b8a..b801a2d 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/ClassValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ClassValueExtractor.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import org.hibernate.models.spi.SourceModelBuildingContext;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/DoubleValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/DoubleValueConverter.java
similarity index 86%
rename from src/main/java/org/hibernate/models/internal/jandex/DoubleValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/DoubleValueConverter.java
index 9d7d4c2..7f6358f 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/DoubleValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/DoubleValueConverter.java
@@ -4,10 +4,10 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/DoubleValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/DoubleValueExtractor.java
similarity index 94%
rename from src/main/java/org/hibernate/models/internal/jandex/DoubleValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/DoubleValueExtractor.java
index 1636fcf..4f5f2e0 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/DoubleValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/DoubleValueExtractor.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import org.hibernate.models.spi.SourceModelBuildingContext;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/EnumValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/EnumValueConverter.java
similarity index 87%
rename from src/main/java/org/hibernate/models/internal/jandex/EnumValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/EnumValueConverter.java
index 6b19b3b..5ec0119 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/EnumValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/EnumValueConverter.java
@@ -4,10 +4,10 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/EnumValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/EnumValueExtractor.java
similarity index 94%
rename from src/main/java/org/hibernate/models/internal/jandex/EnumValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/EnumValueExtractor.java
index 8ffd7bb..b04d277 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/EnumValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/EnumValueExtractor.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import org.hibernate.models.spi.SourceModelBuildingContext;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/FloatValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/FloatValueConverter.java
similarity index 86%
rename from src/main/java/org/hibernate/models/internal/jandex/FloatValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/FloatValueConverter.java
index f8bca5b..970db23 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/FloatValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/FloatValueConverter.java
@@ -4,10 +4,10 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/FloatValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/FloatValueExtractor.java
similarity index 93%
rename from src/main/java/org/hibernate/models/internal/jandex/FloatValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/FloatValueExtractor.java
index af87c04..0b8b133 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/FloatValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/FloatValueExtractor.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import org.hibernate.models.spi.SourceModelBuildingContext;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/IntegerValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/IntegerValueConverter.java
similarity index 86%
rename from src/main/java/org/hibernate/models/internal/jandex/IntegerValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/IntegerValueConverter.java
index d78c146..f924ae7 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/IntegerValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/IntegerValueConverter.java
@@ -4,10 +4,10 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/IntegerValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/IntegerValueExtractor.java
similarity index 94%
rename from src/main/java/org/hibernate/models/internal/jandex/IntegerValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/IntegerValueExtractor.java
index 9b3fdbc..dc015a8 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/IntegerValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/IntegerValueExtractor.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import org.hibernate.models.spi.SourceModelBuildingContext;
diff --git a/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexAnnotationDescriptorImpl.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexAnnotationDescriptorImpl.java
new file mode 100644
index 0000000..e70ac21
--- /dev/null
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexAnnotationDescriptorImpl.java
@@ -0,0 +1,43 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * Copyright: Red Hat Inc. and Hibernate Authors
+ */
+
+package org.hibernate.models.jandex.internal;
+
+import java.lang.annotation.Annotation;
+
+import org.hibernate.models.internal.StandardAnnotationDescriptor;
+import org.hibernate.models.jandex.spi.JandexAnnotationDescriptor;
+import org.hibernate.models.jandex.spi.JandexModelBuildingContext;
+import org.hibernate.models.spi.AnnotationDescriptor;
+import org.hibernate.models.spi.SourceModelBuildingContext;
+
+import org.jboss.jandex.AnnotationInstance;
+
+/**
+ * @author Steve Ebersole
+ */
+public class JandexAnnotationDescriptorImpl
+ extends StandardAnnotationDescriptor
+ implements JandexAnnotationDescriptor {
+ public JandexAnnotationDescriptorImpl(
+ Class annotationType,
+ SourceModelBuildingContext buildingContext) {
+ super( annotationType, buildingContext );
+ }
+
+ public JandexAnnotationDescriptorImpl(
+ Class annotationType,
+ AnnotationDescriptor> repeatableContainer,
+ SourceModelBuildingContext buildingContext) {
+ super( annotationType, repeatableContainer, buildingContext );
+ }
+
+ @Override
+ public A createUsage(AnnotationInstance jandexAnnotation, JandexModelBuildingContext context) {
+ return AnnotationUsageBuilder.makeUsage( jandexAnnotation, this, context );
+ }
+}
diff --git a/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexAnnotationDescriptorRegistry.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexAnnotationDescriptorRegistry.java
new file mode 100644
index 0000000..e7b57f2
--- /dev/null
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexAnnotationDescriptorRegistry.java
@@ -0,0 +1,30 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * Copyright: Red Hat Inc. and Hibernate Authors
+ */
+
+package org.hibernate.models.jandex.internal;
+
+import java.lang.annotation.Annotation;
+
+import org.hibernate.models.internal.AnnotationDescriptorRegistryStandard;
+import org.hibernate.models.spi.AnnotationDescriptor;
+import org.hibernate.models.spi.SourceModelBuildingContext;
+
+/**
+ * @author Steve Ebersole
+ */
+public class JandexAnnotationDescriptorRegistry extends AnnotationDescriptorRegistryStandard {
+ public JandexAnnotationDescriptorRegistry(SourceModelBuildingContext modelBuildingContext) {
+ super( modelBuildingContext );
+ }
+
+ @Override
+ protected AnnotationDescriptor buildAnnotationDescriptor(
+ Class javaType,
+ AnnotationDescriptor extends Annotation> containerDescriptor) {
+ return new JandexAnnotationDescriptorImpl<>( javaType, containerDescriptor, getModelBuildingContext() );
+ }
+}
diff --git a/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexBuilders.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexBuilders.java
new file mode 100644
index 0000000..547b28d
--- /dev/null
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexBuilders.java
@@ -0,0 +1,424 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * Copyright: Red Hat Inc. and Hibernate Authors
+ */
+package org.hibernate.models.jandex.internal;
+
+import java.lang.annotation.Annotation;
+import java.util.function.BiConsumer;
+
+import org.hibernate.models.internal.ArrayTypeDescriptor;
+import org.hibernate.models.internal.jdk.JdkBuilders;
+import org.hibernate.models.internal.util.StringHelper;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
+import org.hibernate.models.jandex.spi.JandexValueExtractor;
+import org.hibernate.models.spi.AnnotationDescriptor;
+import org.hibernate.models.spi.ClassDetails;
+import org.hibernate.models.spi.MethodDetails;
+import org.hibernate.models.spi.SourceModelBuildingContext;
+import org.hibernate.models.spi.ValueTypeDescriptor;
+
+import org.jboss.jandex.ClassInfo;
+import org.jboss.jandex.IndexView;
+import org.jboss.jandex.MethodInfo;
+import org.jboss.jandex.Type;
+
+/**
+ * Jandex based ClassDetailsBuilder
+ *
+ * @author Steve Ebersole
+ */
+public class JandexBuilders {
+ public static ClassDetails buildDetailsFromIndex(
+ String name,
+ IndexView jandexIndex,
+ SourceModelBuildingContext processingContext) {
+ if ( StringHelper.isEmpty( name ) ) {
+ return null;
+ }
+
+ if ( "void".equals( name ) ) {
+ name = Void.class.getName();
+ }
+
+ final ClassInfo classInfo = jandexIndex.getClassByName( name );
+ if ( classInfo != null ) {
+ return new JandexClassDetails( classInfo, processingContext );
+ }
+
+ // potentially handle primitives
+ final Class> primitiveClass = resolvePrimitiveClass( name );
+ if ( primitiveClass != null ) {
+ return JdkBuilders.buildClassDetailsStatic( primitiveClass, processingContext );
+ }
+
+ // potentially handle package names
+ final ClassInfo packageInfo = jandexIndex.getClassByName( name + ".package-info" );
+ if ( packageInfo != null ) {
+ // package-info is safe to load through using Class
+ return JdkBuilders.buildClassDetailsStatic( name + ".package-info", processingContext );
+ }
+
+ return null;
+ }
+
+
+ public static Class> resolvePrimitiveClass(String className) {
+ if ( "boolean".equals( className ) ) {
+ return boolean.class;
+ }
+
+ if ( Boolean.class.getSimpleName().equalsIgnoreCase( className ) || Boolean.class.getName().equals( className ) ) {
+ return Boolean.class;
+ }
+
+ if ( "byte".equals( className ) ) {
+ return byte.class;
+ }
+
+ if ( Byte.class.getSimpleName().equals( className ) || Byte.class.getName().equals( className ) ) {
+ return Byte.class;
+ }
+
+ if ( "short".equals( className ) ) {
+ return short.class;
+ }
+
+ if ( Short.class.getSimpleName().equals( className ) || Short.class.getName().equals( className ) ) {
+ return Short.class;
+ }
+
+ if ( "int".equals( className ) ) {
+ return int.class;
+ }
+
+ if ( Integer.class.getSimpleName().equals( className ) || Integer.class.getName().equals( className ) ) {
+ return Integer.class;
+ }
+
+ if ( "long".equals( className ) ) {
+ return long.class;
+ }
+
+ if ( Long.class.getSimpleName().equals( className ) || Long.class.getName().equals( className ) ) {
+ return Long.class;
+ }
+
+ if ( "double".equals( className ) ) {
+ return double.class;
+ }
+
+ if ( Double.class.getSimpleName().equals( className ) || Double.class.getName().equals( className ) ) {
+ return Double.class;
+ }
+
+ if ( "float".equals( className ) ) {
+ return float.class;
+ }
+
+ if ( Float.class.getSimpleName().equals( className ) || Float.class.getName().equals( className ) ) {
+ return Float.class;
+ }
+
+ return null;
+ }
+
+ public static JandexMethodDetails buildMethodDetails(
+ MethodInfo method,
+ ClassDetails declaringType,
+ SourceModelBuildingContext buildingContext) {
+ if ( method.parametersCount() == 0 ) {
+ // could be a getter
+ final Type returnType = method.returnType();
+ if ( returnType.kind() != Type.Kind.VOID ) {
+ final String methodName = method.name();
+ if ( methodName.startsWith( "get" ) ) {
+ return new JandexMethodDetails(
+ method,
+ MethodDetails.MethodKind.GETTER,
+ JandexTypeSwitchStandard.switchType( returnType, declaringType, buildingContext ),
+ declaringType,
+ buildingContext
+ );
+ }
+ else if ( isBoolean( returnType ) && ( methodName.startsWith( "is" )
+ || methodName.startsWith( "has" )
+ || methodName.startsWith( "was" ) ) ) {
+ return new JandexMethodDetails(
+ method,
+ MethodDetails.MethodKind.GETTER,
+ JandexTypeSwitchStandard.switchType( returnType, declaringType, buildingContext ),
+ declaringType,
+ buildingContext
+ );
+ }
+ }
+ }
+
+ if ( method.parametersCount() == 1
+ && method.returnType().kind() == Type.Kind.VOID
+ && method.name().startsWith( "set" ) ) {
+ return new JandexMethodDetails(
+ method,
+ MethodDetails.MethodKind.SETTER,
+ JandexTypeSwitchStandard.switchType( method.parameterType( 0 ), declaringType, buildingContext ),
+ declaringType,
+ buildingContext
+ );
+ }
+
+ return new JandexMethodDetails(
+ method,
+ MethodDetails.MethodKind.OTHER,
+ null,
+ declaringType,
+ buildingContext
+ );
+ }
+
+ private static boolean isBoolean(Type type) {
+ if ( type.kind() == Type.Kind.PRIMITIVE ) {
+ return type.name().toString().equals( "boolean" );
+ }
+ return type.name().toString().equals( "java.lang.Boolean" );
+ }
+
+ @SuppressWarnings("unchecked")
+ public static JandexValueConverter buildValueHandlersReturnConverter(
+ ValueTypeDescriptor valueTypeDescriptor,
+ BiConsumer,JandexValueConverter> converterCollector,
+ BiConsumer, JandexValueExtractor> extractorCollector,
+ SourceModelBuildingContext buildingContext) {
+ if ( valueTypeDescriptor.getValueType().isArray() ) {
+ final ValueTypeDescriptor> elementTypeDescriptor = ( (ArrayTypeDescriptor>) valueTypeDescriptor ).getElementTypeDescriptor();
+ final ArrayValueConverter> valueConverter = new ArrayValueConverter<>( elementTypeDescriptor );
+ final ArrayValueExtractor> valueExtractor = new ArrayValueExtractor<>( valueConverter );
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) valueConverter );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) valueExtractor );
+ return (JandexValueConverter) valueConverter;
+ }
+
+ if ( isBoolean( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) BooleanValueConverter.JANDEX_BOOLEAN_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) BooleanValueExtractor.JANDEX_BOOLEAN_EXTRACTOR );
+ return (JandexValueConverter) BooleanValueConverter.JANDEX_BOOLEAN_VALUE_WRAPPER;
+ }
+
+ if ( isByte( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) ByteValueConverter.JANDEX_BYTE_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) ByteValueExtractor.JANDEX_BYTE_EXTRACTOR );
+ return (JandexValueConverter) ByteValueConverter.JANDEX_BYTE_VALUE_WRAPPER;
+ }
+
+ if ( isChar( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) CharacterValueConverter.JANDEX_CHARACTER_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) CharacterValueExtractor.JANDEX_CHARACTER_EXTRACTOR );
+ return (JandexValueConverter) CharacterValueConverter.JANDEX_CHARACTER_VALUE_WRAPPER;
+ }
+
+ if ( isDouble( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) DoubleValueConverter.JANDEX_DOUBLE_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) DoubleValueExtractor.JANDEX_DOUBLE_EXTRACTOR );
+ return (JandexValueConverter) DoubleValueConverter.JANDEX_DOUBLE_VALUE_WRAPPER;
+ }
+
+ if ( isFloat( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) FloatValueConverter.JANDEX_FLOAT_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) FloatValueExtractor.JANDEX_FLOAT_EXTRACTOR );
+ return (JandexValueConverter) FloatValueConverter.JANDEX_FLOAT_VALUE_WRAPPER;
+ }
+
+ if ( isInt( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) IntegerValueConverter.JANDEX_INTEGER_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) IntegerValueExtractor.JANDEX_INTEGER_EXTRACTOR );
+ return (JandexValueConverter) IntegerValueConverter.JANDEX_INTEGER_VALUE_WRAPPER;
+ }
+
+ if ( isLong( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) LongValueConverter.JANDEX_LONG_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) LongValueExtractor.JANDEX_LONG_EXTRACTOR );
+ return (JandexValueConverter) LongValueConverter.JANDEX_LONG_VALUE_WRAPPER;
+ }
+
+ if ( isShort( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) ShortValueConverter.JANDEX_SHORT_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) ShortValueExtractor.JANDEX_SHORT_EXTRACTOR );
+ return (JandexValueConverter) ShortValueConverter.JANDEX_SHORT_VALUE_WRAPPER;
+ }
+
+ if ( valueTypeDescriptor.getValueType() == String.class ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) StringValueConverter.JANDEX_STRING_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) StringValueExtractor.JANDEX_STRING_EXTRACTOR );
+ return (JandexValueConverter) StringValueConverter.JANDEX_STRING_VALUE_WRAPPER;
+ }
+
+ if ( valueTypeDescriptor.getValueType().isAnnotation() ) {
+ final AnnotationDescriptor extends Annotation> annotationDescriptor = buildingContext.getAnnotationDescriptorRegistry()
+ .getDescriptor( (Class extends Annotation>) valueTypeDescriptor.getValueType() );
+ final JandexNestedValueConverter extends Annotation> jandexNestedValueConverter = new JandexNestedValueConverter<>( annotationDescriptor );
+ final JandexNestedValueExtractor extends Annotation> jandexNestedValueExtractor = new JandexNestedValueExtractor<>( jandexNestedValueConverter );
+
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) jandexNestedValueConverter );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) jandexNestedValueExtractor );
+ return (JandexValueConverter) jandexNestedValueConverter;
+ }
+
+ if ( valueTypeDescriptor.getValueType().isEnum() ) {
+ //noinspection rawtypes
+ final EnumValueConverter extends Enum> converter = new EnumValueConverter( valueTypeDescriptor.getValueType() );
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) converter );
+ //noinspection rawtypes
+ extractorCollector.accept( valueTypeDescriptor, new EnumValueExtractor( converter ) );
+ return (JandexValueConverter) converter;
+ }
+
+ if ( valueTypeDescriptor.getValueType() == Class.class ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) ClassValueConverter.JANDEX_CLASS_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) ClassValueExtractor.JANDEX_CLASS_EXTRACTOR );
+ return (JandexValueConverter) ClassValueConverter.JANDEX_CLASS_VALUE_WRAPPER;
+ }
+
+ throw new UnsupportedOperationException( "Unhandled value type : " + valueTypeDescriptor );
+ }
+
+ @SuppressWarnings("unchecked")
+ public static JandexValueExtractor buildValueHandlersReturnExtractor(
+ ValueTypeDescriptor valueTypeDescriptor,
+ BiConsumer,JandexValueConverter> converterCollector,
+ BiConsumer,JandexValueExtractor> extractorCollector,
+ SourceModelBuildingContext buildingContext) {
+ if ( valueTypeDescriptor.getValueType().isArray() ) {
+ final ValueTypeDescriptor> elementTypeDescriptor = ( (ArrayTypeDescriptor>) valueTypeDescriptor ).getElementTypeDescriptor();
+ final ArrayValueConverter> valueConverter = new ArrayValueConverter<>( elementTypeDescriptor );
+ final ArrayValueExtractor> valueExtractor = new ArrayValueExtractor<>( valueConverter );
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) valueConverter );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) valueExtractor );
+ return (JandexValueExtractor) valueExtractor;
+ }
+
+ if ( isBoolean( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) BooleanValueConverter.JANDEX_BOOLEAN_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) BooleanValueExtractor.JANDEX_BOOLEAN_EXTRACTOR );
+ return (JandexValueExtractor) BooleanValueExtractor.JANDEX_BOOLEAN_EXTRACTOR;
+ }
+
+ if ( isByte( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) ByteValueConverter.JANDEX_BYTE_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) ByteValueExtractor.JANDEX_BYTE_EXTRACTOR );
+ return (JandexValueExtractor) ByteValueExtractor.JANDEX_BYTE_EXTRACTOR;
+ }
+
+ if ( isChar( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) CharacterValueConverter.JANDEX_CHARACTER_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) CharacterValueExtractor.JANDEX_CHARACTER_EXTRACTOR );
+ return (JandexValueExtractor) CharacterValueExtractor.JANDEX_CHARACTER_EXTRACTOR;
+ }
+
+ if ( isDouble( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) DoubleValueConverter.JANDEX_DOUBLE_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) DoubleValueExtractor.JANDEX_DOUBLE_EXTRACTOR );
+ return (JandexValueExtractor) DoubleValueConverter.JANDEX_DOUBLE_VALUE_WRAPPER;
+ }
+
+ if ( isFloat( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) FloatValueConverter.JANDEX_FLOAT_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) FloatValueExtractor.JANDEX_FLOAT_EXTRACTOR );
+ return (JandexValueExtractor) FloatValueExtractor.JANDEX_FLOAT_EXTRACTOR;
+ }
+
+ if ( isInt( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) IntegerValueConverter.JANDEX_INTEGER_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) IntegerValueExtractor.JANDEX_INTEGER_EXTRACTOR );
+ return (JandexValueExtractor) IntegerValueExtractor.JANDEX_INTEGER_EXTRACTOR;
+ }
+
+ if ( isLong( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) LongValueConverter.JANDEX_LONG_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) LongValueExtractor.JANDEX_LONG_EXTRACTOR );
+ return (JandexValueExtractor) LongValueExtractor.JANDEX_LONG_EXTRACTOR;
+ }
+
+ if ( isShort( valueTypeDescriptor ) ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) ShortValueConverter.JANDEX_SHORT_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) ShortValueExtractor.JANDEX_SHORT_EXTRACTOR );
+ return (JandexValueExtractor) ShortValueExtractor.JANDEX_SHORT_EXTRACTOR;
+ }
+
+ if ( valueTypeDescriptor.getValueType() == String.class ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) StringValueConverter.JANDEX_STRING_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) StringValueExtractor.JANDEX_STRING_EXTRACTOR );
+ return (JandexValueExtractor) StringValueExtractor.JANDEX_STRING_EXTRACTOR;
+ }
+
+ if ( valueTypeDescriptor.getValueType().isAnnotation() ) {
+ final AnnotationDescriptor extends Annotation> annotationDescriptor = buildingContext.getAnnotationDescriptorRegistry()
+ .getDescriptor( (Class extends Annotation>) valueTypeDescriptor.getValueType() );
+ final JandexNestedValueConverter extends Annotation> jandexNestedValueConverter = new JandexNestedValueConverter<>( annotationDescriptor );
+ final JandexNestedValueExtractor extends Annotation> jandexNestedValueExtractor = new JandexNestedValueExtractor<>( jandexNestedValueConverter );
+
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) jandexNestedValueConverter );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) jandexNestedValueExtractor );
+ return (JandexValueExtractor) jandexNestedValueExtractor;
+ }
+
+ if ( valueTypeDescriptor.getValueType().isEnum() ) {
+ //noinspection rawtypes
+ final EnumValueConverter extends Enum> converter = new EnumValueConverter( valueTypeDescriptor.getValueType() );
+ //noinspection rawtypes
+ final EnumValueExtractor extractor = new EnumValueExtractor( converter );
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) converter );
+ extractorCollector.accept( valueTypeDescriptor, extractor );
+ return (JandexValueExtractor) extractor;
+ }
+
+ if ( valueTypeDescriptor.getValueType() == Class.class ) {
+ converterCollector.accept( valueTypeDescriptor, (JandexValueConverter) ClassValueConverter.JANDEX_CLASS_VALUE_WRAPPER );
+ extractorCollector.accept( valueTypeDescriptor, (JandexValueExtractor) ClassValueExtractor.JANDEX_CLASS_EXTRACTOR );
+ return (JandexValueExtractor) ClassValueExtractor.JANDEX_CLASS_EXTRACTOR;
+ }
+
+ throw new UnsupportedOperationException( "Unhandled value type : " + valueTypeDescriptor );
+ }
+
+ private static boolean isBoolean(ValueTypeDescriptor valueTypeDescriptor) {
+ return valueTypeDescriptor.getValueType() == boolean.class
+ || valueTypeDescriptor.getValueType() == Boolean.class;
+ }
+
+ private static boolean isByte(ValueTypeDescriptor valueTypeDescriptor) {
+ return valueTypeDescriptor.getValueType() == byte.class
+ || valueTypeDescriptor.getValueType() == Byte.class;
+ }
+
+ private static boolean isChar(ValueTypeDescriptor valueTypeDescriptor) {
+ return valueTypeDescriptor.getValueType() == char.class
+ || valueTypeDescriptor.getValueType() == Character.class;
+ }
+
+ private static boolean isDouble(ValueTypeDescriptor valueTypeDescriptor) {
+ return valueTypeDescriptor.getValueType() == double.class
+ || valueTypeDescriptor.getValueType() == Double.class;
+ }
+
+ private static boolean isFloat(ValueTypeDescriptor valueTypeDescriptor) {
+ return valueTypeDescriptor.getValueType() == float.class
+ || valueTypeDescriptor.getValueType() == Float.class;
+ }
+
+ private static boolean isShort(ValueTypeDescriptor valueTypeDescriptor) {
+ return valueTypeDescriptor.getValueType() == short.class
+ || valueTypeDescriptor.getValueType() == Short.class;
+ }
+
+ private static boolean isInt(ValueTypeDescriptor valueTypeDescriptor) {
+ return valueTypeDescriptor.getValueType() == int.class
+ || valueTypeDescriptor.getValueType() == Integer.class;
+ }
+
+ private static boolean isLong(ValueTypeDescriptor valueTypeDescriptor) {
+ return valueTypeDescriptor.getValueType() == long.class
+ || valueTypeDescriptor.getValueType() == Long.class;
+ }
+}
diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexClassDetails.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetails.java
similarity index 88%
rename from src/main/java/org/hibernate/models/internal/jandex/JandexClassDetails.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetails.java
index 74efd5a..4ea95d9 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/JandexClassDetails.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetails.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
@@ -30,7 +30,6 @@
import static java.util.Collections.emptyList;
import static org.hibernate.models.internal.ModelsClassLogging.MODELS_CLASS_LOGGER;
-import static org.hibernate.models.internal.jandex.JandexTypeSwitchStandard.switchType;
import static org.hibernate.models.internal.util.CollectionHelper.arrayList;
import static org.hibernate.models.internal.util.CollectionHelper.isEmpty;
@@ -42,7 +41,7 @@ public class JandexClassDetails extends AbstractAnnotationTarget implements Clas
private final ClassDetails superClass;
private TypeDetails genericSuperType;
- private final List implementedInterfaces;
+ private List implementedInterfaces;
private List typeParameters;
private List fields;
@@ -54,59 +53,6 @@ public JandexClassDetails(ClassInfo classInfo, SourceModelBuildingContext modelC
this.classInfo = classInfo;
this.superClass = determineSuperType( classInfo, modelContext );
- this.implementedInterfaces = determineInterfaces( classInfo, modelContext );
- }
-
- private static ClassDetails determineSuperType(
- ClassInfo classInfo,
- SourceModelBuildingContext buildingContext) {
- if ( classInfo.superClassType() == null ) {
- return null;
- }
-
- return buildingContext
- .getClassDetailsRegistry()
- .resolveClassDetails( classInfo.superClassType().name().toString() );
- }
-
- private TypeDetails determineGenericSuperType(ClassInfo classInfo, SourceModelBuildingContext buildingContext) {
- if ( classInfo.superClassType() == null ) {
- return null;
- }
-
- return switchType( classInfo.superClassType(), buildingContext );
- }
-
- private static List determineInterfaces(
- ClassInfo classInfo,
- SourceModelBuildingContext buildingContext) {
- final List interfaceTypes = classInfo.interfaceTypes();
- if ( isEmpty( interfaceTypes ) ) {
- return emptyList();
- }
-
- final List result = arrayList( interfaceTypes.size() );
- for ( Type interfaceType : interfaceTypes ) {
- final TypeDetails switchedType = switchType(
- interfaceType,
- buildingContext
- );
- result.add( switchedType );
- }
- return result;
- }
-
- private List determineTypeParameters(ClassInfo classInfo, SourceModelBuildingContext buildingContext) {
- final List jandexTypeVariables = classInfo.typeParameters();
- if ( CollectionHelper.isEmpty( jandexTypeVariables ) ) {
- return emptyList();
- }
-
- final ArrayList result = arrayList( jandexTypeVariables.size() );
- for ( TypeVariable jandexTypeVariable : jandexTypeVariables ) {
- result.add( (TypeVariableDetails) switchType( jandexTypeVariable, this, buildingContext ) );
- }
- return result;
}
@Override
@@ -164,13 +110,16 @@ public TypeDetails getGenericSuperType() {
@Override
public List getImplementedInterfaces() {
+ if ( implementedInterfaces == null ) {
+ implementedInterfaces = determineInterfaces( classInfo, getModelContext() );
+ }
return implementedInterfaces;
}
@Override
public List getTypeParameters() {
if ( typeParameters == null ) {
- this.typeParameters = determineTypeParameters( classInfo, getModelContext() );
+ this.typeParameters = determineTypeParameters( classInfo, this, getModelContext() );
}
return typeParameters;
}
@@ -185,7 +134,7 @@ public boolean isImplementor(Class> checkType) {
return true;
}
- for ( TypeDetails intf : implementedInterfaces ) {
+ for ( TypeDetails intf : getImplementedInterfaces() ) {
if ( intf.isImplementor( checkType ) ) {
return true;
}
@@ -277,4 +226,56 @@ public Class toJavaClass() {
public String toString() {
return "JandexClassDetails(" + classInfo.name().toString() + ")";
}
+
+ private static ClassDetails determineSuperType(
+ ClassInfo classInfo,
+ SourceModelBuildingContext buildingContext) {
+ if ( classInfo.superClassType() == null ) {
+ return null;
+ }
+
+ return buildingContext
+ .getClassDetailsRegistry()
+ .resolveClassDetails( classInfo.superClassType().name().toString() );
+ }
+
+ private static TypeDetails determineGenericSuperType(ClassInfo classInfo, SourceModelBuildingContext buildingContext) {
+ if ( classInfo.superClassType() == null ) {
+ return null;
+ }
+
+ return JandexTypeSwitchStandard.switchType( classInfo.superClassType(), buildingContext );
+ }
+
+ private static List determineInterfaces(
+ ClassInfo classInfo,
+ SourceModelBuildingContext buildingContext) {
+ final List interfaceTypes = classInfo.interfaceTypes();
+ if ( isEmpty( interfaceTypes ) ) {
+ return emptyList();
+ }
+
+ final List result = arrayList( interfaceTypes.size() );
+ for ( Type interfaceType : interfaceTypes ) {
+ final TypeDetails switchedType = JandexTypeSwitchStandard.switchType(
+ interfaceType,
+ buildingContext
+ );
+ result.add( switchedType );
+ }
+ return result;
+ }
+
+ private static List determineTypeParameters(ClassInfo classInfo, JandexClassDetails current, SourceModelBuildingContext buildingContext) {
+ final List jandexTypeVariables = classInfo.typeParameters();
+ if ( CollectionHelper.isEmpty( jandexTypeVariables ) ) {
+ return emptyList();
+ }
+
+ final ArrayList result = arrayList( jandexTypeVariables.size() );
+ for ( TypeVariable jandexTypeVariable : jandexTypeVariables ) {
+ result.add( (TypeVariableDetails) JandexTypeSwitchStandard.switchType( jandexTypeVariable, current, buildingContext ) );
+ }
+ return result;
+ }
}
diff --git a/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetailsBuilderImpl.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetailsBuilderImpl.java
new file mode 100644
index 0000000..2086334
--- /dev/null
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetailsBuilderImpl.java
@@ -0,0 +1,30 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * Copyright: Red Hat Inc. and Hibernate Authors
+ */
+
+package org.hibernate.models.jandex.internal;
+
+import org.hibernate.models.spi.ClassDetails;
+import org.hibernate.models.spi.ClassDetailsBuilder;
+import org.hibernate.models.spi.SourceModelBuildingContext;
+
+import org.jboss.jandex.IndexView;
+
+/**
+ * @author Steve Ebersole
+ */
+public class JandexClassDetailsBuilderImpl implements ClassDetailsBuilder {
+ private final IndexView jandexIndex;
+
+ public JandexClassDetailsBuilderImpl(IndexView jandexIndex, SourceModelBuildingContext buildingContext) {
+ this.jandexIndex = jandexIndex;
+ }
+
+ @Override
+ public ClassDetails buildClassDetails(String name, SourceModelBuildingContext buildingContext) {
+ return JandexBuilders.buildDetailsFromIndex( name, jandexIndex, buildingContext );
+ }
+}
diff --git a/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetailsRegistry.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetailsRegistry.java
new file mode 100644
index 0000000..9f43baf
--- /dev/null
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetailsRegistry.java
@@ -0,0 +1,56 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * Copyright: Red Hat Inc. and Hibernate Authors
+ */
+
+package org.hibernate.models.jandex.internal;
+
+import org.hibernate.models.UnknownClassException;
+import org.hibernate.models.internal.AbstractClassDetailsRegistry;
+import org.hibernate.models.internal.jdk.JdkBuilders;
+import org.hibernate.models.internal.jdk.JdkClassDetails;
+import org.hibernate.models.spi.ClassDetails;
+import org.hibernate.models.spi.ClassDetailsBuilder;
+import org.hibernate.models.spi.SourceModelBuildingContext;
+
+import org.jboss.jandex.IndexView;
+
+/**
+ * ClassDetailsRegistry using Jandex
+ *
+ * @author Steve Ebersole
+ */
+public class JandexClassDetailsRegistry extends AbstractClassDetailsRegistry {
+ private final IndexView jandexIndex;
+ private final ClassDetailsBuilder classDetailsBuilder;
+
+ public JandexClassDetailsRegistry(IndexView jandexIndex, SourceModelBuildingContext context) {
+ super( context );
+ this.jandexIndex = jandexIndex;
+ this.classDetailsBuilder = new JandexClassDetailsBuilderImpl( jandexIndex, context );
+ }
+
+ @Override
+ protected ClassDetailsBuilder getClassDetailsBuilder() {
+ return classDetailsBuilder;
+ }
+
+ @Override
+ protected ClassDetails createClassDetails(String name) {
+ final ClassDetails fromJandex = classDetailsBuilder.buildClassDetails( name, context );
+ if ( fromJandex != null ) {
+ addClassDetails( name, fromJandex );
+ return fromJandex;
+ }
+
+ final JdkClassDetails jdkClassDetails = JdkBuilders.DEFAULT_BUILDER.buildClassDetails( name, context );
+ if ( jdkClassDetails != null ) {
+ addClassDetails( name, jdkClassDetails );
+ return jdkClassDetails;
+ }
+
+ throw new UnknownClassException( "Unable to resolve ClassDetails for `" + name + "`" );
+ }
+}
diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexFieldDetails.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexFieldDetails.java
similarity index 94%
rename from src/main/java/org/hibernate/models/internal/jandex/JandexFieldDetails.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexFieldDetails.java
index 3236960..ff02266 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/JandexFieldDetails.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexFieldDetails.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
@@ -28,8 +28,6 @@
import org.jboss.jandex.FieldInfo;
import org.jboss.jandex.Type;
-import static org.hibernate.models.internal.jandex.JandexTypeSwitchStandard.switchType;
-
/**
* @author Steve Ebersole
*/
@@ -49,7 +47,7 @@ public JandexFieldDetails(
super( buildingContext );
this.fieldInfo = fieldInfo;
this.declaringType = declaringType;
- this.type = switchType( fieldInfo.type(), declaringType, buildingContext );
+ this.type = JandexTypeSwitchStandard.switchType( fieldInfo.type(), declaringType, buildingContext );
this.isArray = fieldInfo.type().kind() == Type.Kind.ARRAY;
this.isPlural = isArray || type.isImplementor( Collection.class ) || type.isImplementor( Map.class );
diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexIndexerHelper.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexIndexerHelper.java
similarity index 97%
rename from src/main/java/org/hibernate/models/internal/jandex/JandexIndexerHelper.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexIndexerHelper.java
index 4d8ea89..195eeff 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/JandexIndexerHelper.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexIndexerHelper.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.io.IOException;
import java.io.InputStream;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexMethodDetails.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexMethodDetails.java
similarity index 99%
rename from src/main/java/org/hibernate/models/internal/jandex/JandexMethodDetails.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexMethodDetails.java
index 2d10ac6..4175c69 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/JandexMethodDetails.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexMethodDetails.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
diff --git a/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexModelBuildingContextImpl.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexModelBuildingContextImpl.java
new file mode 100644
index 0000000..a84ac8a
--- /dev/null
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexModelBuildingContextImpl.java
@@ -0,0 +1,102 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * Copyright: Red Hat Inc. and Hibernate Authors
+ */
+
+package org.hibernate.models.jandex.internal;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.hibernate.models.internal.AbstractModelBuildingContext;
+import org.hibernate.models.internal.MutableAnnotationDescriptorRegistry;
+import org.hibernate.models.internal.MutableClassDetailsRegistry;
+import org.hibernate.models.jandex.spi.JandexModelBuildingContext;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
+import org.hibernate.models.jandex.spi.JandexValueExtractor;
+import org.hibernate.models.spi.ClassLoading;
+import org.hibernate.models.spi.RegistryPrimer;
+import org.hibernate.models.spi.ValueTypeDescriptor;
+
+import org.jboss.jandex.IndexView;
+
+import static org.hibernate.models.internal.ModelsClassLogging.MODELS_CLASS_LOGGER;
+
+/**
+ * @author Steve Ebersole
+ */
+public class JandexModelBuildingContextImpl extends AbstractModelBuildingContext implements JandexModelBuildingContext {
+ private final IndexView jandexIndex;
+
+ private final JandexAnnotationDescriptorRegistry descriptorRegistry;
+ private final JandexClassDetailsRegistry classDetailsRegistry;
+
+ private final Map valueConverters = new HashMap<>();
+ private final Map valueExtractors = new HashMap<>();
+
+ public JandexModelBuildingContextImpl(
+ IndexView jandexIndex,
+ ClassLoading classLoading,
+ RegistryPrimer registryPrimer) {
+ super( classLoading );
+
+ assert jandexIndex != null;
+ this.jandexIndex = jandexIndex;
+
+ MODELS_CLASS_LOGGER.debugf( "Using Jandex support" );
+
+ this.descriptorRegistry = new JandexAnnotationDescriptorRegistry( this );
+ this.classDetailsRegistry = new JandexClassDetailsRegistry( jandexIndex, this );
+
+ primeRegistries( registryPrimer );
+ }
+
+ @Override
+ public MutableAnnotationDescriptorRegistry getAnnotationDescriptorRegistry() {
+ return descriptorRegistry;
+ }
+
+ @Override
+ public MutableClassDetailsRegistry getClassDetailsRegistry() {
+ return classDetailsRegistry;
+ }
+
+ @Override
+ public IndexView getJandexIndex() {
+ return jandexIndex;
+ }
+
+ @Override
+ public JandexValueConverter getJandexValueConverter(ValueTypeDescriptor valueTypeDescriptor) {
+ //noinspection unchecked
+ final JandexValueConverter existing = valueConverters.get( valueTypeDescriptor );
+ if ( existing != null ) {
+ return existing;
+ }
+
+ return JandexBuilders.buildValueHandlersReturnConverter(
+ valueTypeDescriptor,
+ valueConverters::put,
+ valueExtractors::put,
+ this
+ );
+ }
+
+ @Override
+ public JandexValueExtractor getJandexValueExtractor(ValueTypeDescriptor valueTypeDescriptor) {
+ //noinspection unchecked
+ final JandexValueExtractor existing = valueExtractors.get( valueTypeDescriptor );
+ if ( existing != null ) {
+ return existing;
+ }
+
+ return JandexBuilders.buildValueHandlersReturnExtractor(
+ valueTypeDescriptor,
+ valueConverters::put,
+ valueExtractors::put,
+ this
+ );
+ }
+}
diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexNestedValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexNestedValueConverter.java
similarity index 90%
rename from src/main/java/org/hibernate/models/internal/jandex/JandexNestedValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexNestedValueConverter.java
index 2110625..1a2e923 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/JandexNestedValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexNestedValueConverter.java
@@ -4,13 +4,13 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.lang.annotation.Annotation;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.AnnotationDescriptor;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexNestedValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexNestedValueExtractor.java
similarity index 94%
rename from src/main/java/org/hibernate/models/internal/jandex/JandexNestedValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexNestedValueExtractor.java
index df9dc47..31c3176 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/JandexNestedValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexNestedValueExtractor.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.lang.annotation.Annotation;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexRecordComponentDetails.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexRecordComponentDetails.java
similarity index 93%
rename from src/main/java/org/hibernate/models/internal/jandex/JandexRecordComponentDetails.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexRecordComponentDetails.java
index cc55e02..13b1956 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/JandexRecordComponentDetails.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexRecordComponentDetails.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.lang.annotation.Annotation;
import java.lang.reflect.Member;
@@ -13,11 +13,11 @@
import org.hibernate.models.IllegalCastException;
import org.hibernate.models.spi.AnnotationDescriptor;
+import org.hibernate.models.spi.ClassDetails;
import org.hibernate.models.spi.FieldDetails;
import org.hibernate.models.spi.MethodDetails;
import org.hibernate.models.spi.MutableClassDetails;
import org.hibernate.models.spi.MutableMemberDetails;
-import org.hibernate.models.spi.ClassDetails;
import org.hibernate.models.spi.RecordComponentDetails;
import org.hibernate.models.spi.SourceModelBuildingContext;
import org.hibernate.models.spi.TypeDetails;
@@ -26,8 +26,6 @@
import org.jboss.jandex.RecordComponentInfo;
import org.jboss.jandex.Type;
-import static org.hibernate.models.internal.jandex.JandexTypeSwitchStandard.switchType;
-
/**
* @author Steve Ebersole
*/
@@ -46,7 +44,7 @@ public JandexRecordComponentDetails(
super( buildingContext );
this.recordComponentInfo = recordComponentInfo;
this.declaringType = declaringType;
- this.type = switchType( recordComponentInfo.type(), declaringType, buildingContext );
+ this.type = JandexTypeSwitchStandard.switchType( recordComponentInfo.type(), declaringType, buildingContext );
this.isArray = recordComponentInfo.type().kind() == Type.Kind.ARRAY;
this.isPlural = isArray || type.isImplementor( Collection.class ) || type.isImplementor( Map.class );
diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexTypeSwitchStandard.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexTypeSwitchStandard.java
similarity index 98%
rename from src/main/java/org/hibernate/models/internal/jandex/JandexTypeSwitchStandard.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexTypeSwitchStandard.java
index c197655..e636e59 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/JandexTypeSwitchStandard.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexTypeSwitchStandard.java
@@ -5,7 +5,7 @@
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -21,6 +21,7 @@
import org.hibernate.models.internal.VoidTypeDetailsImpl;
import org.hibernate.models.internal.WildcardTypeDetailsImpl;
import org.hibernate.models.internal.util.CollectionHelper;
+import org.hibernate.models.jandex.spi.JandexTypeSwitch;
import org.hibernate.models.spi.ClassDetails;
import org.hibernate.models.spi.SourceModelBuildingContext;
import org.hibernate.models.spi.TypeDetails;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexTypeSwitcher.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexTypeSwitcher.java
similarity index 93%
rename from src/main/java/org/hibernate/models/internal/jandex/JandexTypeSwitcher.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexTypeSwitcher.java
index 76bdaaa..ef73b09 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/JandexTypeSwitcher.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexTypeSwitcher.java
@@ -5,8 +5,9 @@
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexTypeSwitch;
import org.hibernate.models.spi.SourceModelBuildingContext;
import org.jboss.jandex.Type;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexValueHelper.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexValueHelper.java
similarity index 82%
rename from src/main/java/org/hibernate/models/internal/jandex/JandexValueHelper.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexValueHelper.java
index 9210a26..441a55b 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/JandexValueHelper.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexValueHelper.java
@@ -5,10 +5,11 @@
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import java.lang.annotation.Annotation;
+import org.hibernate.models.jandex.spi.JandexModelBuildingContext;
import org.hibernate.models.spi.AnnotationDescriptor;
import org.hibernate.models.spi.AttributeDescriptor;
import org.hibernate.models.spi.SourceModelBuildingContext;
@@ -33,9 +34,8 @@ public static V extractValue(
AnnotationInstance usage,
AttributeDescriptor attributeDescriptor,
SourceModelBuildingContext modelContext) {
- return attributeDescriptor
- .getTypeDescriptor()
- .createJandexValueExtractor( modelContext )
+ return modelContext.as( JandexModelBuildingContext.class )
+ .getJandexValueExtractor( attributeDescriptor.getTypeDescriptor() )
.extractValue( usage, attributeDescriptor, modelContext );
// final AnnotationValue value = usage.value( attributeDescriptor.getName() );
// if ( value == null ) {
@@ -66,6 +66,9 @@ public static V extractOptionalValue(
//noinspection unchecked
return (V) attributeDescriptor.getAttributeMethod().getDefaultValue();
}
- return attributeDescriptor.getTypeDescriptor().createJandexValueConverter( modelContext ).convert( value, modelContext );
+
+ return modelContext.as( JandexModelBuildingContext.class )
+ .getJandexValueExtractor( attributeDescriptor.getTypeDescriptor() )
+ .extractValue( usage, attributeDescriptor, modelContext );
}
}
diff --git a/src/main/java/org/hibernate/models/internal/jandex/LongValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/LongValueConverter.java
similarity index 86%
rename from src/main/java/org/hibernate/models/internal/jandex/LongValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/LongValueConverter.java
index 1300261..c9d5b9b 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/LongValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/LongValueConverter.java
@@ -4,10 +4,10 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/LongValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/LongValueExtractor.java
similarity index 93%
rename from src/main/java/org/hibernate/models/internal/jandex/LongValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/LongValueExtractor.java
index 32cae3e..b514d57 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/LongValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/LongValueExtractor.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import org.hibernate.models.spi.SourceModelBuildingContext;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/ShortValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ShortValueConverter.java
similarity index 86%
rename from src/main/java/org/hibernate/models/internal/jandex/ShortValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ShortValueConverter.java
index c29e32b..ae71c65 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/ShortValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ShortValueConverter.java
@@ -4,10 +4,10 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/ShortValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ShortValueExtractor.java
similarity index 93%
rename from src/main/java/org/hibernate/models/internal/jandex/ShortValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ShortValueExtractor.java
index 7cefe00..4a2e31e 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/ShortValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/ShortValueExtractor.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import org.hibernate.models.spi.SourceModelBuildingContext;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/StringValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/StringValueConverter.java
similarity index 86%
rename from src/main/java/org/hibernate/models/internal/jandex/StringValueConverter.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/StringValueConverter.java
index 6201072..82505f0 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/StringValueConverter.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/StringValueConverter.java
@@ -4,10 +4,10 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
+import org.hibernate.models.jandex.spi.JandexValueConverter;
import org.hibernate.models.spi.SourceModelBuildingContext;
-import org.hibernate.models.spi.JandexValueConverter;
import org.jboss.jandex.AnnotationValue;
diff --git a/src/main/java/org/hibernate/models/internal/jandex/StringValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/StringValueExtractor.java
similarity index 93%
rename from src/main/java/org/hibernate/models/internal/jandex/StringValueExtractor.java
rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/StringValueExtractor.java
index cb9303f..d98cb60 100644
--- a/src/main/java/org/hibernate/models/internal/jandex/StringValueExtractor.java
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/StringValueExtractor.java
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
-package org.hibernate.models.internal.jandex;
+package org.hibernate.models.jandex.internal;
import org.hibernate.models.spi.SourceModelBuildingContext;
diff --git a/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexAnnotationDescriptor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexAnnotationDescriptor.java
new file mode 100644
index 0000000..9682b9d
--- /dev/null
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexAnnotationDescriptor.java
@@ -0,0 +1,24 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * Copyright: Red Hat Inc. and Hibernate Authors
+ */
+
+package org.hibernate.models.jandex.spi;
+
+import java.lang.annotation.Annotation;
+
+import org.hibernate.models.spi.AnnotationDescriptor;
+
+import org.jboss.jandex.AnnotationInstance;
+
+/**
+ * @author Steve Ebersole
+ */
+public interface JandexAnnotationDescriptor extends AnnotationDescriptor {
+ /**
+ * Create a usage from the Jandex representation.
+ */
+ A createUsage(AnnotationInstance jandexAnnotation, JandexModelBuildingContext context);
+}
diff --git a/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexBuildingContextProvider.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexBuildingContextProvider.java
new file mode 100644
index 0000000..bc0e6bd
--- /dev/null
+++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexBuildingContextProvider.java
@@ -0,0 +1,47 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * Copyright: Red Hat Inc. and Hibernate Authors
+ */
+
+package org.hibernate.models.jandex.spi;
+
+import java.util.Map;
+
+import org.hibernate.models.internal.BasicModelBuildingContextImpl;
+import org.hibernate.models.spi.ClassLoading;
+import org.hibernate.models.spi.RegistryPrimer;
+import org.hibernate.models.spi.SourceModelBuildingContext;
+import org.hibernate.models.spi.SourceModelBuildingContextProvider;
+
+import org.jboss.jandex.IndexView;
+
+import org.hibernate.models.jandex.internal.JandexModelBuildingContextImpl;
+
+/**
+ * @author Steve Ebersole
+ */
+public class JandexBuildingContextProvider implements SourceModelBuildingContextProvider {
+ public static final String INDEX_PARAM = "hibernate.models.jandex.index";
+
+ @Override
+ public SourceModelBuildingContext produceContext(
+ ClassLoading classLoading,
+ RegistryPrimer registryPrimer,
+ Map