From eec7336ff21fa11994ef1272d0cbce1102ec1e5e Mon Sep 17 00:00:00 2001 From: Steve Ebersole Date: Thu, 15 Aug 2024 16:32:57 -0500 Subject: [PATCH] #91 - Consider multi-project / multi-jar set up for hibernate-models #85 - Consider ways to make Jandex not required at runtime --- README.adoc | 22 +- build.gradle | 123 +---- .../src/main/groovy/base-information.gradle | 2 +- buildSrc/src/main/groovy/java-module.gradle | 103 +++++ .../main/groovy/published-java-module.gradle | 8 + .../src/main/groovy/publishing-config.gradle | 23 +- hibernate-models-jandex/build.gradle | 13 + .../internal}/AbstractAnnotationTarget.java | 2 +- .../internal}/AbstractValueExtractor.java | 7 +- .../internal}/AnnotationUsageBuilder.java | 30 +- .../jandex/internal}/ArrayValueConverter.java | 7 +- .../jandex/internal}/ArrayValueExtractor.java | 4 +- .../internal}/BooleanValueConverter.java | 4 +- .../internal}/BooleanValueExtractor.java | 2 +- .../jandex/internal}/ByteValueConverter.java | 4 +- .../jandex/internal}/ByteValueExtractor.java | 2 +- .../internal}/CharacterValueConverter.java | 4 +- .../internal}/CharacterValueExtractor.java | 6 +- .../jandex/internal}/ClassValueConverter.java | 4 +- .../jandex/internal}/ClassValueExtractor.java | 2 +- .../internal}/DoubleValueConverter.java | 4 +- .../internal}/DoubleValueExtractor.java | 2 +- .../jandex/internal}/EnumValueConverter.java | 4 +- .../jandex/internal}/EnumValueExtractor.java | 2 +- .../jandex/internal}/FloatValueConverter.java | 4 +- .../jandex/internal}/FloatValueExtractor.java | 2 +- .../internal}/IntegerValueConverter.java | 4 +- .../internal}/IntegerValueExtractor.java | 2 +- .../JandexAnnotationDescriptorImpl.java | 43 ++ .../JandexAnnotationDescriptorRegistry.java | 30 ++ .../jandex/internal/JandexBuilders.java | 424 ++++++++++++++++++ .../jandex/internal}/JandexClassDetails.java | 117 ++--- .../JandexClassDetailsBuilderImpl.java | 30 ++ .../internal/JandexClassDetailsRegistry.java | 56 +++ .../jandex/internal}/JandexFieldDetails.java | 6 +- .../jandex/internal}/JandexIndexerHelper.java | 2 +- .../jandex/internal}/JandexMethodDetails.java | 2 +- .../JandexModelBuildingContextImpl.java | 102 +++++ .../internal}/JandexNestedValueConverter.java | 4 +- .../internal}/JandexNestedValueExtractor.java | 2 +- .../JandexRecordComponentDetails.java | 8 +- .../internal}/JandexTypeSwitchStandard.java | 3 +- .../jandex/internal}/JandexTypeSwitcher.java | 3 +- .../jandex/internal}/JandexValueHelper.java | 13 +- .../jandex/internal}/LongValueConverter.java | 4 +- .../jandex/internal}/LongValueExtractor.java | 2 +- .../jandex/internal}/ShortValueConverter.java | 4 +- .../jandex/internal}/ShortValueExtractor.java | 2 +- .../internal}/StringValueConverter.java | 4 +- .../internal}/StringValueExtractor.java | 2 +- .../spi/JandexAnnotationDescriptor.java | 24 + .../spi/JandexBuildingContextProvider.java | 47 ++ .../spi/JandexModelBuildingContext.java | 23 + .../models/jandex/spi}/JandexTypeSwitch.java | 2 +- .../jandex}/spi/JandexValueConverter.java | 4 +- .../jandex}/spi/JandexValueExtractor.java | 5 +- ...els.spi.SourceModelBuildingContextProvider | 7 + .../hibernate/models/MixedSourcesTests.java | 8 +- .../org/hibernate/models/PackageTests.java | 0 .../hibernate/models/RenderingSmokeTest.java | 10 +- .../models/SourceModelTestHelper.java | 59 ++- .../AnnotationReplacementTests.java | 5 +- .../annotations/AnnotationUsageTests.java | 23 +- .../annotations/AttributeAccessTests.java | 4 +- .../models/annotations/MapKeyTest.java | 4 +- .../annotations/RepeatableUsageTests.java | 14 +- .../annotations/TargetSafeCastingTests.java | 5 +- .../org/hibernate/models/classes/AnEnum.java | 0 .../hibernate/models/classes/BranchClass.java | 0 .../hibernate/models/classes/ClassMarker.java | 0 .../models/classes/ClassRegistryTests.java | 54 +-- .../hibernate/models/classes/Composable.java | 0 .../hibernate/models/classes/EnumTests.java | 4 +- .../models/classes/GenericsTests.java | 8 +- .../models/classes/InheritanceTests.java | 12 +- .../org/hibernate/models/classes/Intf.java | 0 .../hibernate/models/classes/LeafClass.java | 0 .../models/classes/MemberMarker.java | 0 .../models/classes/PrimitiveTypeTests.java | 6 +- .../hibernate/models/classes/RootClass.java | 0 .../models/classes/SubclassableMarker.java | 0 .../hibernate/models/classes/TrunkClass.java | 0 .../dynamic/DynamicAnnotationTests.java | 6 +- .../dynamic/SimpleDynamicModelTests.java | 13 +- .../models/dynamic/package-info.java | 0 .../models/generics/BaselineTests.java | 4 +- .../models/generics/CollectionTests.java | 12 +- .../InheritanceTypeVariableTests.java | 4 +- .../generics/NestedInheritanceTest.java | 4 +- .../NestedRecursiveInheritanceTest.java | 4 +- .../generics/RecursiveTypeVariableTests.java | 4 +- .../generics/SimpleTypeVariableTests.java | 4 +- .../hibernate/models/members/ArrayTests.java | 4 +- .../models/members/FieldDetailsTests.java | 4 +- .../models/members/MethodDetailsTests.java | 4 +- .../models/members/PluralMemberTests.java | 4 +- .../hibernate/models/members/RecordTests.java | 4 +- .../models/members/UnboundWildcardTests.java | 4 +- .../models/xml/MetadataCompleteTests.java | 4 +- .../hibernate/models/xml/SimpleEntity.java | 0 hibernate-models-testing/build.gradle | 11 + .../org/hibernate/models/MutableInteger.java | 4 +- .../org/hibernate/models}/SimpleEntity.java | 4 +- .../models/annotations/CustomAnnotation.java | 0 .../models/annotations/CustomAnnotations.java | 0 .../annotations/CustomMetaAnnotation.java | 0 .../models/annotations/EverythingBagel.java | 0 .../hibernate/models/annotations/Nested.java | 0 .../hibernate/models/annotations/Status.java | 0 .../hibernate/models/orm/BasicAnnotation.java | 11 +- .../models/orm/CacheableAnnotation.java | 9 +- .../models/orm/CheckConstraintAnnotation.java | 14 +- .../models/orm/ColumnAnnotation.java | 32 +- .../hibernate/models/orm/ColumnDetails.java | 0 .../models/orm/CommonTableDetails.java | 0 .../models/orm/DatabaseObjectDetails.java | 0 .../models/orm/EntityAnnotation.java | 9 +- .../models/orm/ForeignKeyAnnotation.java | 16 +- .../hibernate/models/orm/IdAnnotation.java | 5 +- .../hibernate/models/orm/IndexAnnotation.java | 16 +- .../hibernate/models/orm/JpaAnnotations.java | 0 .../java/org/hibernate/models/orm/Named.java | 0 .../orm/NamedNativeQueriesAnnotation.java | 7 +- .../orm/NamedNativeQueryAnnotation.java | 24 +- .../models/orm/NamedQueriesAnnotation.java | 7 +- .../models/orm/NamedQueryAnnotation.java | 11 +- .../models/orm/OrmAnnotationHelper.java | 0 .../models/orm/RepeatableContainer.java | 0 .../models/orm/SecondaryTableAnnotation.java | 26 +- .../models/orm/SecondaryTablesAnnotation.java | 7 +- .../orm/SequenceGeneratorAnnotation.java | 19 +- .../orm/SequenceGeneratorsAnnotation.java | 7 +- .../hibernate/models/orm/TableAnnotation.java | 23 +- .../models/orm/TransientAnnotation.java | 5 +- .../orm/UniqueConstraintAnnotation.java | 5 +- .../models/pkg/CustomAnnotation.java | 0 .../hibernate/models/pkg/package-info.java | 9 + hibernate-models/build.gradle | 5 + .../models/AnnotationAccessException.java | 0 .../models/IllegalCastException.java | 0 .../java/org/hibernate/models/Incubating.java | 0 .../java/org/hibernate/models/Internal.java | 0 .../org/hibernate/models/ModelsException.java | 0 .../models/UnhandledMethodException.java | 0 .../UnknownAnnotationAttributeException.java | 0 .../models/UnknownClassException.java | 0 .../AbstractAnnotationDescriptor.java | 0 .../AbstractAnnotationDescriptorRegistry.java | 0 .../internal/AbstractAnnotationTarget.java | 0 .../AbstractClassDetailsRegistry.java | 129 ++++++ .../AbstractModelBuildingContext.java | 72 +++ .../internal/AbstractTypeDescriptor.java | 0 .../AnnotationDescriptorBuilding.java | 0 .../AnnotationDescriptorRegistryStandard.java | 30 +- .../models/internal/AnnotationHelper.java | 0 .../models/internal/AnnotationProxy.java | 34 +- .../internal/AnnotationTargetSupport.java | 0 .../internal/AnnotationUsageHelper.java | 19 - .../models/internal/ArrayTypeDescriptor.java | 32 -- .../models/internal/ArrayTypeDetailsImpl.java | 0 .../internal/AttributeDescriptorImpl.java | 0 .../models/internal/BaseLineJavaTypes.java | 0 .../BasicModelBuildingContextImpl.java | 44 ++ .../internal/BooleanTypeDescriptor.java | 14 - .../models/internal/ByteTypeDescriptor.java | 14 - .../internal/CharacterTypeDescriptor.java | 14 - .../ClassDetailsRegistryStandard.java | 43 ++ .../models/internal/ClassDetailsSupport.java | 0 .../models/internal/ClassTypeDescriptor.java | 14 - .../models/internal/ClassTypeDetailsImpl.java | 0 .../internal/CollectionElementSwitch.java | 0 .../models/internal/DoubleTypeDescriptor.java | 14 - .../models/internal/EnumTypeDescriptor.java | 19 - .../models/internal/FloatTypeDescriptor.java | 14 - .../internal/IntegerTypeDescriptor.java | 14 - .../models/internal/IsResolvedTypeSwitch.java | 0 .../models/internal/LongTypeDescriptor.java | 14 - .../models/internal/MapKeySwitch.java | 0 .../models/internal/MapValueSwitch.java | 0 .../internal/ModelsAnnotationLogging.java | 0 .../models/internal/ModelsClassLogging.java | 0 .../models/internal/ModelsLogging.java | 0 .../models/internal/ModifierUtils.java | 0 .../MutableAnnotationDescriptorRegistry.java | 18 + .../internal/MutableClassDetailsRegistry.java | 27 ++ .../models/internal/NestedTypeDescriptor.java | 31 -- .../internal/OrmAnnotationDescriptor.java | 34 +- .../ParameterizedTypeDetailsImpl.java | 0 .../models/internal/PrimitiveKind.java | 0 .../internal/PrimitiveTypeDetailsImpl.java | 0 .../internal/RenderingCollectorImpl.java | 0 .../models/internal/ShortTypeDescriptor.java | 14 - .../models/internal/SimpleClassDetails.java | 2 +- .../models/internal/SimpleClassLoading.java | 16 + .../StandardAnnotationDescriptor.java | 11 - .../models/internal/StringTypeDescriptor.java | 14 - .../models/internal/TypeDescriptors.java | 0 .../models/internal/TypeDetailsSwitch.java | 0 .../internal/TypeDetailsSwitchSupport.java | 0 .../models/internal/TypeDetailsSwitcher.java | 0 .../internal/TypeVariableDetailsImpl.java | 0 .../TypeVariableReferenceDetailsImpl.java | 0 .../models/internal/VoidTypeDetailsImpl.java | 0 .../internal/WildcardTypeDetailsImpl.java | 0 .../dynamic/AbstractAnnotationTarget.java | 0 .../internal/dynamic/DynamicClassDetails.java | 0 .../internal/dynamic/DynamicFieldDetails.java | 0 .../dynamic/DynamicMethodDetails.java | 0 .../models/internal/dynamic/package-info.java | 0 .../jdk/AbstractJdkAnnotationTarget.java | 0 .../jdk/AbstractJdkValueExtractor.java | 0 .../internal/jdk/JdkArrayValueConverter.java | 0 .../internal/jdk/JdkArrayValueExtractor.java | 0 .../models/internal/jdk/JdkBuilders.java | 20 +- .../jdk/JdkBuildingContextProvider.java | 29 ++ .../models/internal/jdk/JdkClassDetails.java | 5 +- .../models/internal/jdk/JdkFieldDetails.java | 0 .../models/internal/jdk/JdkMethodDetails.java | 0 .../internal/jdk/JdkNestedValueConverter.java | 0 .../internal/jdk/JdkNestedValueExtractor.java | 0 .../internal/jdk/JdkPassThruConverter.java | 0 .../internal/jdk/JdkPassThruExtractor.java | 0 .../jdk/JdkRecordComponentDetails.java | 0 .../internal/jdk/JdkTrackingTypeSwitch.java | 0 .../internal/jdk/JdkTrackingTypeSwitcher.java | 0 .../models/internal/jdk/JdkTypeSwitch.java | 0 .../models/internal/jdk/JdkTypeSwitcher.java | 0 .../internal/util/CollectionHelper.java | 1 - .../models/internal/util/IndexedConsumer.java | 0 .../models/internal/util/StringHelper.java | 0 .../org/hibernate/models/package-info.java | 0 .../models/spi/AnnotationDescriptor.java | 17 +- .../spi/AnnotationDescriptorRegistry.java | 8 - .../models/spi/AnnotationTarget.java | 0 .../hibernate/models/spi/AnnotationUsage.java | 63 +++ .../models/spi/ArrayTypeDetails.java | 0 .../models/spi/AttributeDescriptor.java | 0 .../models/spi/ClassBasedTypeDetails.java | 0 .../hibernate/models/spi/ClassDetails.java | 0 .../models/spi/ClassDetailsBuilder.java | 3 +- .../spi/ClassDetailsBuilderProvider.java | 26 ++ .../models/spi/ClassDetailsRegistry.java | 41 +- .../hibernate/models/spi/ClassLoading.java | 12 + .../models/spi/ClassTypeDetails.java | 0 .../hibernate/models/spi/FieldDetails.java | 0 .../models/spi/JdkValueConverter.java | 0 .../models/spi/JdkValueExtractor.java | 0 .../hibernate/models/spi/MemberDetails.java | 0 .../hibernate/models/spi/MethodDetails.java | 0 .../models/spi/ModelsConfiguration.java | 99 ++++ .../spi/MutableAnnotationDescriptor.java | 20 + .../models/spi/MutableAnnotationTarget.java | 0 .../models/spi/MutableClassDetails.java | 0 .../models/spi/MutableMemberDetails.java | 0 .../models/spi/ParameterizedTypeDetails.java | 0 .../models/spi/PrimitiveTypeDetails.java | 0 .../models/spi/RecordComponentDetails.java | 0 .../hibernate/models/spi/RegistryPrimer.java | 0 .../models/spi/RenderingCollector.java | 0 .../spi/SourceModelBuildingContext.java | 12 +- .../SourceModelBuildingContextProvider.java | 28 ++ .../models/spi/SourceModelContext.java | 0 .../org/hibernate/models/spi/TypeDetails.java | 7 +- .../models/spi/TypeDetailsHelper.java | 0 .../models/spi/TypeDetailsSwitch.java | 0 .../models/spi/TypeVariableDetails.java | 0 .../spi/TypeVariableReferenceDetails.java | 0 .../models/spi/TypeVariableScope.java | 0 .../models/spi/ValueTypeDescriptor.java | 4 - .../hibernate/models/spi/VoidTypeDetails.java | 0 .../models/spi/WildcardTypeDetails.java | 0 .../src}/test/resources/log4j2.properties | 0 settings.gradle | 6 +- .../AbstractClassDetailsRegistry.java | 101 ----- ...AnnotationDescriptorRegistryImmutable.java | 50 --- .../ClassDetailsRegistryImmutable.java | 59 --- .../ClassDetailsRegistryStandard.java | 143 ------ .../SourceModelBuildingContextImpl.java | 116 ----- .../internal/jandex/JandexBuilders.java | 185 -------- .../models/spi/SharedAnnotationScope.java | 35 -- .../spi/SharedNamedAnnotationScope.java | 60 --- .../models/annotations/RegistryTests.java | 57 --- .../hibernate/models/pkg/package-info.java | 5 - 283 files changed, 2083 insertions(+), 1786 deletions(-) create mode 100644 buildSrc/src/main/groovy/java-module.gradle create mode 100644 buildSrc/src/main/groovy/published-java-module.gradle create mode 100644 hibernate-models-jandex/build.gradle rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/AbstractAnnotationTarget.java (96%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/AbstractValueExtractor.java (79%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/AnnotationUsageBuilder.java (82%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/ArrayValueConverter.java (77%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/ArrayValueExtractor.java (88%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/BooleanValueConverter.java (86%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/BooleanValueExtractor.java (94%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/ByteValueConverter.java (86%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/ByteValueExtractor.java (94%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/CharacterValueConverter.java (86%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/CharacterValueExtractor.java (74%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/ClassValueConverter.java (89%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/ClassValueExtractor.java (93%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/DoubleValueConverter.java (86%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/DoubleValueExtractor.java (94%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/EnumValueConverter.java (87%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/EnumValueExtractor.java (94%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/FloatValueConverter.java (86%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/FloatValueExtractor.java (93%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/IntegerValueConverter.java (86%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/IntegerValueExtractor.java (94%) create mode 100644 hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexAnnotationDescriptorImpl.java create mode 100644 hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexAnnotationDescriptorRegistry.java create mode 100644 hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexBuilders.java rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/JandexClassDetails.java (88%) create mode 100644 hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetailsBuilderImpl.java create mode 100644 hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetailsRegistry.java rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/JandexFieldDetails.java (94%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/JandexIndexerHelper.java (97%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/JandexMethodDetails.java (99%) create mode 100644 hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexModelBuildingContextImpl.java rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/JandexNestedValueConverter.java (90%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/JandexNestedValueExtractor.java (94%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/JandexRecordComponentDetails.java (93%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/JandexTypeSwitchStandard.java (98%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/JandexTypeSwitcher.java (93%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/JandexValueHelper.java (82%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/LongValueConverter.java (86%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/LongValueExtractor.java (93%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/ShortValueConverter.java (86%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/ShortValueExtractor.java (93%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/StringValueConverter.java (86%) rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal}/StringValueExtractor.java (93%) create mode 100644 hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexAnnotationDescriptor.java create mode 100644 hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexBuildingContextProvider.java create mode 100644 hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexModelBuildingContext.java rename {src/main/java/org/hibernate/models/internal/jandex => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi}/JandexTypeSwitch.java (96%) rename {src/main/java/org/hibernate/models => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex}/spi/JandexValueConverter.java (82%) rename {src/main/java/org/hibernate/models => hibernate-models-jandex/src/main/java/org/hibernate/models/jandex}/spi/JandexValueExtractor.java (85%) create mode 100644 hibernate-models-jandex/src/main/resources/META-INF/services/org.hibernate.models.spi.SourceModelBuildingContextProvider rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/MixedSourcesTests.java (88%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/PackageTests.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/RenderingSmokeTest.java (74%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/SourceModelTestHelper.java (56%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/annotations/AnnotationReplacementTests.java (92%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/annotations/AnnotationUsageTests.java (92%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/annotations/AttributeAccessTests.java (91%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/annotations/MapKeyTest.java (93%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/annotations/RepeatableUsageTests.java (90%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/annotations/TargetSafeCastingTests.java (95%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/AnEnum.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/BranchClass.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/ClassMarker.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/ClassRegistryTests.java (59%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/Composable.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/EnumTests.java (88%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/GenericsTests.java (94%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/InheritanceTests.java (93%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/Intf.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/LeafClass.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/MemberMarker.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/PrimitiveTypeTests.java (89%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/RootClass.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/SubclassableMarker.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/classes/TrunkClass.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/dynamic/DynamicAnnotationTests.java (91%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/dynamic/SimpleDynamicModelTests.java (93%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/dynamic/package-info.java (100%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/generics/BaselineTests.java (92%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/generics/CollectionTests.java (97%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/generics/InheritanceTypeVariableTests.java (96%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/generics/NestedInheritanceTest.java (95%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/generics/NestedRecursiveInheritanceTest.java (96%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/generics/RecursiveTypeVariableTests.java (90%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/generics/SimpleTypeVariableTests.java (94%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/members/ArrayTests.java (97%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/members/FieldDetailsTests.java (97%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/members/MethodDetailsTests.java (98%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/members/PluralMemberTests.java (95%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/members/RecordTests.java (90%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/members/UnboundWildcardTests.java (95%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/xml/MetadataCompleteTests.java (93%) rename {src => hibernate-models-jandex/src}/test/java/org/hibernate/models/xml/SimpleEntity.java (100%) create mode 100644 hibernate-models-testing/build.gradle rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/MutableInteger.java (87%) rename {src/test/java/org/hibernate/models/annotations => hibernate-models-testing/src/main/java/org/hibernate/models}/SimpleEntity.java (95%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/annotations/CustomAnnotation.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/annotations/CustomAnnotations.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/annotations/CustomMetaAnnotation.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/annotations/EverythingBagel.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/annotations/Nested.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/annotations/Status.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/BasicAnnotation.java (72%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/CacheableAnnotation.java (74%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/CheckConstraintAnnotation.java (70%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/ColumnAnnotation.java (75%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/ColumnDetails.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/CommonTableDetails.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/DatabaseObjectDetails.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/EntityAnnotation.java (74%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/ForeignKeyAnnotation.java (70%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/IdAnnotation.java (82%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/IndexAnnotation.java (69%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/JpaAnnotations.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/Named.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/NamedNativeQueriesAnnotation.java (84%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/NamedNativeQueryAnnotation.java (76%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/NamedQueriesAnnotation.java (83%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/NamedQueryAnnotation.java (85%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/OrmAnnotationHelper.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/RepeatableContainer.java (100%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/SecondaryTableAnnotation.java (76%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/SecondaryTablesAnnotation.java (84%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/SequenceGeneratorAnnotation.java (81%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/SequenceGeneratorsAnnotation.java (84%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/TableAnnotation.java (74%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/TransientAnnotation.java (83%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/orm/UniqueConstraintAnnotation.java (90%) rename {src/test => hibernate-models-testing/src/main}/java/org/hibernate/models/pkg/CustomAnnotation.java (100%) create mode 100644 hibernate-models-testing/src/main/java/org/hibernate/models/pkg/package-info.java create mode 100644 hibernate-models/build.gradle rename {src => hibernate-models/src}/main/java/org/hibernate/models/AnnotationAccessException.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/IllegalCastException.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/Incubating.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/Internal.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/ModelsException.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/UnhandledMethodException.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/UnknownAnnotationAttributeException.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/UnknownClassException.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/AbstractAnnotationDescriptor.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/AbstractAnnotationDescriptorRegistry.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/AbstractAnnotationTarget.java (100%) create mode 100644 hibernate-models/src/main/java/org/hibernate/models/internal/AbstractClassDetailsRegistry.java create mode 100644 hibernate-models/src/main/java/org/hibernate/models/internal/AbstractModelBuildingContext.java rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/AbstractTypeDescriptor.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/AnnotationDescriptorBuilding.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/AnnotationDescriptorRegistryStandard.java (79%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/AnnotationHelper.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/AnnotationProxy.java (79%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/AnnotationTargetSupport.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/AnnotationUsageHelper.java (91%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ArrayTypeDescriptor.java (77%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ArrayTypeDetailsImpl.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/AttributeDescriptorImpl.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/BaseLineJavaTypes.java (100%) create mode 100644 hibernate-models/src/main/java/org/hibernate/models/internal/BasicModelBuildingContextImpl.java rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/BooleanTypeDescriptor.java (55%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ByteTypeDescriptor.java (55%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/CharacterTypeDescriptor.java (55%) create mode 100644 hibernate-models/src/main/java/org/hibernate/models/internal/ClassDetailsRegistryStandard.java rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ClassDetailsSupport.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ClassTypeDescriptor.java (68%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ClassTypeDetailsImpl.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/CollectionElementSwitch.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/DoubleTypeDescriptor.java (56%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/EnumTypeDescriptor.java (53%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/FloatTypeDescriptor.java (66%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/IntegerTypeDescriptor.java (56%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/IsResolvedTypeSwitch.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/LongTypeDescriptor.java (66%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/MapKeySwitch.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/MapValueSwitch.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ModelsAnnotationLogging.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ModelsClassLogging.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ModelsLogging.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ModifierUtils.java (100%) create mode 100644 hibernate-models/src/main/java/org/hibernate/models/internal/MutableAnnotationDescriptorRegistry.java create mode 100644 hibernate-models/src/main/java/org/hibernate/models/internal/MutableClassDetailsRegistry.java rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/NestedTypeDescriptor.java (72%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/OrmAnnotationDescriptor.java (83%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ParameterizedTypeDetailsImpl.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/PrimitiveKind.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/PrimitiveTypeDetailsImpl.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/RenderingCollectorImpl.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/ShortTypeDescriptor.java (55%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/SimpleClassDetails.java (98%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/SimpleClassLoading.java (69%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/StandardAnnotationDescriptor.java (94%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/StringTypeDescriptor.java (66%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/TypeDescriptors.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/TypeDetailsSwitch.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/TypeDetailsSwitchSupport.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/TypeDetailsSwitcher.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/TypeVariableDetailsImpl.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/TypeVariableReferenceDetailsImpl.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/VoidTypeDetailsImpl.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/WildcardTypeDetailsImpl.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/dynamic/AbstractAnnotationTarget.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/dynamic/DynamicClassDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/dynamic/DynamicFieldDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/dynamic/DynamicMethodDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/dynamic/package-info.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/AbstractJdkAnnotationTarget.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/AbstractJdkValueExtractor.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkArrayValueConverter.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkArrayValueExtractor.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkBuilders.java (93%) create mode 100644 hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkBuildingContextProvider.java rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkClassDetails.java (97%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkFieldDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkMethodDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkNestedValueConverter.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkNestedValueExtractor.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkPassThruConverter.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkPassThruExtractor.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkRecordComponentDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkTrackingTypeSwitch.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkTrackingTypeSwitcher.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkTypeSwitch.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/jdk/JdkTypeSwitcher.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/util/CollectionHelper.java (98%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/util/IndexedConsumer.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/internal/util/StringHelper.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/package-info.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/AnnotationDescriptor.java (89%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/AnnotationDescriptorRegistry.java (87%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/AnnotationTarget.java (100%) create mode 100644 hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationUsage.java rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/ArrayTypeDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/AttributeDescriptor.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/ClassBasedTypeDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/ClassDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/ClassDetailsBuilder.java (92%) create mode 100644 hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetailsBuilderProvider.java rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/ClassDetailsRegistry.java (63%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/ClassLoading.java (70%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/ClassTypeDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/FieldDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/JdkValueConverter.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/JdkValueExtractor.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/MemberDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/MethodDetails.java (100%) create mode 100644 hibernate-models/src/main/java/org/hibernate/models/spi/ModelsConfiguration.java create mode 100644 hibernate-models/src/main/java/org/hibernate/models/spi/MutableAnnotationDescriptor.java rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/MutableAnnotationTarget.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/MutableClassDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/MutableMemberDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/ParameterizedTypeDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/PrimitiveTypeDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/RecordComponentDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/RegistryPrimer.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/RenderingCollector.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/SourceModelBuildingContext.java (80%) create mode 100644 hibernate-models/src/main/java/org/hibernate/models/spi/SourceModelBuildingContextProvider.java rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/SourceModelContext.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/TypeDetails.java (96%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/TypeDetailsHelper.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/TypeDetailsSwitch.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/TypeVariableDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/TypeVariableReferenceDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/TypeVariableScope.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/ValueTypeDescriptor.java (87%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/VoidTypeDetails.java (100%) rename {src => hibernate-models/src}/main/java/org/hibernate/models/spi/WildcardTypeDetails.java (100%) rename {src => hibernate-models/src}/test/resources/log4j2.properties (100%) delete mode 100644 src/main/java/org/hibernate/models/internal/AbstractClassDetailsRegistry.java delete mode 100644 src/main/java/org/hibernate/models/internal/AnnotationDescriptorRegistryImmutable.java delete mode 100644 src/main/java/org/hibernate/models/internal/ClassDetailsRegistryImmutable.java delete mode 100644 src/main/java/org/hibernate/models/internal/ClassDetailsRegistryStandard.java delete mode 100644 src/main/java/org/hibernate/models/internal/SourceModelBuildingContextImpl.java delete mode 100644 src/main/java/org/hibernate/models/internal/jandex/JandexBuilders.java delete mode 100644 src/main/java/org/hibernate/models/spi/SharedAnnotationScope.java delete mode 100644 src/main/java/org/hibernate/models/spi/SharedNamedAnnotationScope.java delete mode 100644 src/test/java/org/hibernate/models/annotations/RegistryTests.java delete mode 100644 src/test/java/org/hibernate/models/pkg/package-info.java 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 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 annotationDescriptor = buildingContext.getAnnotationDescriptorRegistry() + .getDescriptor( (Class) valueTypeDescriptor.getValueType() ); + final JandexNestedValueConverter jandexNestedValueConverter = new JandexNestedValueConverter<>( annotationDescriptor ); + final JandexNestedValueExtractor 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 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 annotationDescriptor = buildingContext.getAnnotationDescriptorRegistry() + .getDescriptor( (Class) valueTypeDescriptor.getValueType() ); + final JandexNestedValueConverter jandexNestedValueConverter = new JandexNestedValueConverter<>( annotationDescriptor ); + final JandexNestedValueExtractor 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 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 configProperties) { + final IndexView jandexIndex = resolveJandexIndex( configProperties ); + + if ( jandexIndex != null ) { + return new JandexModelBuildingContextImpl( jandexIndex, classLoading, registryPrimer ); + } + + return new BasicModelBuildingContextImpl( classLoading, registryPrimer ); + + } + + private IndexView resolveJandexIndex(Map configProperties) { + // todo : here is where we need to figure out the best way to have the Jandex Index to available + return (IndexView) configProperties.get( INDEX_PARAM ); + } +} diff --git a/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexModelBuildingContext.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexModelBuildingContext.java new file mode 100644 index 0000000..e9a57a9 --- /dev/null +++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexModelBuildingContext.java @@ -0,0 +1,23 @@ +/* + * 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 org.hibernate.models.spi.SourceModelBuildingContext; +import org.hibernate.models.spi.ValueTypeDescriptor; + +import org.jboss.jandex.IndexView; + +/** + * @author Steve Ebersole + */ +public interface JandexModelBuildingContext extends SourceModelBuildingContext { + IndexView getJandexIndex(); + + JandexValueConverter getJandexValueConverter(ValueTypeDescriptor valueTypeDescriptor); + JandexValueExtractor getJandexValueExtractor(ValueTypeDescriptor valueTypeDescriptor); +} diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexTypeSwitch.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexTypeSwitch.java similarity index 96% rename from src/main/java/org/hibernate/models/internal/jandex/JandexTypeSwitch.java rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexTypeSwitch.java index 23ad291..403153b 100644 --- a/src/main/java/org/hibernate/models/internal/jandex/JandexTypeSwitch.java +++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexTypeSwitch.java @@ -5,7 +5,7 @@ * Copyright: Red Hat Inc. and Hibernate Authors */ -package org.hibernate.models.internal.jandex; +package org.hibernate.models.jandex.spi; import org.hibernate.models.spi.SourceModelBuildingContext; diff --git a/src/main/java/org/hibernate/models/spi/JandexValueConverter.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexValueConverter.java similarity index 82% rename from src/main/java/org/hibernate/models/spi/JandexValueConverter.java rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexValueConverter.java index d9d0eb6..60516c9 100644 --- a/src/main/java/org/hibernate/models/spi/JandexValueConverter.java +++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexValueConverter.java @@ -4,7 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright: Red Hat Inc. and Hibernate Authors */ -package org.hibernate.models.spi; +package org.hibernate.models.jandex.spi; + +import org.hibernate.models.spi.SourceModelBuildingContext; import org.jboss.jandex.AnnotationValue; diff --git a/src/main/java/org/hibernate/models/spi/JandexValueExtractor.java b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexValueExtractor.java similarity index 85% rename from src/main/java/org/hibernate/models/spi/JandexValueExtractor.java rename to hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexValueExtractor.java index 95c7b4c..2da9d63 100644 --- a/src/main/java/org/hibernate/models/spi/JandexValueExtractor.java +++ b/hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/spi/JandexValueExtractor.java @@ -4,7 +4,10 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright: Red Hat Inc. and Hibernate Authors */ -package org.hibernate.models.spi; +package org.hibernate.models.jandex.spi; + +import org.hibernate.models.spi.AttributeDescriptor; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.jboss.jandex.AnnotationInstance; diff --git a/hibernate-models-jandex/src/main/resources/META-INF/services/org.hibernate.models.spi.SourceModelBuildingContextProvider b/hibernate-models-jandex/src/main/resources/META-INF/services/org.hibernate.models.spi.SourceModelBuildingContextProvider new file mode 100644 index 0000000..cd9345e --- /dev/null +++ b/hibernate-models-jandex/src/main/resources/META-INF/services/org.hibernate.models.spi.SourceModelBuildingContextProvider @@ -0,0 +1,7 @@ +# +# Hibernate, Relational Persistence for Idiomatic Java +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright: Red Hat Inc. and Hibernate Authors +# +org.hibernate.models.jandex.spi.JandexBuildingContextProvider \ No newline at end of file diff --git a/src/test/java/org/hibernate/models/MixedSourcesTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/MixedSourcesTests.java similarity index 88% rename from src/test/java/org/hibernate/models/MixedSourcesTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/MixedSourcesTests.java index 798b223..e83bb10 100644 --- a/src/test/java/org/hibernate/models/MixedSourcesTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/MixedSourcesTests.java @@ -6,10 +6,10 @@ */ package org.hibernate.models; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; -import org.hibernate.models.internal.jandex.JandexClassDetails; import org.hibernate.models.internal.jdk.JdkClassDetails; +import org.hibernate.models.jandex.internal.JandexClassDetails; import org.hibernate.models.spi.ClassDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -32,7 +32,7 @@ public class MixedSourcesTests { @Test void testEntityNotInJandex() { final Index index = SourceModelTestHelper.buildJandexIndex( Embeddable2.class ); - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, Entity2.class, Embeddable2.class @@ -54,7 +54,7 @@ void testEntityNotInJandex() { @Test void testEmbeddableNotInJandex() { final Index index = SourceModelTestHelper.buildJandexIndex( Entity1.class ); - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, Entity1.class, Embeddable1.class diff --git a/src/test/java/org/hibernate/models/PackageTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/PackageTests.java similarity index 100% rename from src/test/java/org/hibernate/models/PackageTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/PackageTests.java diff --git a/src/test/java/org/hibernate/models/RenderingSmokeTest.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/RenderingSmokeTest.java similarity index 74% rename from src/test/java/org/hibernate/models/RenderingSmokeTest.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/RenderingSmokeTest.java index e80b082..f844e7f 100644 --- a/src/test/java/org/hibernate/models/RenderingSmokeTest.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/RenderingSmokeTest.java @@ -7,13 +7,11 @@ package org.hibernate.models; -import org.hibernate.models.annotations.AttributeAccessTests; import org.hibernate.models.annotations.EverythingBagel; import org.hibernate.models.annotations.Nested; -import org.hibernate.models.annotations.SimpleEntity; import org.hibernate.models.annotations.Status; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -27,7 +25,7 @@ public class RenderingSmokeTest { @Test void testRendering() { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( (Index) null, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( (Index) null, SimpleEntity.class ); final ClassDetails classDetails = buildingContext.getClassDetailsRegistry().resolveClassDetails( SimpleEntity.class.getName() ); classDetails.render( buildingContext ); @@ -35,7 +33,7 @@ void testRendering() { @Test void testRendering2() { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( (org.jboss.jandex.Index) null, SimpleClass.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( (org.jboss.jandex.Index) null, SimpleClass.class ); final ClassDetails classDetails = buildingContext.getClassDetailsRegistry().resolveClassDetails( SimpleClass.class.getName() ); System.out.println( classDetails.renderToString( buildingContext ) ); @@ -52,7 +50,7 @@ void testRendering2() { theLong = 4L, theFloat = 5.1F, theDouble = 6.2, - theClass = AttributeAccessTests.TheClass.class, + theClass = SimpleEntity.class, theNested = @Nested(), theNesteds = {@Nested(), @Nested()}, theStrings = {"a", "b", "c"} diff --git a/src/test/java/org/hibernate/models/SourceModelTestHelper.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/SourceModelTestHelper.java similarity index 56% rename from src/test/java/org/hibernate/models/SourceModelTestHelper.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/SourceModelTestHelper.java index 54a0b74..0e44901 100644 --- a/src/test/java/org/hibernate/models/SourceModelTestHelper.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/SourceModelTestHelper.java @@ -9,17 +9,16 @@ import java.io.IOException; import java.lang.annotation.Annotation; -import org.hibernate.models.internal.AnnotationDescriptorRegistryStandard; import org.hibernate.models.internal.BaseLineJavaTypes; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; -import org.hibernate.models.internal.jandex.JandexBuilders; -import org.hibernate.models.internal.jandex.JandexIndexerHelper; +import org.hibernate.models.internal.BasicModelBuildingContextImpl; import org.hibernate.models.internal.jdk.JdkBuilders; import org.hibernate.models.internal.util.CollectionHelper; +import org.hibernate.models.jandex.internal.JandexIndexerHelper; +import org.hibernate.models.jandex.internal.JandexModelBuildingContextImpl; import org.hibernate.models.orm.JpaAnnotations; import org.hibernate.models.orm.OrmAnnotationHelper; -import org.hibernate.models.spi.ClassDetailsRegistry; import org.hibernate.models.spi.ClassLoading; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.jboss.jandex.ClassInfo; import org.jboss.jandex.Index; @@ -32,47 +31,47 @@ */ public class SourceModelTestHelper { - public static SourceModelBuildingContextImpl createBuildingContext(Class... modelClasses) { + public static SourceModelBuildingContext createBuildingContext(Class... modelClasses) { return createBuildingContext( SIMPLE_CLASS_LOADING, modelClasses ); } - public static SourceModelBuildingContextImpl createBuildingContext(ClassLoading classLoadingAccess, Class... modelClasses) { + public static SourceModelBuildingContext createBuildingContext(ClassLoading classLoadingAccess, Class... modelClasses) { final Index jandexIndex = buildJandexIndex( classLoadingAccess, modelClasses ); return createBuildingContext( jandexIndex, modelClasses ); } - public static SourceModelBuildingContextImpl createBuildingContext(Index jandexIndex, Class... modelClasses) { + public static SourceModelBuildingContext createBuildingContext(Index jandexIndex, Class... modelClasses) { return createBuildingContext( jandexIndex, SIMPLE_CLASS_LOADING, modelClasses ); } - public static SourceModelBuildingContextImpl createBuildingContext( + public static SourceModelBuildingContext createBuildingContext( Index jandexIndex, ClassLoading classLoadingAccess, Class... modelClasses) { - final SourceModelBuildingContextImpl buildingContext = new SourceModelBuildingContextImpl( - classLoadingAccess, - jandexIndex, - (contributions, buildingContext1) -> OrmAnnotationHelper.forEachOrmAnnotation( contributions::registerAnnotation ) - ); - final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); - final AnnotationDescriptorRegistryStandard annotationDescriptorRegistry = (AnnotationDescriptorRegistryStandard) buildingContext.getAnnotationDescriptorRegistry(); - - if ( jandexIndex != null ) { + final SourceModelBuildingContext ctx; + if ( jandexIndex == null ) { + ctx = new BasicModelBuildingContextImpl( + classLoadingAccess, + (contributions, buildingContext1) -> OrmAnnotationHelper.forEachOrmAnnotation( contributions::registerAnnotation ) + ); + } + else { + ctx = new JandexModelBuildingContextImpl( + jandexIndex, + classLoadingAccess, + (contributions, buildingContext1) -> OrmAnnotationHelper.forEachOrmAnnotation( contributions::registerAnnotation ) + ); + for ( ClassInfo knownClass : jandexIndex.getKnownClasses() ) { - classDetailsRegistry.resolveClassDetails( - knownClass.name().toString(), - JandexBuilders.DEFAULT_BUILDER - ); + ctx.getClassDetailsRegistry().resolveClassDetails( knownClass.name().toString() ); if ( knownClass.isAnnotation() ) { - final Class annotationClass = buildingContext - .getClassLoading() - .classForName( knownClass.name().toString() ); - annotationDescriptorRegistry.resolveDescriptor( + final Class annotationClass = classLoadingAccess.classForName( knownClass.name().toString() ); + ctx.getAnnotationDescriptorRegistry().resolveDescriptor( annotationClass, annotationType -> JdkBuilders.buildAnnotationDescriptor( annotationType, - buildingContext + ctx ) ); } @@ -80,12 +79,12 @@ public static SourceModelBuildingContextImpl createBuildingContext( } if ( CollectionHelper.isNotEmpty( modelClasses ) ) { - for ( int i = 0; i < modelClasses.length; i++ ) { - classDetailsRegistry.resolveClassDetails( modelClasses[i].getName() ); + for ( Class modelClass : modelClasses ) { + ctx.getClassDetailsRegistry().resolveClassDetails( modelClass.getName() ); } } - return buildingContext; + return ctx; } public static Index buildJandexIndex(Class... modelClasses) { diff --git a/src/test/java/org/hibernate/models/annotations/AnnotationReplacementTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/AnnotationReplacementTests.java similarity index 92% rename from src/test/java/org/hibernate/models/annotations/AnnotationReplacementTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/AnnotationReplacementTests.java index 4adbc04..af1f4f8 100644 --- a/src/test/java/org/hibernate/models/annotations/AnnotationReplacementTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/AnnotationReplacementTests.java @@ -7,11 +7,12 @@ package org.hibernate.models.annotations; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; +import org.hibernate.models.SimpleEntity; import org.hibernate.models.orm.JpaAnnotations; import org.hibernate.models.orm.SecondaryTableAnnotation; import org.hibernate.models.orm.SecondaryTablesAnnotation; import org.hibernate.models.spi.MutableClassDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -39,7 +40,7 @@ void testBasicReplacementWithoutJandex() { } void basicReplacementChecks(Index index) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( index, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( index, SimpleEntity.class ); final MutableClassDetails classDetails = (MutableClassDetails) buildingContext.getClassDetailsRegistry().getClassDetails( SimpleEntity.class.getName() ); assertThat( classDetails.hasDirectAnnotationUsage( SecondaryTable.class ) ).isTrue(); diff --git a/src/test/java/org/hibernate/models/annotations/AnnotationUsageTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/AnnotationUsageTests.java similarity index 92% rename from src/test/java/org/hibernate/models/annotations/AnnotationUsageTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/AnnotationUsageTests.java index 1a6c603..667da15 100644 --- a/src/test/java/org/hibernate/models/annotations/AnnotationUsageTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/AnnotationUsageTests.java @@ -4,7 +4,7 @@ import org.hibernate.models.AnnotationAccessException; import org.hibernate.models.MutableInteger; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; +import org.hibernate.models.SimpleEntity; import org.hibernate.models.orm.EntityAnnotation; import org.hibernate.models.orm.JpaAnnotations; import org.hibernate.models.orm.NamedQueryAnnotation; @@ -14,6 +14,7 @@ import org.hibernate.models.spi.AnnotationDescriptorRegistry; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassDetailsRegistry; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -51,7 +52,7 @@ void testBasicUsageWithoutJandex() { } void basicUsageChecks(Index index) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( index, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( index, SimpleEntity.class ); final AnnotationDescriptorRegistry descriptorRegistry = buildingContext.getAnnotationDescriptorRegistry(); final AnnotationDescriptor descriptor = descriptorRegistry.getDescriptor( CustomAnnotation.class ); @@ -98,7 +99,7 @@ void testUsageMutationWithoutJandex() { } private void usageMutationChecks(Index index) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( index, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( index, SimpleEntity.class ); final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); final ClassDetails classDetails = classDetailsRegistry.getClassDetails( SimpleEntity.class.getName() ); final EntityAnnotation entityAnn = (EntityAnnotation) classDetails.getAnnotationUsage( Entity.class, buildingContext ); @@ -117,7 +118,7 @@ void testBaselineWithoutJandex() { } void baselineChecks(Index index) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( index, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( index, SimpleEntity.class ); final AnnotationDescriptorRegistry descriptorRegistry = buildingContext.getAnnotationDescriptorRegistry(); final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); @@ -152,7 +153,7 @@ void testCompositionsWithoutJandex() { } private void compositionChecks(Index index) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( index, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( index, SimpleEntity.class ); final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); final ClassDetails classDetails = classDetailsRegistry.getClassDetails( SimpleEntity.class.getName() ); @@ -167,7 +168,7 @@ private void compositionChecks(Index index) { @Test void testDynamicAttributeCreation() { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( (Index) null, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( (Index) null, SimpleEntity.class ); final Column usage = JpaAnnotations.COLUMN.createUsage( buildingContext ); // check the attribute defaults assertThat( usage.name() ).isEqualTo( "" ); @@ -196,7 +197,7 @@ void testNamedAnnotationAccessWithoutJandex() { } void namedAnnotationAccessChecks(Index index) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( index, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( index, SimpleEntity.class ); final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); final ClassDetails entityClassDetails = classDetailsRegistry.getClassDetails( SimpleEntity.class.getName() ); @@ -220,7 +221,7 @@ void testFromAnnotationsWithoutJandex() { } void testFromAnnotations(Index index) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( index, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( index, SimpleEntity.class ); final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); final ClassDetails classDetails = classDetailsRegistry.getClassDetails( SimpleEntity.class.getName() ); @@ -276,7 +277,7 @@ void testHasAnnotationWithoutJandex() { } void testHasAnnotation(Index index) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( index, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( index, SimpleEntity.class ); final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); final ClassDetails classDetails = classDetailsRegistry.getClassDetails( SimpleEntity.class.getName() ); @@ -305,7 +306,7 @@ void testForEachAnnotationWithoutJandex() { } void testForEachAnnotation(Index index) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( index, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( index, SimpleEntity.class ); final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); final ClassDetails classDetails = classDetailsRegistry.getClassDetails( SimpleEntity.class.getName() ); @@ -335,7 +336,7 @@ void testGetSingleUsageWithoutJandex() { } void testGetSingleUsage(Index index) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( index, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( index, SimpleEntity.class ); final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); final ClassDetails classDetails = classDetailsRegistry.getClassDetails( SimpleEntity.class.getName() ); diff --git a/src/test/java/org/hibernate/models/annotations/AttributeAccessTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/AttributeAccessTests.java similarity index 91% rename from src/test/java/org/hibernate/models/annotations/AttributeAccessTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/AttributeAccessTests.java index e6185d3..1de3c0e 100644 --- a/src/test/java/org/hibernate/models/annotations/AttributeAccessTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/AttributeAccessTests.java @@ -7,8 +7,8 @@ package org.hibernate.models.annotations; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -23,7 +23,7 @@ public class AttributeAccessTests { @Test void testAttributeAccess() { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( (Index) null, TheClass.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( (Index) null, TheClass.class ); final ClassDetails classDetails = buildingContext.getClassDetailsRegistry().getClassDetails( TheClass.class.getName() ); final EverythingBagel annotationUsage = classDetails.getAnnotationUsage( EverythingBagel.class, buildingContext ); diff --git a/src/test/java/org/hibernate/models/annotations/MapKeyTest.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/MapKeyTest.java similarity index 93% rename from src/test/java/org/hibernate/models/annotations/MapKeyTest.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/MapKeyTest.java index f287264..04c5c5f 100644 --- a/src/test/java/org/hibernate/models/annotations/MapKeyTest.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/MapKeyTest.java @@ -4,9 +4,9 @@ import java.util.Map; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.FieldDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.TypeDetails; import org.junit.jupiter.api.Test; @@ -40,7 +40,7 @@ void testWithoutJandex() { } void testFieldsAreResolved(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, School.class, Person.class diff --git a/src/test/java/org/hibernate/models/annotations/RepeatableUsageTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/RepeatableUsageTests.java similarity index 90% rename from src/test/java/org/hibernate/models/annotations/RepeatableUsageTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/RepeatableUsageTests.java index 24d6518..c117f7c 100644 --- a/src/test/java/org/hibernate/models/annotations/RepeatableUsageTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/RepeatableUsageTests.java @@ -3,8 +3,8 @@ import java.lang.reflect.Modifier; import org.hibernate.models.AnnotationAccessException; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -50,7 +50,7 @@ void testWithoutJandex() { } private void verify(Index jandexIndex) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( + final SourceModelBuildingContext buildingContext = createBuildingContext( jandexIndex, Thing1.class, Thing2.class, @@ -66,7 +66,7 @@ private void verify(Index jandexIndex) { verifyThing5( buildingContext ); } - private void verifyThing1(SourceModelBuildingContextImpl buildingContext) { + private void verifyThing1(SourceModelBuildingContext buildingContext) { final ClassDetails classDetails = buildingContext.getClassDetailsRegistry().getClassDetails( Thing1.class.getName() ); try { @@ -83,7 +83,7 @@ private void verifyThing1(SourceModelBuildingContextImpl buildingContext) { assertThat( containerUsage ).isNotNull(); } - private void verifyThing2(SourceModelBuildingContextImpl buildingContext) { + private void verifyThing2(SourceModelBuildingContext buildingContext) { final ClassDetails classDetails = buildingContext.getClassDetailsRegistry().getClassDetails( Thing2.class.getName() ); try { @@ -100,14 +100,14 @@ private void verifyThing2(SourceModelBuildingContextImpl buildingContext) { assertThat( containerUsage ).isNotNull(); } - private void verifyThing3(SourceModelBuildingContextImpl buildingContext) { + private void verifyThing3(SourceModelBuildingContext buildingContext) { final ClassDetails classDetails = buildingContext.getClassDetailsRegistry().getClassDetails( Thing3.class.getName() ); assertThat( classDetails.getAnnotationUsage( NamedQuery.class, buildingContext ) ).isNull(); assertThat( classDetails.getAnnotationUsage( NamedQueries.class, buildingContext ) ).isNull(); } - private void verifyThing4(SourceModelBuildingContextImpl buildingContext) { + private void verifyThing4(SourceModelBuildingContext buildingContext) { final ClassDetails classDetails = buildingContext.getClassDetailsRegistry().getClassDetails( Thing4.class.getName() ); // NOTE : this works like the JDK call, though we may want to make this more sane @@ -121,7 +121,7 @@ private void verifyThing4(SourceModelBuildingContextImpl buildingContext) { assertThat( containerUsage ).isNotNull(); } - private void verifyThing5(SourceModelBuildingContextImpl buildingContext) { + private void verifyThing5(SourceModelBuildingContext buildingContext) { final ClassDetails classDetails = buildingContext.getClassDetailsRegistry().getClassDetails( Thing5.class.getName() ); final NamedQueries containerUsage = classDetails.getAnnotationUsage( NamedQueries.class, buildingContext ); diff --git a/src/test/java/org/hibernate/models/annotations/TargetSafeCastingTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/TargetSafeCastingTests.java similarity index 95% rename from src/test/java/org/hibernate/models/annotations/TargetSafeCastingTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/TargetSafeCastingTests.java index 914c86b..75ecb74 100644 --- a/src/test/java/org/hibernate/models/annotations/TargetSafeCastingTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/annotations/TargetSafeCastingTests.java @@ -10,12 +10,13 @@ import java.lang.annotation.Annotation; import org.hibernate.models.IllegalCastException; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; +import org.hibernate.models.SimpleEntity; import org.hibernate.models.orm.JpaAnnotations; 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.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -40,7 +41,7 @@ void testSafeCastingWithoutJandex() { } void safeCastingTests(Index jandexIndex) { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( jandexIndex, SimpleEntity.class ); + final SourceModelBuildingContext buildingContext = createBuildingContext( jandexIndex, SimpleEntity.class ); checkCasting( JpaAnnotations.ID ); diff --git a/src/test/java/org/hibernate/models/classes/AnEnum.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/AnEnum.java similarity index 100% rename from src/test/java/org/hibernate/models/classes/AnEnum.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/AnEnum.java diff --git a/src/test/java/org/hibernate/models/classes/BranchClass.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/BranchClass.java similarity index 100% rename from src/test/java/org/hibernate/models/classes/BranchClass.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/BranchClass.java diff --git a/src/test/java/org/hibernate/models/classes/ClassMarker.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/ClassMarker.java similarity index 100% rename from src/test/java/org/hibernate/models/classes/ClassMarker.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/ClassMarker.java diff --git a/src/test/java/org/hibernate/models/classes/ClassRegistryTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/ClassRegistryTests.java similarity index 59% rename from src/test/java/org/hibernate/models/classes/ClassRegistryTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/ClassRegistryTests.java index 8df705c..668b7bd 100644 --- a/src/test/java/org/hibernate/models/classes/ClassRegistryTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/ClassRegistryTests.java @@ -4,11 +4,9 @@ import java.util.Set; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; -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.ClassDetailsRegistry; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -24,7 +22,7 @@ public class ClassRegistryTests { @Test void testResolveClassDetails() { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( (Index) null, RootClass.class, TrunkClass.class, @@ -33,25 +31,16 @@ void testResolveClassDetails() { ); final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); - final ClassDetails rootClassDetails = classDetailsRegistry.resolveClassDetails( - RootClass.class.getName(), - JdkBuilders::buildClassDetailsStatic - ); + final ClassDetails rootClassDetails = classDetailsRegistry.resolveClassDetails( RootClass.class.getName() ); assertThat( rootClassDetails ).isNotNull(); - final ClassDetails trunkClassDetails = classDetailsRegistry.resolveClassDetails( - TrunkClass.class.getName(), - (name) -> new JdkClassDetails( - buildingContext.getClassLoading().classForName( name ), - buildingContext - ) - ); + final ClassDetails trunkClassDetails = classDetailsRegistry.resolveClassDetails( TrunkClass.class.getName() ); assertThat( trunkClassDetails ).isNotNull(); } @Test void testResolveClassDetailsVoid() { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( (Index) null, RootClass.class, TrunkClass.class, @@ -60,22 +49,16 @@ void testResolveClassDetailsVoid() { ); final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); - final ClassDetails voidClassDetails = classDetailsRegistry.resolveClassDetails( - void.class.getName(), - (name, ctx) -> {throw new IllegalStateException();} - ); + final ClassDetails voidClassDetails = classDetailsRegistry.resolveClassDetails( void.class.getName() ); assertThat( voidClassDetails ).isNotNull(); - final ClassDetails bigVoidClassDetails = classDetailsRegistry.resolveClassDetails( - Void.class.getName(), - (name) -> {throw new IllegalStateException();} - ); + final ClassDetails bigVoidClassDetails = classDetailsRegistry.resolveClassDetails( Void.class.getName() ); assertThat( bigVoidClassDetails ).isNotNull(); } @Test void testResolveClassDetailsNull() { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( (Index) null, RootClass.class, TrunkClass.class, @@ -85,24 +68,7 @@ void testResolveClassDetailsNull() { final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); try { - final ClassDetails rootClassDetails = classDetailsRegistry.resolveClassDetails( - null, - (name, ctx) -> { - throw new IllegalStateException(); - } - ); - fail( "Expecting a failure" ); - } - catch (IllegalArgumentException expected) { - } - - try { - final ClassDetails trunkClassDetails = classDetailsRegistry.resolveClassDetails( - null, - (name) -> { - throw new IllegalStateException(); - } - ); + classDetailsRegistry.resolveClassDetails( null ); fail( "Expecting a failure" ); } catch (IllegalArgumentException expected) { @@ -111,7 +77,7 @@ void testResolveClassDetailsNull() { @Test void testForEachClassDetails() { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( (Index) null, RootClass.class, TrunkClass.class, diff --git a/src/test/java/org/hibernate/models/classes/Composable.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/Composable.java similarity index 100% rename from src/test/java/org/hibernate/models/classes/Composable.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/Composable.java diff --git a/src/test/java/org/hibernate/models/classes/EnumTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/EnumTests.java similarity index 88% rename from src/test/java/org/hibernate/models/classes/EnumTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/EnumTests.java index 081c505..515cb7a 100644 --- a/src/test/java/org/hibernate/models/classes/EnumTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/EnumTests.java @@ -8,9 +8,9 @@ package org.hibernate.models.classes; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassDetailsRegistry; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -34,7 +34,7 @@ void basicRootTestWithoutJandex() { } private void basicEnumTest(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, AnEnum.class ); diff --git a/src/test/java/org/hibernate/models/classes/GenericsTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/GenericsTests.java similarity index 94% rename from src/test/java/org/hibernate/models/classes/GenericsTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/GenericsTests.java index f2a1517..b1ec5d5 100644 --- a/src/test/java/org/hibernate/models/classes/GenericsTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/GenericsTests.java @@ -8,10 +8,10 @@ package org.hibernate.models.classes; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassBasedTypeDetails; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassDetailsRegistry; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.TypeDetails; import org.junit.jupiter.api.Test; @@ -44,7 +44,7 @@ void testWrappedIdWithoutJandex() { } void testWrappedId(Index jandexIndex) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( jandexIndex, Base.class, Thing1.class, @@ -89,7 +89,7 @@ void testIdWithoutJandex() { } void testId(Index jandexIndex) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( jandexIndex, Base2.class, Thing3.class, @@ -125,7 +125,7 @@ void testArraysWithoutJandex() { } void testArrays(Index jandexIndex) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( jandexIndex, Base3.class, Thing5.class diff --git a/src/test/java/org/hibernate/models/classes/InheritanceTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/InheritanceTests.java similarity index 93% rename from src/test/java/org/hibernate/models/classes/InheritanceTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/InheritanceTests.java index 5be7b46..658921d 100644 --- a/src/test/java/org/hibernate/models/classes/InheritanceTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/InheritanceTests.java @@ -4,10 +4,10 @@ import java.util.List; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassDetailsRegistry; import org.hibernate.models.spi.FieldDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -39,7 +39,7 @@ void basicRootTestWithoutJandex() { } private void basicRootTest(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, RootClass.class, TrunkClass.class, @@ -86,7 +86,7 @@ void basicTrunkTestWithoutJandex() { } private void basicTrunkTest(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, RootClass.class, TrunkClass.class, @@ -134,7 +134,7 @@ void basicLeafTestWithoutJandex() { } private void basicLeafTest(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, RootClass.class, TrunkClass.class, @@ -173,7 +173,7 @@ void testIsImplementorWithoutJandex() { } private void testIsImplementor(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, Intf.class, RootClass.class, @@ -218,7 +218,7 @@ void testForEachDirectSubTypeWithoutJandex() { } private void testForEachDirectSubType(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, RootClass.class, TrunkClass.class, diff --git a/src/test/java/org/hibernate/models/classes/Intf.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/Intf.java similarity index 100% rename from src/test/java/org/hibernate/models/classes/Intf.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/Intf.java diff --git a/src/test/java/org/hibernate/models/classes/LeafClass.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/LeafClass.java similarity index 100% rename from src/test/java/org/hibernate/models/classes/LeafClass.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/LeafClass.java diff --git a/src/test/java/org/hibernate/models/classes/MemberMarker.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/MemberMarker.java similarity index 100% rename from src/test/java/org/hibernate/models/classes/MemberMarker.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/MemberMarker.java diff --git a/src/test/java/org/hibernate/models/classes/PrimitiveTypeTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/PrimitiveTypeTests.java similarity index 89% rename from src/test/java/org/hibernate/models/classes/PrimitiveTypeTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/PrimitiveTypeTests.java index cf746e0..f11bbf4 100644 --- a/src/test/java/org/hibernate/models/classes/PrimitiveTypeTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/PrimitiveTypeTests.java @@ -1,10 +1,10 @@ package org.hibernate.models.classes; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.internal.jdk.JdkClassDetails; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassDetailsRegistry; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -20,13 +20,13 @@ public class PrimitiveTypeTests { @Test void testWithJandex() { final Index jandexIndex = SourceModelTestHelper.buildJandexIndex(); - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( jandexIndex ); + final SourceModelBuildingContext buildingContext = createBuildingContext( jandexIndex ); verify( buildingContext.getClassDetailsRegistry() ); } @Test void testWithoutJandex() { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext( (Index) null ); + final SourceModelBuildingContext buildingContext = createBuildingContext( (Index) null ); verify( buildingContext.getClassDetailsRegistry() ); } diff --git a/src/test/java/org/hibernate/models/classes/RootClass.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/RootClass.java similarity index 100% rename from src/test/java/org/hibernate/models/classes/RootClass.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/RootClass.java diff --git a/src/test/java/org/hibernate/models/classes/SubclassableMarker.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/SubclassableMarker.java similarity index 100% rename from src/test/java/org/hibernate/models/classes/SubclassableMarker.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/SubclassableMarker.java diff --git a/src/test/java/org/hibernate/models/classes/TrunkClass.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/classes/TrunkClass.java similarity index 100% rename from src/test/java/org/hibernate/models/classes/TrunkClass.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/classes/TrunkClass.java diff --git a/src/test/java/org/hibernate/models/dynamic/DynamicAnnotationTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/dynamic/DynamicAnnotationTests.java similarity index 91% rename from src/test/java/org/hibernate/models/dynamic/DynamicAnnotationTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/dynamic/DynamicAnnotationTests.java index 53fb5a0..aa42539 100644 --- a/src/test/java/org/hibernate/models/dynamic/DynamicAnnotationTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/dynamic/DynamicAnnotationTests.java @@ -7,12 +7,12 @@ package org.hibernate.models.dynamic; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.internal.dynamic.DynamicClassDetails; import org.hibernate.models.orm.ForeignKeyAnnotation; import org.hibernate.models.orm.JpaAnnotations; import org.hibernate.models.orm.SecondaryTableAnnotation; import org.hibernate.models.orm.TableAnnotation; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -31,7 +31,7 @@ public class DynamicAnnotationTests { @Test void testBasicUsage() { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext(); + final SourceModelBuildingContext buildingContext = createBuildingContext(); final SequenceGenerator generatorAnn = JpaAnnotations.SEQUENCE_GENERATOR.createUsage( buildingContext ); assertThat( generatorAnn.name() ).isEqualTo( "" ); assertThat( generatorAnn.sequenceName() ).isEqualTo( "" ); @@ -48,7 +48,7 @@ void testBasicUsage() { @Test void testAnnotationWrapping() { - final SourceModelBuildingContextImpl buildingContext = createBuildingContext(); + final SourceModelBuildingContext buildingContext = createBuildingContext(); final DynamicClassDetails dynamicEntity = new DynamicClassDetails( "DynamicEntity", buildingContext ); final Table tableUsage = dynamicEntity.applyAnnotationUsage( JpaAnnotations.TABLE, diff --git a/src/test/java/org/hibernate/models/dynamic/SimpleDynamicModelTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/dynamic/SimpleDynamicModelTests.java similarity index 93% rename from src/test/java/org/hibernate/models/dynamic/SimpleDynamicModelTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/dynamic/SimpleDynamicModelTests.java index dbc0812..8e7d777 100644 --- a/src/test/java/org/hibernate/models/dynamic/SimpleDynamicModelTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/dynamic/SimpleDynamicModelTests.java @@ -10,13 +10,14 @@ import org.hibernate.models.SourceModelTestHelper; import org.hibernate.models.internal.ClassTypeDetailsImpl; import org.hibernate.models.internal.ModifierUtils; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; +import org.hibernate.models.internal.MutableClassDetailsRegistry; import org.hibernate.models.internal.dynamic.DynamicClassDetails; import org.hibernate.models.internal.dynamic.DynamicFieldDetails; import org.hibernate.models.orm.JpaAnnotations; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassDetailsRegistry; import org.hibernate.models.spi.FieldDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.TypeDetails; import org.junit.jupiter.api.Test; @@ -34,7 +35,7 @@ public class SimpleDynamicModelTests { @Test void testSimpleBasics() { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( (Index) null ); + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( (Index) null ); final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry(); final ClassDetails integerClassDetails = classDetailsRegistry.getClassDetails( Integer.class.getName() ); @@ -43,10 +44,10 @@ void testSimpleBasics() { final ClassDetails stringClassDetails = classDetailsRegistry.getClassDetails( String.class.getName() ); final ClassTypeDetailsImpl stringTypeDetails = new ClassTypeDetailsImpl( stringClassDetails, TypeDetails.Kind.CLASS ); - final DynamicClassDetails entityDetails = (DynamicClassDetails) classDetailsRegistry.resolveClassDetails( - "TheEntity", - name -> new DynamicClassDetails( name, buildingContext ) - ); + classDetailsRegistry.as( MutableClassDetailsRegistry.class ) + .addClassDetails( "TheEntity", new DynamicClassDetails( "TheEntity", buildingContext ) ); + + final DynamicClassDetails entityDetails = (DynamicClassDetails) classDetailsRegistry.resolveClassDetails( "TheEntity" ); final Entity created = entityDetails.applyAnnotationUsage( JpaAnnotations.ENTITY, buildingContext diff --git a/src/test/java/org/hibernate/models/dynamic/package-info.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/dynamic/package-info.java similarity index 100% rename from src/test/java/org/hibernate/models/dynamic/package-info.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/dynamic/package-info.java diff --git a/src/test/java/org/hibernate/models/generics/BaselineTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/BaselineTests.java similarity index 92% rename from src/test/java/org/hibernate/models/generics/BaselineTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/generics/BaselineTests.java index 26c37e6..dd61feb 100644 --- a/src/test/java/org/hibernate/models/generics/BaselineTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/BaselineTests.java @@ -8,10 +8,10 @@ package org.hibernate.models.generics; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassTypeDetails; import org.hibernate.models.spi.FieldDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.TypeDetails; import org.junit.jupiter.api.Test; @@ -41,7 +41,7 @@ void testSimpleClassWithoutJandex() { } void testSimpleClass(Index jandexIndex) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( jandexIndex, Simple.class ); diff --git a/src/test/java/org/hibernate/models/generics/CollectionTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/CollectionTests.java similarity index 97% rename from src/test/java/org/hibernate/models/generics/CollectionTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/generics/CollectionTests.java index 44a4096..1405300 100644 --- a/src/test/java/org/hibernate/models/generics/CollectionTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/CollectionTests.java @@ -17,12 +17,12 @@ import java.util.Set; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ArrayTypeDetails; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassTypeDetails; import org.hibernate.models.spi.FieldDetails; import org.hibernate.models.spi.ParameterizedTypeDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.TypeDetails; import org.hibernate.models.spi.TypeVariableDetails; import org.hibernate.models.spi.WildcardTypeDetails; @@ -50,7 +50,7 @@ void testCollectionsWithoutJandex() { } void testCollections(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, ClassOfCollections.class ); @@ -166,7 +166,7 @@ void testArraysWithoutJandex() { } void testArrays(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, ClassOfArrays.class ); @@ -210,7 +210,7 @@ void testWildcardWithoutJandex() { } void testWildcard(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, Things.class ); @@ -298,7 +298,7 @@ void testListSubclassesWithoutJandex() { } private void testListSubclasses(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, SpecialList.class, SpecialArrayList.class, @@ -346,7 +346,7 @@ void testMapSubclassesWithoutJandex() { } private void testMapSubclasses(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, SpecialMap.class, SpecialHashMap.class, diff --git a/src/test/java/org/hibernate/models/generics/InheritanceTypeVariableTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/InheritanceTypeVariableTests.java similarity index 96% rename from src/test/java/org/hibernate/models/generics/InheritanceTypeVariableTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/generics/InheritanceTypeVariableTests.java index 2b77810..a955ab3 100644 --- a/src/test/java/org/hibernate/models/generics/InheritanceTypeVariableTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/InheritanceTypeVariableTests.java @@ -8,11 +8,11 @@ package org.hibernate.models.generics; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassBasedTypeDetails; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassTypeDetails; import org.hibernate.models.spi.FieldDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.TypeDetails; import org.hibernate.models.spi.TypeVariableDetails; @@ -43,7 +43,7 @@ void testParameterizedHierarchyWithoutJandex() { } void testParameterizedHierarchy(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, Root.class, Base1.class, diff --git a/src/test/java/org/hibernate/models/generics/NestedInheritanceTest.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/NestedInheritanceTest.java similarity index 95% rename from src/test/java/org/hibernate/models/generics/NestedInheritanceTest.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/generics/NestedInheritanceTest.java index 8545765..e4064d8 100644 --- a/src/test/java/org/hibernate/models/generics/NestedInheritanceTest.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/NestedInheritanceTest.java @@ -1,10 +1,10 @@ package org.hibernate.models.generics; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassTypeDetails; import org.hibernate.models.spi.FieldDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.TypeDetails; import org.hibernate.models.spi.TypeVariableDetails; @@ -36,7 +36,7 @@ void testNestedGenericHierarchyWithoutJandex() { } void testNestedGenericHierarchy(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, BaseClass.class, IntermediateOne.class, diff --git a/src/test/java/org/hibernate/models/generics/NestedRecursiveInheritanceTest.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/NestedRecursiveInheritanceTest.java similarity index 96% rename from src/test/java/org/hibernate/models/generics/NestedRecursiveInheritanceTest.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/generics/NestedRecursiveInheritanceTest.java index a63414c..99010d4 100644 --- a/src/test/java/org/hibernate/models/generics/NestedRecursiveInheritanceTest.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/NestedRecursiveInheritanceTest.java @@ -3,10 +3,10 @@ import java.util.Map; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassTypeDetails; import org.hibernate.models.spi.FieldDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.TypeDetails; import org.junit.jupiter.api.Test; @@ -40,7 +40,7 @@ void testNestedGenericHierarchyWithoutJandex() { } void testNestedGenericHierarchy(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, Child.class, Parent.class, diff --git a/src/test/java/org/hibernate/models/generics/RecursiveTypeVariableTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/RecursiveTypeVariableTests.java similarity index 90% rename from src/test/java/org/hibernate/models/generics/RecursiveTypeVariableTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/generics/RecursiveTypeVariableTests.java index ad1c1d3..f1c5841 100644 --- a/src/test/java/org/hibernate/models/generics/RecursiveTypeVariableTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/RecursiveTypeVariableTests.java @@ -8,9 +8,9 @@ package org.hibernate.models.generics; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.FieldDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.TypeDetails; import org.junit.jupiter.api.Test; @@ -36,7 +36,7 @@ void testTypeVariableReferenceWithoutJandex() { } void testTypeVariableReference(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, Simple.class ); diff --git a/src/test/java/org/hibernate/models/generics/SimpleTypeVariableTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/SimpleTypeVariableTests.java similarity index 94% rename from src/test/java/org/hibernate/models/generics/SimpleTypeVariableTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/generics/SimpleTypeVariableTests.java index f48f4ab..c34aa54 100644 --- a/src/test/java/org/hibernate/models/generics/SimpleTypeVariableTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/generics/SimpleTypeVariableTests.java @@ -8,11 +8,11 @@ package org.hibernate.models.generics; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassBasedTypeDetails; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassTypeDetails; import org.hibernate.models.spi.FieldDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.TypeDetails; import org.hibernate.models.spi.TypeVariableDetails; @@ -39,7 +39,7 @@ void testParameterizedClassWithoutJandex() { } void testParameterizedClass(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, Simple.class ); diff --git a/src/test/java/org/hibernate/models/members/ArrayTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/ArrayTests.java similarity index 97% rename from src/test/java/org/hibernate/models/members/ArrayTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/members/ArrayTests.java index 26658f9..50430c4 100644 --- a/src/test/java/org/hibernate/models/members/ArrayTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/ArrayTests.java @@ -1,10 +1,10 @@ package org.hibernate.models.members; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassDetailsRegistry; import org.hibernate.models.spi.FieldDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -28,7 +28,7 @@ void testWithoutJandex() { } private void verify(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, SomeClass.class ); diff --git a/src/test/java/org/hibernate/models/members/FieldDetailsTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/FieldDetailsTests.java similarity index 97% rename from src/test/java/org/hibernate/models/members/FieldDetailsTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/members/FieldDetailsTests.java index f5fb5f9..d263ac2 100644 --- a/src/test/java/org/hibernate/models/members/FieldDetailsTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/FieldDetailsTests.java @@ -9,10 +9,10 @@ import java.lang.reflect.Field; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.FieldDetails; import org.hibernate.models.spi.MemberDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -38,7 +38,7 @@ void testWithoutJandex() { } void verify(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, RandomClass.class ); diff --git a/src/test/java/org/hibernate/models/members/MethodDetailsTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/MethodDetailsTests.java similarity index 98% rename from src/test/java/org/hibernate/models/members/MethodDetailsTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/members/MethodDetailsTests.java index 47a72d7..6c08ad5 100644 --- a/src/test/java/org/hibernate/models/members/MethodDetailsTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/MethodDetailsTests.java @@ -9,11 +9,11 @@ import java.lang.reflect.Method; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.internal.jdk.JdkMethodDetails; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.MemberDetails; import org.hibernate.models.spi.MethodDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -40,7 +40,7 @@ void testWithoutJandex() { } void verify(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, RandomClass.class ); diff --git a/src/test/java/org/hibernate/models/members/PluralMemberTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/PluralMemberTests.java similarity index 95% rename from src/test/java/org/hibernate/models/members/PluralMemberTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/members/PluralMemberTests.java index cda69aa..1f8d137 100644 --- a/src/test/java/org/hibernate/models/members/PluralMemberTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/PluralMemberTests.java @@ -13,11 +13,11 @@ import java.util.Set; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassDetailsRegistry; import org.hibernate.models.spi.FieldDetails; import org.hibernate.models.spi.MethodDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -46,7 +46,7 @@ void testWithoutJandex() { } private void verify(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, SimpleEntity.class ); diff --git a/src/test/java/org/hibernate/models/members/RecordTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/RecordTests.java similarity index 90% rename from src/test/java/org/hibernate/models/members/RecordTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/members/RecordTests.java index c171416..12d29b7 100644 --- a/src/test/java/org/hibernate/models/members/RecordTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/RecordTests.java @@ -8,10 +8,10 @@ package org.hibernate.models.members; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.AnnotationTarget; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.RecordComponentDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -35,7 +35,7 @@ void testWithoutJandex() { } void verify(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, Data.class ); diff --git a/src/test/java/org/hibernate/models/members/UnboundWildcardTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/UnboundWildcardTests.java similarity index 95% rename from src/test/java/org/hibernate/models/members/UnboundWildcardTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/members/UnboundWildcardTests.java index 8bd0f1f..6f8c19d 100644 --- a/src/test/java/org/hibernate/models/members/UnboundWildcardTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/members/UnboundWildcardTests.java @@ -3,10 +3,10 @@ import java.util.List; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.FieldDetails; import org.hibernate.models.spi.ParameterizedTypeDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.TypeDetails; import org.hibernate.models.spi.WildcardTypeDetails; @@ -33,7 +33,7 @@ void testWildcardMembersWithoutJandex() { } void testWildcardMembers(Index index) { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( index, Thing.class ); diff --git a/src/test/java/org/hibernate/models/xml/MetadataCompleteTests.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/xml/MetadataCompleteTests.java similarity index 93% rename from src/test/java/org/hibernate/models/xml/MetadataCompleteTests.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/xml/MetadataCompleteTests.java index 4915d8f..09e9134 100644 --- a/src/test/java/org/hibernate/models/xml/MetadataCompleteTests.java +++ b/hibernate-models-jandex/src/test/java/org/hibernate/models/xml/MetadataCompleteTests.java @@ -8,12 +8,12 @@ package org.hibernate.models.xml; import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; import org.hibernate.models.orm.JpaAnnotations; import org.hibernate.models.spi.ClassDetails; import org.hibernate.models.spi.ClassDetailsRegistry; import org.hibernate.models.spi.FieldDetails; import org.hibernate.models.spi.MutableMemberDetails; +import org.hibernate.models.spi.SourceModelBuildingContext; import org.junit.jupiter.api.Test; @@ -31,7 +31,7 @@ public class MetadataCompleteTests { @Test void testIt() { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext( + final SourceModelBuildingContext buildingContext = SourceModelTestHelper.createBuildingContext( (Index) null, SimpleEntity.class ); diff --git a/src/test/java/org/hibernate/models/xml/SimpleEntity.java b/hibernate-models-jandex/src/test/java/org/hibernate/models/xml/SimpleEntity.java similarity index 100% rename from src/test/java/org/hibernate/models/xml/SimpleEntity.java rename to hibernate-models-jandex/src/test/java/org/hibernate/models/xml/SimpleEntity.java diff --git a/hibernate-models-testing/build.gradle b/hibernate-models-testing/build.gradle new file mode 100644 index 0000000..f1b829c --- /dev/null +++ b/hibernate-models-testing/build.gradle @@ -0,0 +1,11 @@ +plugins { + id "java-module" +} + +dependencies { + api project( ":hibernate-models" ) + api jakartaLibs.jpa + + testImplementation platform('org.junit:junit-bom:5.10.0') + testImplementation 'org.junit.jupiter:junit-jupiter' +} \ No newline at end of file diff --git a/src/test/java/org/hibernate/models/MutableInteger.java b/hibernate-models-testing/src/main/java/org/hibernate/models/MutableInteger.java similarity index 87% rename from src/test/java/org/hibernate/models/MutableInteger.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/MutableInteger.java index f1b268a..c28ffa1 100644 --- a/src/test/java/org/hibernate/models/MutableInteger.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/MutableInteger.java @@ -1,8 +1,8 @@ /* * Hibernate, Relational Persistence for Idiomatic Java * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later - * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors */ package org.hibernate.models; diff --git a/src/test/java/org/hibernate/models/annotations/SimpleEntity.java b/hibernate-models-testing/src/main/java/org/hibernate/models/SimpleEntity.java similarity index 95% rename from src/test/java/org/hibernate/models/annotations/SimpleEntity.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/SimpleEntity.java index 562d49b..383cefa 100644 --- a/src/test/java/org/hibernate/models/annotations/SimpleEntity.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/SimpleEntity.java @@ -4,10 +4,12 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright: Red Hat Inc. and Hibernate Authors */ -package org.hibernate.models.annotations; +package org.hibernate.models; import java.util.List; +import org.hibernate.models.annotations.CustomAnnotation; + import jakarta.persistence.Basic; import jakarta.persistence.Cacheable; import jakarta.persistence.CheckConstraint; diff --git a/src/test/java/org/hibernate/models/annotations/CustomAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/annotations/CustomAnnotation.java similarity index 100% rename from src/test/java/org/hibernate/models/annotations/CustomAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/annotations/CustomAnnotation.java diff --git a/src/test/java/org/hibernate/models/annotations/CustomAnnotations.java b/hibernate-models-testing/src/main/java/org/hibernate/models/annotations/CustomAnnotations.java similarity index 100% rename from src/test/java/org/hibernate/models/annotations/CustomAnnotations.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/annotations/CustomAnnotations.java diff --git a/src/test/java/org/hibernate/models/annotations/CustomMetaAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/annotations/CustomMetaAnnotation.java similarity index 100% rename from src/test/java/org/hibernate/models/annotations/CustomMetaAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/annotations/CustomMetaAnnotation.java diff --git a/src/test/java/org/hibernate/models/annotations/EverythingBagel.java b/hibernate-models-testing/src/main/java/org/hibernate/models/annotations/EverythingBagel.java similarity index 100% rename from src/test/java/org/hibernate/models/annotations/EverythingBagel.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/annotations/EverythingBagel.java diff --git a/src/test/java/org/hibernate/models/annotations/Nested.java b/hibernate-models-testing/src/main/java/org/hibernate/models/annotations/Nested.java similarity index 100% rename from src/test/java/org/hibernate/models/annotations/Nested.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/annotations/Nested.java diff --git a/src/test/java/org/hibernate/models/annotations/Status.java b/hibernate-models-testing/src/main/java/org/hibernate/models/annotations/Status.java similarity index 100% rename from src/test/java/org/hibernate/models/annotations/Status.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/annotations/Status.java diff --git a/src/test/java/org/hibernate/models/orm/BasicAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/BasicAnnotation.java similarity index 72% rename from src/test/java/org/hibernate/models/orm/BasicAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/BasicAnnotation.java index c7d17d9..99e820d 100644 --- a/src/test/java/org/hibernate/models/orm/BasicAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/BasicAnnotation.java @@ -8,16 +8,13 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.Basic; import jakarta.persistence.FetchType; -import static org.hibernate.models.internal.jandex.JandexValueHelper.extractOptionalValue; -import static org.hibernate.models.orm.JpaAnnotations.BASIC; /** * @author Steve Ebersole @@ -37,9 +34,9 @@ public BasicAnnotation(Basic usage, SourceModelBuildingContext modelContext) { optional = usage.optional(); } - public BasicAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - fetch = extractOptionalValue( usage, BASIC, "fetch", modelContext ); - optional = extractOptionalValue( usage, BASIC, "optional", modelContext ); + public BasicAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + fetch = (FetchType) attributeValues.get( "fetch" ); + optional = (boolean) attributeValues.get( "optional" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/CacheableAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/CacheableAnnotation.java similarity index 74% rename from src/test/java/org/hibernate/models/orm/CacheableAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/CacheableAnnotation.java index c9763a8..fd577ac 100644 --- a/src/test/java/org/hibernate/models/orm/CacheableAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/CacheableAnnotation.java @@ -8,15 +8,12 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.Cacheable; -import static org.hibernate.models.internal.jandex.JandexValueHelper.extractOptionalValue; - /** * @author Steve Ebersole */ @@ -32,8 +29,8 @@ public CacheableAnnotation(Cacheable usage, SourceModelBuildingContext modelCont value = usage.value(); } - public CacheableAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - value = extractOptionalValue( usage, JpaAnnotations.CACHEABLE, "value", modelContext ); + public CacheableAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + value = (boolean) attributeValues.get( "value" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/CheckConstraintAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/CheckConstraintAnnotation.java similarity index 70% rename from src/test/java/org/hibernate/models/orm/CheckConstraintAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/CheckConstraintAnnotation.java index a03e96f..b93f132 100644 --- a/src/test/java/org/hibernate/models/orm/CheckConstraintAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/CheckConstraintAnnotation.java @@ -8,16 +8,12 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.CheckConstraint; -import static org.hibernate.models.internal.jandex.JandexValueHelper.extractOptionalValue; -import static org.hibernate.models.orm.JpaAnnotations.CHECK_CONSTRAINT; - /** * @author Steve Ebersole */ @@ -38,10 +34,10 @@ public CheckConstraintAnnotation(CheckConstraint usage, SourceModelBuildingConte this.options = usage.options(); } - public CheckConstraintAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - this.name = extractOptionalValue( usage, CHECK_CONSTRAINT, "name", modelContext ); - this.constraint = extractOptionalValue( usage, CHECK_CONSTRAINT, "constraint", modelContext ); - this.options = extractOptionalValue( usage, CHECK_CONSTRAINT, "options", modelContext ); + public CheckConstraintAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + this.name = (String) attributeValues.get( "name" ); + this.constraint = (String) attributeValues.get( "constraint" ); + this.options = (String) attributeValues.get( "options" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/ColumnAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/ColumnAnnotation.java similarity index 75% rename from src/test/java/org/hibernate/models/orm/ColumnAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/ColumnAnnotation.java index 2f2450b..8e339fc 100644 --- a/src/test/java/org/hibernate/models/orm/ColumnAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/ColumnAnnotation.java @@ -8,16 +8,14 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.CheckConstraint; import jakarta.persistence.Column; import static org.hibernate.models.internal.AnnotationUsageHelper.extractRepeatedValues; -import static org.hibernate.models.internal.jandex.JandexValueHelper.extractOptionalValue; import static org.hibernate.models.orm.JpaAnnotations.COLUMN; /** @@ -73,20 +71,20 @@ public ColumnAnnotation(Column usage, SourceModelBuildingContext modelContext) { check = extractRepeatedValues( usage, COLUMN.getAttribute( "check" ), modelContext ); } - public ColumnAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - name = extractOptionalValue( usage, COLUMN, "name", modelContext ); - table = extractOptionalValue( usage, COLUMN, "table", modelContext ); - nullable = extractOptionalValue( usage, COLUMN, "nullable", modelContext ); - unique = extractOptionalValue( usage, COLUMN, "unique", modelContext ); - insertable = extractOptionalValue( usage, COLUMN, "insertable", modelContext ); - updatable = extractOptionalValue( usage, COLUMN, "updatable", modelContext ); - comment = extractOptionalValue( usage, COLUMN, "comment", modelContext ); - columnDefinition = extractOptionalValue( usage, COLUMN, "columnDefinition", modelContext ); - options = extractOptionalValue( usage, COLUMN, "options", modelContext ); - length = extractOptionalValue( usage, COLUMN, "length", modelContext ); - precision = extractOptionalValue( usage, COLUMN, "precision", modelContext ); - scale = extractOptionalValue( usage, COLUMN, "scale", modelContext ); - check = extractOptionalValue( usage, COLUMN, "check", modelContext ); + public ColumnAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + name = (String) attributeValues.get( "name" ); + table = (String) attributeValues.get( "table" ); + nullable = (boolean) attributeValues.get( "nullable" ); + unique = (boolean) attributeValues.get( "unique" ); + insertable = (boolean) attributeValues.get( "insertable" ); + updatable = (boolean) attributeValues.get( "updatable" ); + comment = (String) attributeValues.get( "comment" ); + columnDefinition = (String) attributeValues.get( "columnDefinition" ); + options = (String) attributeValues.get( "options" ); + length = (int) attributeValues.get( "length" ); + precision = (int) attributeValues.get( "precision" ); + scale = (int) attributeValues.get( "scale" ); + check = (CheckConstraint[]) attributeValues.get( "check" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/ColumnDetails.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/ColumnDetails.java similarity index 100% rename from src/test/java/org/hibernate/models/orm/ColumnDetails.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/ColumnDetails.java diff --git a/src/test/java/org/hibernate/models/orm/CommonTableDetails.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/CommonTableDetails.java similarity index 100% rename from src/test/java/org/hibernate/models/orm/CommonTableDetails.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/CommonTableDetails.java diff --git a/src/test/java/org/hibernate/models/orm/DatabaseObjectDetails.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/DatabaseObjectDetails.java similarity index 100% rename from src/test/java/org/hibernate/models/orm/DatabaseObjectDetails.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/DatabaseObjectDetails.java diff --git a/src/test/java/org/hibernate/models/orm/EntityAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/EntityAnnotation.java similarity index 74% rename from src/test/java/org/hibernate/models/orm/EntityAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/EntityAnnotation.java index 5b1fd4f..fb048ca 100644 --- a/src/test/java/org/hibernate/models/orm/EntityAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/EntityAnnotation.java @@ -8,12 +8,10 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; -import org.jboss.jandex.AnnotationValue; - import jakarta.persistence.Entity; /** @@ -31,9 +29,8 @@ public EntityAnnotation(Entity jdkAnnotation, SourceModelBuildingContext modelCo this.name = jdkAnnotation.name(); } - public EntityAnnotation(AnnotationInstance jandexAnnotation, SourceModelBuildingContext modelContext) { - final AnnotationValue nameValue = jandexAnnotation.value( "name" ); - this.name = nameValue == null ? "" : nameValue.asString(); + public EntityAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + this.name = (String) attributeValues.get( "name" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/ForeignKeyAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/ForeignKeyAnnotation.java similarity index 70% rename from src/test/java/org/hibernate/models/orm/ForeignKeyAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/ForeignKeyAnnotation.java index ef19a84..abc4d3b 100644 --- a/src/test/java/org/hibernate/models/orm/ForeignKeyAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/ForeignKeyAnnotation.java @@ -8,17 +8,13 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; -import org.hibernate.models.internal.jandex.JandexValueHelper; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.ConstraintMode; import jakarta.persistence.ForeignKey; -import static org.hibernate.models.orm.JpaAnnotations.FOREIGN_KEY; - /** * @author Steve Ebersole */ @@ -43,11 +39,11 @@ public ForeignKeyAnnotation(ForeignKey usage, SourceModelBuildingContext modelCo options = usage.options(); } - public ForeignKeyAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - name = JandexValueHelper.extractValue( usage, FOREIGN_KEY.getAttribute( "name" ), modelContext ); - value = JandexValueHelper.extractValue( usage, FOREIGN_KEY.getAttribute( "value" ), modelContext ); - foreignKeyDefinition = JandexValueHelper.extractValue( usage, FOREIGN_KEY.getAttribute( "foreignKeyDefinition" ), modelContext ); - options = JandexValueHelper.extractValue( usage, FOREIGN_KEY.getAttribute( "options" ), modelContext ); + public ForeignKeyAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + name = (String) attributeValues.get( "name" ); + value = (ConstraintMode) attributeValues.get( "value" ); + foreignKeyDefinition = (String) attributeValues.get( "foreignKeyDefinition" ); + options = (String) attributeValues.get( "options" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/IdAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/IdAnnotation.java similarity index 82% rename from src/test/java/org/hibernate/models/orm/IdAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/IdAnnotation.java index 04930d4..4feb849 100644 --- a/src/test/java/org/hibernate/models/orm/IdAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/IdAnnotation.java @@ -8,11 +8,10 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.Id; /** @@ -26,7 +25,7 @@ public IdAnnotation(SourceModelBuildingContext modelContext) { public IdAnnotation(Id jdkAnnotation, SourceModelBuildingContext modelContext) { } - public IdAnnotation(AnnotationInstance jandexAnnotation, SourceModelBuildingContext modelContext) { + public IdAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { } @Override diff --git a/src/test/java/org/hibernate/models/orm/IndexAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/IndexAnnotation.java similarity index 69% rename from src/test/java/org/hibernate/models/orm/IndexAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/IndexAnnotation.java index 828b794..9122d8e 100644 --- a/src/test/java/org/hibernate/models/orm/IndexAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/IndexAnnotation.java @@ -8,16 +8,12 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; -import org.hibernate.models.internal.jandex.JandexValueHelper; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.Index; -import static org.hibernate.models.orm.JpaAnnotations.INDEX; - /** * @author Steve Ebersole */ @@ -41,11 +37,11 @@ public IndexAnnotation(Index usage, SourceModelBuildingContext modelContext) { options = usage.options(); } - public IndexAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - name = JandexValueHelper.extractValue( usage, INDEX.getAttribute( "name" ), modelContext ); - columnList = JandexValueHelper.extractValue( usage, INDEX.getAttribute( "columnList" ), modelContext ); - unique = JandexValueHelper.extractValue( usage, INDEX.getAttribute( "unique" ), modelContext ); - options = JandexValueHelper.extractValue( usage, INDEX.getAttribute( "options" ), modelContext ); + public IndexAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + name = (String) attributeValues.get( "name" ); + columnList = (String) attributeValues.get( "columnList" ); + unique = (boolean) attributeValues.get( "unique" ); + options = (String) attributeValues.get( "options" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/JpaAnnotations.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/JpaAnnotations.java similarity index 100% rename from src/test/java/org/hibernate/models/orm/JpaAnnotations.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/JpaAnnotations.java diff --git a/src/test/java/org/hibernate/models/orm/Named.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/Named.java similarity index 100% rename from src/test/java/org/hibernate/models/orm/Named.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/Named.java diff --git a/src/test/java/org/hibernate/models/orm/NamedNativeQueriesAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedNativeQueriesAnnotation.java similarity index 84% rename from src/test/java/org/hibernate/models/orm/NamedNativeQueriesAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedNativeQueriesAnnotation.java index 54c69fe..8c17043 100644 --- a/src/test/java/org/hibernate/models/orm/NamedNativeQueriesAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedNativeQueriesAnnotation.java @@ -8,12 +8,11 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.internal.AnnotationUsageHelper; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.NamedNativeQueries; import jakarta.persistence.NamedNativeQuery; @@ -34,8 +33,8 @@ public NamedNativeQueriesAnnotation(NamedNativeQueries usage, SourceModelBuildin value = AnnotationUsageHelper.extractRepeatedValues( usage, NAMED_NATIVE_QUERIES, modelContext ); } - public NamedNativeQueriesAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - value = AnnotationUsageHelper.extractRepeatedValues( usage, NAMED_NATIVE_QUERIES, modelContext ); + public NamedNativeQueriesAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + value = (NamedNativeQuery[]) attributeValues.get( "value" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/NamedNativeQueryAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedNativeQueryAnnotation.java similarity index 76% rename from src/test/java/org/hibernate/models/orm/NamedNativeQueryAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedNativeQueryAnnotation.java index 5a89416..d89c034 100644 --- a/src/test/java/org/hibernate/models/orm/NamedNativeQueryAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedNativeQueryAnnotation.java @@ -8,20 +8,18 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.ColumnResult; import jakarta.persistence.ConstructorResult; import jakarta.persistence.EntityResult; import jakarta.persistence.NamedNativeQuery; import jakarta.persistence.QueryHint; +import static org.hibernate.models.internal.AnnotationHelper.extractValue; import static org.hibernate.models.internal.AnnotationUsageHelper.extractRepeatedValues; -import static org.hibernate.models.internal.jandex.JandexValueHelper.extractOptionalValue; -import static org.hibernate.models.internal.jandex.JandexValueHelper.extractValue; import static org.hibernate.models.orm.JpaAnnotations.NAMED_NATIVE_QUERY; /** @@ -62,17 +60,17 @@ public NamedNativeQueryAnnotation(NamedNativeQuery usage, SourceModelBuildingCon hints = extractRepeatedValues( usage, NAMED_NATIVE_QUERY.getAttribute( "hints" ), modelContext ); } - public NamedNativeQueryAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - name = usage.value( "name" ).asString(); - query = usage.value( "query" ).asString(); + public NamedNativeQueryAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + name = (String) attributeValues.get( "name" ); + query = (String) attributeValues.get( "query" ); - resultClass = extractValue( usage, NAMED_NATIVE_QUERY.getAttribute( "resultClass" ), modelContext ); - resultSetMapping = extractOptionalValue( usage, NAMED_NATIVE_QUERY.getAttribute( "resultSetMapping" ), modelContext ); - entityResults = extractRepeatedValues( usage, NAMED_NATIVE_QUERY.getAttribute( "entities" ), modelContext ); - constructorResults = extractRepeatedValues( usage, NAMED_NATIVE_QUERY.getAttribute( "classes" ), modelContext ); - columnResults = extractRepeatedValues( usage, NAMED_NATIVE_QUERY.getAttribute( "columns" ), modelContext ); + resultClass = (Class) attributeValues.get( "resultClass" ); + resultSetMapping = (String) attributeValues.get( "resultSetMapping" ); + entityResults = (EntityResult[]) attributeValues.get( "entities" ); + constructorResults = (ConstructorResult[]) attributeValues.get( "classes" ); + columnResults = (ColumnResult[]) attributeValues.get( "columns" ); - hints = extractRepeatedValues( usage, NAMED_NATIVE_QUERY.getAttribute( "hints" ), modelContext ); + hints = (QueryHint[]) attributeValues.get( "hints" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/NamedQueriesAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedQueriesAnnotation.java similarity index 83% rename from src/test/java/org/hibernate/models/orm/NamedQueriesAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedQueriesAnnotation.java index 6759215..4ac6d3b 100644 --- a/src/test/java/org/hibernate/models/orm/NamedQueriesAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedQueriesAnnotation.java @@ -8,12 +8,11 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.internal.AnnotationUsageHelper; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.NamedQueries; import jakarta.persistence.NamedQuery; @@ -33,8 +32,8 @@ public NamedQueriesAnnotation(NamedQueries usage, SourceModelBuildingContext mod value = AnnotationUsageHelper.extractRepeatedValues( usage, NAMED_QUERIES, modelContext ); } - public NamedQueriesAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - value = AnnotationUsageHelper.extractRepeatedValues( usage, NAMED_QUERIES, modelContext ); + public NamedQueriesAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + value = (NamedQuery[]) attributeValues.get( "value" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/NamedQueryAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedQueryAnnotation.java similarity index 85% rename from src/test/java/org/hibernate/models/orm/NamedQueryAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedQueryAnnotation.java index 4058042..e7d53e4 100644 --- a/src/test/java/org/hibernate/models/orm/NamedQueryAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/NamedQueryAnnotation.java @@ -8,11 +8,10 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.LockModeType; import jakarta.persistence.NamedQuery; import jakarta.persistence.QueryHint; @@ -41,10 +40,10 @@ public NamedQueryAnnotation(NamedQuery usage, SourceModelBuildingContext modelCo hints = extractRepeatedValues( usage, NAMED_QUERY.getAttribute( "hints" ), modelContext ); } - public NamedQueryAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - name = usage.value( "name" ).asString(); - query = usage.value( "query" ).asString(); - hints = extractRepeatedValues( usage, NAMED_QUERY.getAttribute( "hints" ), modelContext ); + public NamedQueryAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + name = (String) attributeValues.get( "name" ); + query = attributeValues.get( "query" ).toString(); + hints = (QueryHint[]) attributeValues.get( "hints" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/OrmAnnotationHelper.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/OrmAnnotationHelper.java similarity index 100% rename from src/test/java/org/hibernate/models/orm/OrmAnnotationHelper.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/OrmAnnotationHelper.java diff --git a/src/test/java/org/hibernate/models/orm/RepeatableContainer.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/RepeatableContainer.java similarity index 100% rename from src/test/java/org/hibernate/models/orm/RepeatableContainer.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/RepeatableContainer.java diff --git a/src/test/java/org/hibernate/models/orm/SecondaryTableAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/SecondaryTableAnnotation.java similarity index 76% rename from src/test/java/org/hibernate/models/orm/SecondaryTableAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/SecondaryTableAnnotation.java index 4f44eca..2cdda4b 100644 --- a/src/test/java/org/hibernate/models/orm/SecondaryTableAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/SecondaryTableAnnotation.java @@ -8,11 +8,10 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.CheckConstraint; import jakarta.persistence.ForeignKey; import jakarta.persistence.Index; @@ -21,7 +20,6 @@ import jakarta.persistence.UniqueConstraint; import static org.hibernate.models.internal.AnnotationUsageHelper.extractRepeatedValues; -import static org.hibernate.models.internal.jandex.JandexValueHelper.extractOptionalValue; import static org.hibernate.models.orm.JpaAnnotations.SECONDARY_TABLE; /** @@ -65,17 +63,17 @@ public SecondaryTableAnnotation(SecondaryTable usage, SourceModelBuildingContext foreignKey = new ForeignKeyAnnotation( usage.foreignKey(), modelContext ); } - public SecondaryTableAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - name = usage.value( "name" ).asString(); - catalog = extractOptionalValue( usage, SECONDARY_TABLE.getAttribute( "catalog" ), modelContext ); - schema = extractOptionalValue( usage, SECONDARY_TABLE.getAttribute( "schema" ), modelContext ); - comment = extractOptionalValue( usage, SECONDARY_TABLE.getAttribute( "comment" ), modelContext ); - options = extractOptionalValue( usage, SECONDARY_TABLE.getAttribute( "options" ), modelContext ); - uniqueConstraints = extractRepeatedValues( usage, SECONDARY_TABLE.getAttribute( "uniqueConstraints" ), modelContext ); - indexes = extractRepeatedValues( usage, SECONDARY_TABLE.getAttribute( "indexes" ), modelContext ); - check = extractRepeatedValues( usage, SECONDARY_TABLE.getAttribute( "check" ), modelContext ); - primaryKeyJoinColumns = extractRepeatedValues( usage, SECONDARY_TABLE.getAttribute( "pkJoinColumns" ), modelContext ); - foreignKey = extractOptionalValue( usage, SECONDARY_TABLE.getAttribute( "foreignKey" ), modelContext ); + public SecondaryTableAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + name = attributeValues.get( "name" ).toString(); + catalog = (String) attributeValues.get( "catalog" ); + schema = (String) attributeValues.get( "schema" ); + comment = (String) attributeValues.get( "comment" ); + options = (String) attributeValues.get( "options" ); + uniqueConstraints = (UniqueConstraint[]) attributeValues.get( "uniqueConstraints" ); + indexes = (Index[]) attributeValues.get( "indexes" ); + check = (CheckConstraint[]) attributeValues.get( "check" ); + primaryKeyJoinColumns = (PrimaryKeyJoinColumn[]) attributeValues.get( "pkJoinColumns" ); + foreignKey = (ForeignKey) attributeValues.get( "foreignKey" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/SecondaryTablesAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/SecondaryTablesAnnotation.java similarity index 84% rename from src/test/java/org/hibernate/models/orm/SecondaryTablesAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/SecondaryTablesAnnotation.java index 6fa34a9..6a7354e 100644 --- a/src/test/java/org/hibernate/models/orm/SecondaryTablesAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/SecondaryTablesAnnotation.java @@ -8,12 +8,11 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.internal.AnnotationUsageHelper; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.SecondaryTable; import jakarta.persistence.SecondaryTables; @@ -35,8 +34,8 @@ public SecondaryTablesAnnotation(SecondaryTables usage, SourceModelBuildingConte } - public SecondaryTablesAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - value = AnnotationUsageHelper.extractRepeatedValues( usage, SECONDARY_TABLES, modelContext ); + public SecondaryTablesAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + value = (SecondaryTable[]) attributeValues.get( "value" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/SequenceGeneratorAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/SequenceGeneratorAnnotation.java similarity index 81% rename from src/test/java/org/hibernate/models/orm/SequenceGeneratorAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/SequenceGeneratorAnnotation.java index b1ef879..83edf44 100644 --- a/src/test/java/org/hibernate/models/orm/SequenceGeneratorAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/SequenceGeneratorAnnotation.java @@ -8,11 +8,10 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.SequenceGenerator; /** @@ -48,14 +47,14 @@ public SequenceGeneratorAnnotation(SequenceGenerator usage, SourceModelBuildingC options = usage.options(); } - public SequenceGeneratorAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - name = usage.value( "name" ).asString(); - sequenceName = usage.value( "sequenceName" ).asString(); - catalog = usage.value( "catalog" ).asString(); - schema = usage.value( "schema" ).asString(); - initialValue = usage.value( "initialValue" ).asInt(); - allocationSize = usage.value( "allocationSize" ).asInt(); - options = usage.value( "options" ).asString(); + public SequenceGeneratorAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + name = (String) attributeValues.get( "name" ); + sequenceName = (String) attributeValues.get( "sequenceName" ); + catalog = (String) attributeValues.get( "catalog" ); + schema = (String) attributeValues.get( "schema" ); + initialValue = (int) attributeValues.get( "initialValue" ); + allocationSize = (int) attributeValues.get( "allocationSize" ); + options = (String) attributeValues.get( "options" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/SequenceGeneratorsAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/SequenceGeneratorsAnnotation.java similarity index 84% rename from src/test/java/org/hibernate/models/orm/SequenceGeneratorsAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/SequenceGeneratorsAnnotation.java index 3d47b4f..388285b 100644 --- a/src/test/java/org/hibernate/models/orm/SequenceGeneratorsAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/SequenceGeneratorsAnnotation.java @@ -8,12 +8,11 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.internal.AnnotationUsageHelper; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.SequenceGenerator; import jakarta.persistence.SequenceGenerators; @@ -35,8 +34,8 @@ public SequenceGeneratorsAnnotation(SequenceGenerators usage, SourceModelBuildin } - public SequenceGeneratorsAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - value = AnnotationUsageHelper.extractRepeatedValues( usage, SEQUENCE_GENERATORS, modelContext ); + public SequenceGeneratorsAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + value = (SequenceGenerator[]) attributeValues.get( "value" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/TableAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/TableAnnotation.java similarity index 74% rename from src/test/java/org/hibernate/models/orm/TableAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/TableAnnotation.java index 1294bbf..0afcf95 100644 --- a/src/test/java/org/hibernate/models/orm/TableAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/TableAnnotation.java @@ -8,19 +8,16 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.CheckConstraint; import jakarta.persistence.Index; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; import static org.hibernate.models.internal.AnnotationUsageHelper.extractRepeatedValues; -import static org.hibernate.models.internal.jandex.JandexValueHelper.extractOptionalValue; -import static org.hibernate.models.orm.JpaAnnotations.SECONDARY_TABLE; import static org.hibernate.models.orm.JpaAnnotations.TABLE; /** @@ -59,15 +56,15 @@ public TableAnnotation(Table usage, SourceModelBuildingContext modelContext) { check = extractRepeatedValues( usage, TABLE.getAttribute( "check" ), modelContext ); } - public TableAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { - name = usage.value( "name" ).asString(); - catalog = extractOptionalValue( usage, SECONDARY_TABLE.getAttribute( "catalog" ), modelContext ); - schema = extractOptionalValue( usage, SECONDARY_TABLE.getAttribute( "schema" ), modelContext ); - comment = extractOptionalValue( usage, SECONDARY_TABLE.getAttribute( "comment" ), modelContext ); - options = extractOptionalValue( usage, SECONDARY_TABLE.getAttribute( "options" ), modelContext ); - uniqueConstraints = extractRepeatedValues( usage, TABLE.getAttribute( "uniqueConstraints" ), modelContext ); - indexes = extractRepeatedValues( usage, TABLE.getAttribute( "indexes" ), modelContext ); - check = extractRepeatedValues( usage, TABLE.getAttribute( "check" ), modelContext ); + public TableAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { + name = (String) attributeValues.get( "name" ); + catalog = (String) attributeValues.get( "catalog" ); + schema = (String) attributeValues.get( "schema" ); + comment = (String) attributeValues.get( "comment" ); + options = (String) attributeValues.get( "options" ); + uniqueConstraints = (UniqueConstraint[]) attributeValues.get( "uniqueConstraints" ); + indexes = (Index[]) attributeValues.get( "indexes" ); + check = (CheckConstraint[]) attributeValues.get( "check" ); } @Override diff --git a/src/test/java/org/hibernate/models/orm/TransientAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/TransientAnnotation.java similarity index 83% rename from src/test/java/org/hibernate/models/orm/TransientAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/TransientAnnotation.java index 4565d79..cc5db5f 100644 --- a/src/test/java/org/hibernate/models/orm/TransientAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/TransientAnnotation.java @@ -8,11 +8,10 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.Transient; /** @@ -24,7 +23,7 @@ public TransientAnnotation(SourceModelBuildingContext modelContext) { } public TransientAnnotation(Transient source, SourceModelBuildingContext modelContext) { } - public TransientAnnotation(AnnotationInstance source, SourceModelBuildingContext modelContext) { + public TransientAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { } @Override diff --git a/src/test/java/org/hibernate/models/orm/UniqueConstraintAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/UniqueConstraintAnnotation.java similarity index 90% rename from src/test/java/org/hibernate/models/orm/UniqueConstraintAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/orm/UniqueConstraintAnnotation.java index 0aea8aa..dc8f521 100644 --- a/src/test/java/org/hibernate/models/orm/UniqueConstraintAnnotation.java +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/orm/UniqueConstraintAnnotation.java @@ -8,11 +8,10 @@ package org.hibernate.models.orm; import java.lang.annotation.Annotation; +import java.util.Map; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - import jakarta.persistence.UniqueConstraint; /** @@ -33,7 +32,7 @@ public UniqueConstraintAnnotation(UniqueConstraint usage, SourceModelBuildingCon throw new UnsupportedOperationException( "Not implemented yet" ); } - public UniqueConstraintAnnotation(AnnotationInstance usage, SourceModelBuildingContext modelContext) { + public UniqueConstraintAnnotation(Map attributeValues, SourceModelBuildingContext modelContext) { throw new UnsupportedOperationException( "Not implemented yet" ); } diff --git a/src/test/java/org/hibernate/models/pkg/CustomAnnotation.java b/hibernate-models-testing/src/main/java/org/hibernate/models/pkg/CustomAnnotation.java similarity index 100% rename from src/test/java/org/hibernate/models/pkg/CustomAnnotation.java rename to hibernate-models-testing/src/main/java/org/hibernate/models/pkg/CustomAnnotation.java diff --git a/hibernate-models-testing/src/main/java/org/hibernate/models/pkg/package-info.java b/hibernate-models-testing/src/main/java/org/hibernate/models/pkg/package-info.java new file mode 100644 index 0000000..8bd4bce --- /dev/null +++ b/hibernate-models-testing/src/main/java/org/hibernate/models/pkg/package-info.java @@ -0,0 +1,9 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ + +@CustomAnnotation +package org.hibernate.models.pkg; diff --git a/hibernate-models/build.gradle b/hibernate-models/build.gradle new file mode 100644 index 0000000..4626a78 --- /dev/null +++ b/hibernate-models/build.gradle @@ -0,0 +1,5 @@ +plugins { + id "published-java-module" +} + +description = "A de-typed abstraction over reflection and annotations" \ No newline at end of file diff --git a/src/main/java/org/hibernate/models/AnnotationAccessException.java b/hibernate-models/src/main/java/org/hibernate/models/AnnotationAccessException.java similarity index 100% rename from src/main/java/org/hibernate/models/AnnotationAccessException.java rename to hibernate-models/src/main/java/org/hibernate/models/AnnotationAccessException.java diff --git a/src/main/java/org/hibernate/models/IllegalCastException.java b/hibernate-models/src/main/java/org/hibernate/models/IllegalCastException.java similarity index 100% rename from src/main/java/org/hibernate/models/IllegalCastException.java rename to hibernate-models/src/main/java/org/hibernate/models/IllegalCastException.java diff --git a/src/main/java/org/hibernate/models/Incubating.java b/hibernate-models/src/main/java/org/hibernate/models/Incubating.java similarity index 100% rename from src/main/java/org/hibernate/models/Incubating.java rename to hibernate-models/src/main/java/org/hibernate/models/Incubating.java diff --git a/src/main/java/org/hibernate/models/Internal.java b/hibernate-models/src/main/java/org/hibernate/models/Internal.java similarity index 100% rename from src/main/java/org/hibernate/models/Internal.java rename to hibernate-models/src/main/java/org/hibernate/models/Internal.java diff --git a/src/main/java/org/hibernate/models/ModelsException.java b/hibernate-models/src/main/java/org/hibernate/models/ModelsException.java similarity index 100% rename from src/main/java/org/hibernate/models/ModelsException.java rename to hibernate-models/src/main/java/org/hibernate/models/ModelsException.java diff --git a/src/main/java/org/hibernate/models/UnhandledMethodException.java b/hibernate-models/src/main/java/org/hibernate/models/UnhandledMethodException.java similarity index 100% rename from src/main/java/org/hibernate/models/UnhandledMethodException.java rename to hibernate-models/src/main/java/org/hibernate/models/UnhandledMethodException.java diff --git a/src/main/java/org/hibernate/models/UnknownAnnotationAttributeException.java b/hibernate-models/src/main/java/org/hibernate/models/UnknownAnnotationAttributeException.java similarity index 100% rename from src/main/java/org/hibernate/models/UnknownAnnotationAttributeException.java rename to hibernate-models/src/main/java/org/hibernate/models/UnknownAnnotationAttributeException.java diff --git a/src/main/java/org/hibernate/models/UnknownClassException.java b/hibernate-models/src/main/java/org/hibernate/models/UnknownClassException.java similarity index 100% rename from src/main/java/org/hibernate/models/UnknownClassException.java rename to hibernate-models/src/main/java/org/hibernate/models/UnknownClassException.java diff --git a/src/main/java/org/hibernate/models/internal/AbstractAnnotationDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AbstractAnnotationDescriptor.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/AbstractAnnotationDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/AbstractAnnotationDescriptor.java diff --git a/src/main/java/org/hibernate/models/internal/AbstractAnnotationDescriptorRegistry.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AbstractAnnotationDescriptorRegistry.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/AbstractAnnotationDescriptorRegistry.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/AbstractAnnotationDescriptorRegistry.java diff --git a/src/main/java/org/hibernate/models/internal/AbstractAnnotationTarget.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AbstractAnnotationTarget.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/AbstractAnnotationTarget.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/AbstractAnnotationTarget.java diff --git a/hibernate-models/src/main/java/org/hibernate/models/internal/AbstractClassDetailsRegistry.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AbstractClassDetailsRegistry.java new file mode 100644 index 0000000..a68630a --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/AbstractClassDetailsRegistry.java @@ -0,0 +1,129 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.models.internal; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.hibernate.models.UnknownClassException; +import org.hibernate.models.spi.ClassDetails; +import org.hibernate.models.spi.ClassDetailsBuilder; +import org.hibernate.models.spi.SourceModelBuildingContext; +import org.hibernate.models.spi.VoidTypeDetails; + +/** + * @author Steve Ebersole + */ +public abstract class AbstractClassDetailsRegistry implements MutableClassDetailsRegistry { + protected final SourceModelBuildingContext context; + + protected final Map classDetailsMap; + + // subtype per type + protected final Map> subTypeClassDetailsMap; + + protected AbstractClassDetailsRegistry(SourceModelBuildingContext context) { + this( new ConcurrentHashMap<>(), new ConcurrentHashMap<>(), context ); + } + + protected AbstractClassDetailsRegistry( + Map classDetailsMap, + Map> subTypeClassDetailsMap, + SourceModelBuildingContext context) { + this.classDetailsMap = classDetailsMap; + this.subTypeClassDetailsMap = subTypeClassDetailsMap; + this.context = context; + + classDetailsMap.put( ClassDetails.OBJECT_CLASS_DETAILS.getName(), ClassDetails.OBJECT_CLASS_DETAILS ); + classDetailsMap.put( ClassDetails.CLASS_CLASS_DETAILS.getName(), ClassDetails.CLASS_CLASS_DETAILS ); + classDetailsMap.put( ClassDetails.VOID_CLASS_DETAILS.getName(), ClassDetails.VOID_CLASS_DETAILS ); + classDetailsMap.put( ClassDetails.VOID_OBJECT_CLASS_DETAILS.getName(), ClassDetails.VOID_OBJECT_CLASS_DETAILS ); + } + + protected abstract ClassDetailsBuilder getClassDetailsBuilder(); + + @Override + public List getDirectSubTypes(String superTypeName) { + return subTypeClassDetailsMap.get( superTypeName ); + } + + @Override + public void forEachDirectSubType(String superTypeName, ClassDetailsConsumer consumer) { + final List directSubTypes = getDirectSubTypes( superTypeName ); + if ( directSubTypes == null ) { + return; + } + for ( int i = 0; i < directSubTypes.size(); i++ ) { + consumer.consume( directSubTypes.get( i ) ); + } + } + + @Override + public ClassDetails findClassDetails(String name) { + return classDetailsMap.get( name ); + } + + @Override + public void forEachClassDetails(ClassDetailsConsumer consumer) { + for ( Map.Entry entry : classDetailsMap.entrySet() ) { + consumer.consume( entry.getValue() ); + } + } + + @Override + public ClassDetails resolveClassDetails(String name) { + if ( name == null ) { + throw new IllegalArgumentException( "`name` cannot be null" ); + } + + final ClassDetails existing = classDetailsMap.get( name ); + if ( existing != null ) { + return existing; + } + + return createClassDetails( name ); + } + + protected ClassDetails createClassDetails(String name) { + try { + final ClassDetails created = getClassDetailsBuilder().buildClassDetails( name, context ); + addClassDetails( name, created ); + return created; + } + catch (UnknownClassException e) { + // see if it might be a package name... + try { + return getClassDetailsBuilder().buildClassDetails( name + ".package-info", context ); + } + catch (UnknownClassException noPackage) { + throw e; + } + } + } + + @Override + public void addClassDetails(ClassDetails classDetails) { + addClassDetails( classDetails.getClassName(), classDetails ); + } + + @Override + public void addClassDetails(String name, ClassDetails classDetails) { + classDetailsMap.put( name, classDetails ); + + if ( classDetails.getSuperClass() != null ) { + List subTypes = subTypeClassDetailsMap.get( classDetails.getSuperClass().getName() ); + //noinspection Java8MapApi + if ( subTypes == null ) { + subTypes = new ArrayList<>(); + subTypeClassDetailsMap.put( classDetails.getSuperClass().getName(), subTypes ); + } + subTypes.add( classDetails ); + } + } +} diff --git a/hibernate-models/src/main/java/org/hibernate/models/internal/AbstractModelBuildingContext.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AbstractModelBuildingContext.java new file mode 100644 index 0000000..343f069 --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/AbstractModelBuildingContext.java @@ -0,0 +1,72 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ + +package org.hibernate.models.internal; + +import java.lang.annotation.Annotation; + +import org.hibernate.models.internal.jdk.JdkBuilders; +import org.hibernate.models.spi.AnnotationDescriptor; +import org.hibernate.models.spi.ClassDetails; +import org.hibernate.models.spi.ClassLoading; +import org.hibernate.models.spi.RegistryPrimer; +import org.hibernate.models.spi.SourceModelBuildingContext; + +/** + * Base support for SourceModelBuildingContext implementations + * + * @author Steve Ebersole + */ +public abstract class AbstractModelBuildingContext implements SourceModelBuildingContext { + private final ClassLoading classLoadingAccess; + + public AbstractModelBuildingContext(ClassLoading classLoadingAccess) { + this.classLoadingAccess = classLoadingAccess; + } + + @Override + public abstract MutableAnnotationDescriptorRegistry getAnnotationDescriptorRegistry(); + + @Override + public abstract MutableClassDetailsRegistry getClassDetailsRegistry(); + + @Override + public ClassLoading getClassLoading() { + return classLoadingAccess; + } + + protected void primeRegistries(RegistryPrimer registryPrimer) { + BaseLineJavaTypes.forEachJavaType( this::primeClassDetails ); + + if ( registryPrimer != null ) { + registryPrimer.primeRegistries( new RegistryContributions(), this ); + } + } + + private void primeClassDetails(Class javaType) { + // Since we have a Class reference already, it is safe to directly use + // the reflection + getClassDetailsRegistry().resolveClassDetails( javaType.getName() ); + } + + private void primeAnnotation(AnnotationDescriptor descriptor) { + getAnnotationDescriptorRegistry().register( descriptor ); + primeClassDetails( descriptor.getAnnotationType() ); + } + + private class RegistryContributions implements RegistryPrimer.Contributions { + @Override + public void registerAnnotation(AnnotationDescriptor descriptor) { + primeAnnotation( descriptor ); + } + + @Override + public void registerClass(ClassDetails details) { + getClassDetailsRegistry().addClassDetails( details ); + } + } +} diff --git a/src/main/java/org/hibernate/models/internal/AbstractTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AbstractTypeDescriptor.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/AbstractTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/AbstractTypeDescriptor.java diff --git a/src/main/java/org/hibernate/models/internal/AnnotationDescriptorBuilding.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationDescriptorBuilding.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/AnnotationDescriptorBuilding.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationDescriptorBuilding.java diff --git a/src/main/java/org/hibernate/models/internal/AnnotationDescriptorRegistryStandard.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationDescriptorRegistryStandard.java similarity index 79% rename from src/main/java/org/hibernate/models/internal/AnnotationDescriptorRegistryStandard.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationDescriptorRegistryStandard.java index 70369cf..516f522 100644 --- a/src/main/java/org/hibernate/models/internal/AnnotationDescriptorRegistryStandard.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationDescriptorRegistryStandard.java @@ -10,7 +10,7 @@ import java.lang.annotation.Repeatable; import org.hibernate.models.spi.AnnotationDescriptor; -import org.hibernate.models.spi.AnnotationDescriptorRegistry; +import org.hibernate.models.spi.SourceModelBuildingContext; import static org.hibernate.models.internal.ModelsAnnotationLogging.MODELS_ANNOTATION_LOGGER; @@ -19,13 +19,17 @@ * * @author Steve Ebersole */ -public class AnnotationDescriptorRegistryStandard extends AbstractAnnotationDescriptorRegistry { - private final SourceModelBuildingContextImpl modelBuildingContext; +public class AnnotationDescriptorRegistryStandard extends AbstractAnnotationDescriptorRegistry implements MutableAnnotationDescriptorRegistry { + private final SourceModelBuildingContext modelBuildingContext; - public AnnotationDescriptorRegistryStandard(SourceModelBuildingContextImpl modelBuildingContext) { + public AnnotationDescriptorRegistryStandard(SourceModelBuildingContext modelBuildingContext) { this.modelBuildingContext = modelBuildingContext; } + protected SourceModelBuildingContext getModelBuildingContext() { + return modelBuildingContext; + } + public void register(AnnotationDescriptor descriptor) { MODELS_ANNOTATION_LOGGER.tracef( "Registering AnnotationDescriptor - %s", descriptor ); descriptorMap.put( descriptor.getAnnotationType(), descriptor ); @@ -67,20 +71,18 @@ private AnnotationDescriptor buildAdHocAnnotationDescr containerDescriptor = null; } - final StandardAnnotationDescriptor descriptor = new StandardAnnotationDescriptor<>( - javaType, - containerDescriptor, - modelBuildingContext - ); + final AnnotationDescriptor descriptor = buildAnnotationDescriptor( javaType, containerDescriptor ); descriptorMap.put( javaType, descriptor ); return descriptor; } - @Override - public AnnotationDescriptorRegistry makeImmutableCopy() { - return new AnnotationDescriptorRegistryImmutable( - java.util.Map.copyOf( descriptorMap ), - java.util.Map.copyOf( repeatableByContainerMap ) + protected AnnotationDescriptor buildAnnotationDescriptor( + Class javaType, + AnnotationDescriptor containerDescriptor) { + return new StandardAnnotationDescriptor<>( + javaType, + containerDescriptor, + modelBuildingContext ); } } diff --git a/src/main/java/org/hibernate/models/internal/AnnotationHelper.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationHelper.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/AnnotationHelper.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationHelper.java diff --git a/src/main/java/org/hibernate/models/internal/AnnotationProxy.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationProxy.java similarity index 79% rename from src/main/java/org/hibernate/models/internal/AnnotationProxy.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationProxy.java index 6d7770e..3d54b96 100644 --- a/src/main/java/org/hibernate/models/internal/AnnotationProxy.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationProxy.java @@ -14,19 +14,13 @@ import java.util.Map; import org.hibernate.models.UnhandledMethodException; -import org.hibernate.models.internal.jandex.AnnotationUsageBuilder; import org.hibernate.models.spi.AnnotationDescriptor; import org.hibernate.models.spi.AttributeDescriptor; -import org.hibernate.models.spi.SourceModelBuildingContext; - -import org.jboss.jandex.AnnotationInstance; +import org.hibernate.models.spi.MutableAnnotationDescriptor; /** * Acts as {@link Annotation} usage using {@link InvocationHandler} and {@link Proxy}. * - * @apiNote Mainly this is used for handling Jandex-based annotations when the annotation - * is a non-ORM annotation. - * * @author Steve Ebersole */ public class AnnotationProxy implements InvocationHandler { @@ -86,26 +80,20 @@ public static A makeProxy( AnnotationDescriptor descriptor, Map valueMap) { final AnnotationProxy handler = new AnnotationProxy<>( descriptor, valueMap ); + final Class[] interfaces; + if ( descriptor instanceof MutableAnnotationDescriptor ) { + //noinspection rawtypes + interfaces = new Class[] { descriptor.getAnnotationType(), ( (MutableAnnotationDescriptor) descriptor ).getMutableAnnotationType() }; + } + else { + interfaces = new Class[] { descriptor.getAnnotationType() }; + } + //noinspection unchecked return (A) Proxy.newProxyInstance( AnnotationProxy.class.getClassLoader(), - new Class[] { descriptor.getAnnotationType() }, + interfaces, handler ); } - - public static A makeProxy( - AnnotationDescriptor descriptor, - AnnotationInstance jandexAnnotationInstance, - SourceModelBuildingContext modelContext) { - return makeProxy( - descriptor, - AnnotationUsageBuilder.extractAttributeValues( - jandexAnnotationInstance, - descriptor, - modelContext - ) - ); - } - } diff --git a/src/main/java/org/hibernate/models/internal/AnnotationTargetSupport.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationTargetSupport.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/AnnotationTargetSupport.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationTargetSupport.java diff --git a/src/main/java/org/hibernate/models/internal/AnnotationUsageHelper.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationUsageHelper.java similarity index 91% rename from src/main/java/org/hibernate/models/internal/AnnotationUsageHelper.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationUsageHelper.java index 346710b..c3dfae7 100644 --- a/src/main/java/org/hibernate/models/internal/AnnotationUsageHelper.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/AnnotationUsageHelper.java @@ -12,16 +12,12 @@ import java.util.function.Consumer; import org.hibernate.models.AnnotationAccessException; -import org.hibernate.models.internal.jandex.JandexValueHelper; import org.hibernate.models.internal.util.CollectionHelper; import org.hibernate.models.spi.AnnotationDescriptor; import org.hibernate.models.spi.AttributeDescriptor; import org.hibernate.models.spi.SourceModelBuildingContext; import org.hibernate.models.spi.SourceModelContext; -import org.jboss.jandex.AnnotationInstance; - - /** * @see AnnotationHelper * @@ -63,21 +59,6 @@ public static A[] extractRepeatedVa return valuesAttribute.getTypeDescriptor().createJdkValueExtractor( modelContext ).extractValue( container, valuesAttribute, modelContext ); } - public static A[] extractRepeatedValues( - AnnotationInstance container, - AnnotationDescriptor containerDescriptor, - SourceModelBuildingContext modelContext) { - final AttributeDescriptor valuesAttribute = containerDescriptor.getAttribute( "value" ); - return extractRepeatedValues( container, valuesAttribute, modelContext ); - } - - public static A[] extractRepeatedValues( - AnnotationInstance container, - AttributeDescriptor valuesAttribute, - SourceModelBuildingContext modelContext) { - return JandexValueHelper.extractValue( container, valuesAttribute, modelContext ); - } - /** * Get the annotation usage from the {@code usageMap} for the given {@code type} */ diff --git a/src/main/java/org/hibernate/models/internal/ArrayTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ArrayTypeDescriptor.java similarity index 77% rename from src/main/java/org/hibernate/models/internal/ArrayTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ArrayTypeDescriptor.java index 5502bce..f0df57e 100644 --- a/src/main/java/org/hibernate/models/internal/ArrayTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/ArrayTypeDescriptor.java @@ -10,8 +10,6 @@ import java.lang.reflect.Array; import java.util.List; -import org.hibernate.models.internal.jandex.ArrayValueExtractor; -import org.hibernate.models.internal.jandex.ArrayValueConverter; import org.hibernate.models.internal.jdk.JdkArrayValueConverter; import org.hibernate.models.internal.jdk.JdkArrayValueExtractor; import org.hibernate.models.internal.jdk.JdkPassThruConverter; @@ -21,9 +19,7 @@ import org.hibernate.models.spi.JdkValueExtractor; import org.hibernate.models.spi.RenderingCollector; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.hibernate.models.spi.JandexValueExtractor; import org.hibernate.models.spi.ValueTypeDescriptor; -import org.hibernate.models.spi.JandexValueConverter; /** * Descriptor for array values. These are modeled as an array in the @@ -36,9 +32,6 @@ public class ArrayTypeDescriptor implements ValueTypeDescriptor { private final Class componentType; private final Class arrayType; - private JandexValueConverter jandexValueConverter; - private JandexValueExtractor jandexValueExtractor; - private JdkValueConverter jdkValueConverter; private JdkValueExtractor jdkValueExtractor; @@ -65,31 +58,6 @@ public AttributeDescriptor createAttributeDescriptor( return new AttributeDescriptorImpl<>( annotationType, attributeName, this ); } - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext buildingContext) { - return resolveJandexExtractor( buildingContext ); - } - - public JandexValueExtractor resolveJandexExtractor(SourceModelBuildingContext buildingContext) { - if ( jandexValueExtractor == null ) { - this.jandexValueExtractor = new ArrayValueExtractor<>( resolveJandexWrapper( buildingContext ) ); - } - return jandexValueExtractor; - } - - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext buildingContext) { - return resolveJandexWrapper( buildingContext ); - } - - private JandexValueConverter resolveJandexWrapper(SourceModelBuildingContext buildingContext) { - if ( jandexValueConverter == null ) { - jandexValueConverter = new ArrayValueConverter<>( elementTypeDescriptor ); - } - - return jandexValueConverter; - } - @Override public JdkValueConverter createJdkValueConverter(SourceModelBuildingContext modelContext) { if ( jdkValueConverter == null ) { diff --git a/src/main/java/org/hibernate/models/internal/ArrayTypeDetailsImpl.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ArrayTypeDetailsImpl.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/ArrayTypeDetailsImpl.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ArrayTypeDetailsImpl.java diff --git a/src/main/java/org/hibernate/models/internal/AttributeDescriptorImpl.java b/hibernate-models/src/main/java/org/hibernate/models/internal/AttributeDescriptorImpl.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/AttributeDescriptorImpl.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/AttributeDescriptorImpl.java diff --git a/src/main/java/org/hibernate/models/internal/BaseLineJavaTypes.java b/hibernate-models/src/main/java/org/hibernate/models/internal/BaseLineJavaTypes.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/BaseLineJavaTypes.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/BaseLineJavaTypes.java diff --git a/hibernate-models/src/main/java/org/hibernate/models/internal/BasicModelBuildingContextImpl.java b/hibernate-models/src/main/java/org/hibernate/models/internal/BasicModelBuildingContextImpl.java new file mode 100644 index 0000000..653dec4 --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/BasicModelBuildingContextImpl.java @@ -0,0 +1,44 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ + +package org.hibernate.models.internal; + +import org.hibernate.models.spi.ClassLoading; +import org.hibernate.models.spi.RegistryPrimer; + +/** + * Standard SourceModelBuildingContext implementation + * + * @author Steve Ebersole + */ +public class BasicModelBuildingContextImpl extends AbstractModelBuildingContext { + private final AnnotationDescriptorRegistryStandard descriptorRegistry; + private final ClassDetailsRegistryStandard classDetailsRegistry; + + public BasicModelBuildingContextImpl(ClassLoading classLoadingAccess) { + this( classLoadingAccess, null ); + } + + public BasicModelBuildingContextImpl(ClassLoading classLoadingAccess, RegistryPrimer registryPrimer) { + super( classLoadingAccess ); + + this.descriptorRegistry = new AnnotationDescriptorRegistryStandard( this ); + this.classDetailsRegistry = new ClassDetailsRegistryStandard( this ); + + primeRegistries( registryPrimer ); + } + + @Override + public MutableAnnotationDescriptorRegistry getAnnotationDescriptorRegistry() { + return descriptorRegistry; + } + + @Override + public MutableClassDetailsRegistry getClassDetailsRegistry() { + return classDetailsRegistry; + } +} diff --git a/src/main/java/org/hibernate/models/internal/BooleanTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/BooleanTypeDescriptor.java similarity index 55% rename from src/main/java/org/hibernate/models/internal/BooleanTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/BooleanTypeDescriptor.java index 7fce1c0..cec4301 100644 --- a/src/main/java/org/hibernate/models/internal/BooleanTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/BooleanTypeDescriptor.java @@ -6,11 +6,7 @@ */ package org.hibernate.models.internal; -import org.hibernate.models.internal.jandex.BooleanValueConverter; -import org.hibernate.models.internal.jandex.BooleanValueExtractor; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; /** * Descriptor for boolean values @@ -25,16 +21,6 @@ public Class getValueType() { return Boolean.class; } - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext buildingContext) { - return BooleanValueConverter.JANDEX_BOOLEAN_VALUE_WRAPPER; - } - - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext buildingContext) { - return BooleanValueExtractor.JANDEX_BOOLEAN_EXTRACTOR; - } - @Override public Object unwrap(Boolean value) { return value; diff --git a/src/main/java/org/hibernate/models/internal/ByteTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ByteTypeDescriptor.java similarity index 55% rename from src/main/java/org/hibernate/models/internal/ByteTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ByteTypeDescriptor.java index fec1d6f..507b8f7 100644 --- a/src/main/java/org/hibernate/models/internal/ByteTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/ByteTypeDescriptor.java @@ -6,10 +6,6 @@ */ package org.hibernate.models.internal; -import org.hibernate.models.internal.jandex.ByteValueConverter; -import org.hibernate.models.internal.jandex.ByteValueExtractor; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; import org.hibernate.models.spi.SourceModelBuildingContext; /** @@ -25,16 +21,6 @@ public Class getValueType() { return Byte.class; } - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext buildingContext) { - return ByteValueConverter.JANDEX_BYTE_VALUE_WRAPPER; - } - - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext buildingContext) { - return ByteValueExtractor.JANDEX_BYTE_EXTRACTOR; - } - @Override public Object unwrap(Byte value) { return value; diff --git a/src/main/java/org/hibernate/models/internal/CharacterTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/CharacterTypeDescriptor.java similarity index 55% rename from src/main/java/org/hibernate/models/internal/CharacterTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/CharacterTypeDescriptor.java index b9e5b0c..4d24df2 100644 --- a/src/main/java/org/hibernate/models/internal/CharacterTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/CharacterTypeDescriptor.java @@ -6,10 +6,6 @@ */ package org.hibernate.models.internal; -import org.hibernate.models.internal.jandex.CharacterValueConverter; -import org.hibernate.models.internal.jandex.CharacterValueExtractor; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; import org.hibernate.models.spi.SourceModelBuildingContext; /** @@ -25,16 +21,6 @@ public Class getValueType() { return Character.class; } - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext buildingContext) { - return CharacterValueConverter.JANDEX_CHARACTER_VALUE_WRAPPER; - } - - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext buildingContext) { - return CharacterValueExtractor.JANDEX_CHARACTER_EXTRACTOR; - } - @Override public Object unwrap(Character value) { return value; diff --git a/hibernate-models/src/main/java/org/hibernate/models/internal/ClassDetailsRegistryStandard.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ClassDetailsRegistryStandard.java new file mode 100644 index 0000000..c74cb0f --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/ClassDetailsRegistryStandard.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.internal; + +import java.util.ArrayList; +import java.util.List; + +import org.hibernate.models.internal.jdk.JdkBuilders; +import org.hibernate.models.spi.ClassDetails; +import org.hibernate.models.spi.ClassDetailsBuilder; +import org.hibernate.models.spi.SourceModelBuildingContext; + +/** + * Standard ClassDetailsRegistry implementation. + * + * @author Steve Ebersole + */ +public class ClassDetailsRegistryStandard extends AbstractClassDetailsRegistry implements MutableClassDetailsRegistry { + private final ClassDetailsBuilder classDetailsBuilder; + + public ClassDetailsRegistryStandard(SourceModelBuildingContext context) { + this( JdkBuilders.DEFAULT_BUILDER , context ); + } + + public ClassDetailsRegistryStandard(ClassDetailsBuilder classDetailsBuilder, SourceModelBuildingContext context) { + super( context ); + this.classDetailsBuilder = classDetailsBuilder; + + classDetailsMap.put( ClassDetails.VOID_CLASS_DETAILS.getClassName(), ClassDetails.VOID_CLASS_DETAILS ); + classDetailsMap.put( ClassDetails.VOID_OBJECT_CLASS_DETAILS.getClassName(), ClassDetails.VOID_OBJECT_CLASS_DETAILS ); + classDetailsMap.put( ClassDetails.OBJECT_CLASS_DETAILS.getClassName(), ClassDetails.OBJECT_CLASS_DETAILS ); + } + + @Override + protected ClassDetailsBuilder getClassDetailsBuilder() { + return classDetailsBuilder; + } + +} diff --git a/src/main/java/org/hibernate/models/internal/ClassDetailsSupport.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ClassDetailsSupport.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/ClassDetailsSupport.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ClassDetailsSupport.java diff --git a/src/main/java/org/hibernate/models/internal/ClassTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ClassTypeDescriptor.java similarity index 68% rename from src/main/java/org/hibernate/models/internal/ClassTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ClassTypeDescriptor.java index cd060eb..2d314ad 100644 --- a/src/main/java/org/hibernate/models/internal/ClassTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/ClassTypeDescriptor.java @@ -6,10 +6,6 @@ */ package org.hibernate.models.internal; -import org.hibernate.models.internal.jandex.ClassValueConverter; -import org.hibernate.models.internal.jandex.ClassValueExtractor; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; import org.hibernate.models.spi.RenderingCollector; import org.hibernate.models.spi.SourceModelBuildingContext; @@ -27,16 +23,6 @@ public Class> getValueType() { return (Class) Class.class; } - @Override - public JandexValueConverter> createJandexValueConverter(SourceModelBuildingContext buildingContext) { - return ClassValueConverter.JANDEX_CLASS_VALUE_WRAPPER; - } - - @Override - public JandexValueExtractor> createJandexValueExtractor(SourceModelBuildingContext buildingContext) { - return ClassValueExtractor.JANDEX_CLASS_EXTRACTOR; - } - @Override public Object unwrap(Class value) { return value; diff --git a/src/main/java/org/hibernate/models/internal/ClassTypeDetailsImpl.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ClassTypeDetailsImpl.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/ClassTypeDetailsImpl.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ClassTypeDetailsImpl.java diff --git a/src/main/java/org/hibernate/models/internal/CollectionElementSwitch.java b/hibernate-models/src/main/java/org/hibernate/models/internal/CollectionElementSwitch.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/CollectionElementSwitch.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/CollectionElementSwitch.java diff --git a/src/main/java/org/hibernate/models/internal/DoubleTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/DoubleTypeDescriptor.java similarity index 56% rename from src/main/java/org/hibernate/models/internal/DoubleTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/DoubleTypeDescriptor.java index 59a9ea4..22655cf 100644 --- a/src/main/java/org/hibernate/models/internal/DoubleTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/DoubleTypeDescriptor.java @@ -6,10 +6,6 @@ */ package org.hibernate.models.internal; -import org.hibernate.models.internal.jandex.DoubleValueConverter; -import org.hibernate.models.internal.jandex.DoubleValueExtractor; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; import org.hibernate.models.spi.SourceModelBuildingContext; /** @@ -25,16 +21,6 @@ public Class getValueType() { return Double.class; } - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext modelContext) { - return DoubleValueConverter.JANDEX_DOUBLE_VALUE_WRAPPER; - } - - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext modelContext) { - return DoubleValueExtractor.JANDEX_DOUBLE_EXTRACTOR; - } - @Override public Object unwrap(Double value) { return value; diff --git a/src/main/java/org/hibernate/models/internal/EnumTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/EnumTypeDescriptor.java similarity index 53% rename from src/main/java/org/hibernate/models/internal/EnumTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/EnumTypeDescriptor.java index d1bac6f..8b9be8c 100644 --- a/src/main/java/org/hibernate/models/internal/EnumTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/EnumTypeDescriptor.java @@ -8,11 +8,7 @@ import java.lang.reflect.Array; -import org.hibernate.models.internal.jandex.EnumValueConverter; -import org.hibernate.models.internal.jandex.EnumValueExtractor; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; /** * Descriptor for enum values @@ -22,13 +18,8 @@ public class EnumTypeDescriptor> extends AbstractTypeDescriptor { private final Class enumType; - private final EnumValueConverter jandexWrapper; - private final EnumValueExtractor jandexExtractor; - public EnumTypeDescriptor(Class enumType) { this.enumType = enumType; - this.jandexWrapper = new EnumValueConverter<>( enumType ); - this.jandexExtractor = new EnumValueExtractor<>( jandexWrapper ); } @Override @@ -36,16 +27,6 @@ public Class getValueType() { return enumType; } - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext modelContext) { - return jandexWrapper; - } - - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext modelContext) { - return jandexExtractor; - } - @Override public Object unwrap(E value) { return value; diff --git a/src/main/java/org/hibernate/models/internal/FloatTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/FloatTypeDescriptor.java similarity index 66% rename from src/main/java/org/hibernate/models/internal/FloatTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/FloatTypeDescriptor.java index dd86eff..979a8b8 100644 --- a/src/main/java/org/hibernate/models/internal/FloatTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/FloatTypeDescriptor.java @@ -6,10 +6,6 @@ */ package org.hibernate.models.internal; -import org.hibernate.models.internal.jandex.FloatValueConverter; -import org.hibernate.models.internal.jandex.FloatValueExtractor; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; import org.hibernate.models.spi.RenderingCollector; import org.hibernate.models.spi.SourceModelBuildingContext; @@ -26,16 +22,6 @@ public Class getValueType() { return Float.class; } - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext buildingContext) { - return FloatValueConverter.JANDEX_FLOAT_VALUE_WRAPPER; - } - - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext buildingContext) { - return FloatValueExtractor.JANDEX_FLOAT_EXTRACTOR; - } - @Override public Object unwrap(Float value) { return value; diff --git a/src/main/java/org/hibernate/models/internal/IntegerTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/IntegerTypeDescriptor.java similarity index 56% rename from src/main/java/org/hibernate/models/internal/IntegerTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/IntegerTypeDescriptor.java index 61c3bbb..be752a5 100644 --- a/src/main/java/org/hibernate/models/internal/IntegerTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/IntegerTypeDescriptor.java @@ -6,10 +6,6 @@ */ package org.hibernate.models.internal; -import org.hibernate.models.internal.jandex.IntegerValueConverter; -import org.hibernate.models.internal.jandex.IntegerValueExtractor; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; import org.hibernate.models.spi.SourceModelBuildingContext; /** @@ -25,16 +21,6 @@ public Class getValueType() { return Integer.class; } - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext modelContext) { - return IntegerValueConverter.JANDEX_INTEGER_VALUE_WRAPPER; - } - - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext modelContext) { - return IntegerValueExtractor.JANDEX_INTEGER_EXTRACTOR; - } - @Override public Object unwrap(Integer value) { return value; diff --git a/src/main/java/org/hibernate/models/internal/IsResolvedTypeSwitch.java b/hibernate-models/src/main/java/org/hibernate/models/internal/IsResolvedTypeSwitch.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/IsResolvedTypeSwitch.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/IsResolvedTypeSwitch.java diff --git a/src/main/java/org/hibernate/models/internal/LongTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/LongTypeDescriptor.java similarity index 66% rename from src/main/java/org/hibernate/models/internal/LongTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/LongTypeDescriptor.java index ed47345..ae88c65 100644 --- a/src/main/java/org/hibernate/models/internal/LongTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/LongTypeDescriptor.java @@ -6,12 +6,8 @@ */ package org.hibernate.models.internal; -import org.hibernate.models.internal.jandex.LongValueConverter; -import org.hibernate.models.internal.jandex.LongValueExtractor; import org.hibernate.models.spi.RenderingCollector; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; /** * Descriptor for long values @@ -26,16 +22,6 @@ public Class getValueType() { return Long.class; } - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext modelContext) { - return LongValueConverter.JANDEX_LONG_VALUE_WRAPPER; - } - - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext modelContext) { - return LongValueExtractor.JANDEX_LONG_EXTRACTOR; - } - @Override public Object unwrap(Long value) { return value; diff --git a/src/main/java/org/hibernate/models/internal/MapKeySwitch.java b/hibernate-models/src/main/java/org/hibernate/models/internal/MapKeySwitch.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/MapKeySwitch.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/MapKeySwitch.java diff --git a/src/main/java/org/hibernate/models/internal/MapValueSwitch.java b/hibernate-models/src/main/java/org/hibernate/models/internal/MapValueSwitch.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/MapValueSwitch.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/MapValueSwitch.java diff --git a/src/main/java/org/hibernate/models/internal/ModelsAnnotationLogging.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ModelsAnnotationLogging.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/ModelsAnnotationLogging.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ModelsAnnotationLogging.java diff --git a/src/main/java/org/hibernate/models/internal/ModelsClassLogging.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ModelsClassLogging.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/ModelsClassLogging.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ModelsClassLogging.java diff --git a/src/main/java/org/hibernate/models/internal/ModelsLogging.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ModelsLogging.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/ModelsLogging.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ModelsLogging.java diff --git a/src/main/java/org/hibernate/models/internal/ModifierUtils.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ModifierUtils.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/ModifierUtils.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ModifierUtils.java diff --git a/hibernate-models/src/main/java/org/hibernate/models/internal/MutableAnnotationDescriptorRegistry.java b/hibernate-models/src/main/java/org/hibernate/models/internal/MutableAnnotationDescriptorRegistry.java new file mode 100644 index 0000000..2b535cd --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/MutableAnnotationDescriptorRegistry.java @@ -0,0 +1,18 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ + +package org.hibernate.models.internal; + +import org.hibernate.models.spi.AnnotationDescriptor; +import org.hibernate.models.spi.AnnotationDescriptorRegistry; + +/** + * @author Steve Ebersole + */ +public interface MutableAnnotationDescriptorRegistry extends AnnotationDescriptorRegistry { + void register(AnnotationDescriptor descriptor); +} diff --git a/hibernate-models/src/main/java/org/hibernate/models/internal/MutableClassDetailsRegistry.java b/hibernate-models/src/main/java/org/hibernate/models/internal/MutableClassDetailsRegistry.java new file mode 100644 index 0000000..f5ab11b --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/MutableClassDetailsRegistry.java @@ -0,0 +1,27 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ + +package org.hibernate.models.internal; + +import org.hibernate.models.spi.ClassDetails; +import org.hibernate.models.spi.ClassDetailsRegistry; + +/** + * @author Steve Ebersole + */ +public interface MutableClassDetailsRegistry extends ClassDetailsRegistry { + /** + * Adds a managed-class descriptor using its {@linkplain ClassDetails#getName() name} + * as the registration key. + */ + void addClassDetails(ClassDetails classDetails); + + /** + * Adds a managed-class descriptor using the given {@code name} as the registration key + */ + void addClassDetails(String name, ClassDetails classDetails); +} diff --git a/src/main/java/org/hibernate/models/internal/NestedTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/NestedTypeDescriptor.java similarity index 72% rename from src/main/java/org/hibernate/models/internal/NestedTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/NestedTypeDescriptor.java index 28cae43..d6679fb 100644 --- a/src/main/java/org/hibernate/models/internal/NestedTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/NestedTypeDescriptor.java @@ -10,13 +10,9 @@ import java.lang.reflect.Array; import java.util.Locale; -import org.hibernate.models.internal.jandex.JandexNestedValueConverter; -import org.hibernate.models.internal.jandex.JandexNestedValueExtractor; import org.hibernate.models.internal.jdk.JdkNestedValueConverter; import org.hibernate.models.internal.jdk.JdkNestedValueExtractor; import org.hibernate.models.spi.AnnotationDescriptor; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; import org.hibernate.models.spi.JdkValueConverter; import org.hibernate.models.spi.JdkValueExtractor; import org.hibernate.models.spi.RenderingCollector; @@ -32,9 +28,6 @@ public class NestedTypeDescriptor extends AbstractTypeDesc private AnnotationDescriptor descriptor; - private JandexNestedValueConverter jandexConverter; - private JandexNestedValueExtractor jandexExtractor; - private JdkNestedValueConverter jdkConverter; private JdkNestedValueExtractor jdkExtractor; @@ -54,30 +47,6 @@ private AnnotationDescriptor resolveDescriptor(SourceModelBuildingContext con return descriptor; } - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext buildingContext) { - return resolveJandexWrapper( buildingContext ); - } - - public JandexNestedValueConverter resolveJandexWrapper(SourceModelBuildingContext buildingContext) { - if ( jandexConverter == null ) { - jandexConverter = new JandexNestedValueConverter<>( resolveDescriptor( buildingContext ) ); - } - return jandexConverter; - } - - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext buildingContext) { - return resolveJandexExtractor( buildingContext ); - } - - public JandexNestedValueExtractor resolveJandexExtractor(SourceModelBuildingContext buildingContext) { - if ( jandexExtractor == null ) { - this.jandexExtractor = new JandexNestedValueExtractor<>( resolveJandexWrapper( buildingContext ) ); - } - return jandexExtractor; - } - @Override public JdkValueConverter createJdkValueConverter(SourceModelBuildingContext modelContext) { return resolveJdkValueConverter( modelContext ); diff --git a/src/main/java/org/hibernate/models/internal/OrmAnnotationDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/OrmAnnotationDescriptor.java similarity index 83% rename from src/main/java/org/hibernate/models/internal/OrmAnnotationDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/OrmAnnotationDescriptor.java index 1676f84..a9137e4 100644 --- a/src/main/java/org/hibernate/models/internal/OrmAnnotationDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/OrmAnnotationDescriptor.java @@ -16,10 +16,9 @@ import org.hibernate.models.spi.AnnotationDescriptor; import org.hibernate.models.spi.AttributeDescriptor; +import org.hibernate.models.spi.MutableAnnotationDescriptor; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - /** * Specialized AnnotationDescriptor implementation intended for use in describing * Hibernate and JPA annotations. Note especially that this implementation @@ -28,13 +27,15 @@ * * @author Steve Ebersole */ -public class OrmAnnotationDescriptor extends AbstractAnnotationDescriptor { +public class OrmAnnotationDescriptor + extends AbstractAnnotationDescriptor + implements MutableAnnotationDescriptor { private final Class concreteClass; private final List> attributeDescriptors; private DynamicCreator dynamicCreator; private JdkCreator jdkCreator; - private JandexCreator jandexCreator; + private DeTypedCreator deTypedCreator; public OrmAnnotationDescriptor( Class annotationType, @@ -57,6 +58,11 @@ public OrmAnnotationDescriptor( this.attributeDescriptors = AnnotationDescriptorBuilding.extractAttributeDescriptors( annotationType ); } + @Override + public Class getMutableAnnotationType() { + return concreteClass; + } + @Override public Map, ? extends Annotation> getUsageMap() { // we never care about the annotations on these annotation classes @@ -81,11 +87,11 @@ public C createUsage(A jdkAnnotation, SourceModelBuildingContext context) { } @Override - public C createUsage(AnnotationInstance jandexAnnotation, SourceModelBuildingContext context) { - if ( jandexCreator == null ) { - jandexCreator = new JandexCreator<>( concreteClass ); + public A createUsage(Map attributeValues, SourceModelBuildingContext context) { + if ( deTypedCreator == null ) { + deTypedCreator = new DeTypedCreator<>( getAnnotationType(), concreteClass ); } - return jandexCreator.createUsage( jandexAnnotation, context ); + return deTypedCreator.createUsage( attributeValues, context ); } @Override @@ -160,29 +166,29 @@ public C createUsage(A jdkAnnotation, SourceModelBuildingContext context) { } } - public static class JandexCreator { + public static class DeTypedCreator { private final Constructor constructor; - public JandexCreator(Class concreteClass) { + public DeTypedCreator(Class annotationType, Class concreteClass) { this( resolveConstructor( concreteClass ) ); } private static Constructor resolveConstructor(Class concreteClass) { try { - return concreteClass.getDeclaredConstructor( AnnotationInstance.class, SourceModelBuildingContext.class ); + return concreteClass.getDeclaredConstructor( Map.class, SourceModelBuildingContext.class ); } catch (NoSuchMethodException e) { throw new RuntimeException( e ); } } - public JandexCreator(Constructor constructor) { + public DeTypedCreator(Constructor constructor) { this.constructor = constructor; } - public C createUsage(AnnotationInstance jandexAnnotation, SourceModelBuildingContext context) { + public C createUsage(Map attributeValues, SourceModelBuildingContext context) { try { - return constructor.newInstance( jandexAnnotation, context ); + return constructor.newInstance( attributeValues, context ); } catch (InvocationTargetException | InstantiationException | IllegalAccessException e) { throw new RuntimeException( e ); diff --git a/src/main/java/org/hibernate/models/internal/ParameterizedTypeDetailsImpl.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ParameterizedTypeDetailsImpl.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/ParameterizedTypeDetailsImpl.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ParameterizedTypeDetailsImpl.java diff --git a/src/main/java/org/hibernate/models/internal/PrimitiveKind.java b/hibernate-models/src/main/java/org/hibernate/models/internal/PrimitiveKind.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/PrimitiveKind.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/PrimitiveKind.java diff --git a/src/main/java/org/hibernate/models/internal/PrimitiveTypeDetailsImpl.java b/hibernate-models/src/main/java/org/hibernate/models/internal/PrimitiveTypeDetailsImpl.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/PrimitiveTypeDetailsImpl.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/PrimitiveTypeDetailsImpl.java diff --git a/src/main/java/org/hibernate/models/internal/RenderingCollectorImpl.java b/hibernate-models/src/main/java/org/hibernate/models/internal/RenderingCollectorImpl.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/RenderingCollectorImpl.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/RenderingCollectorImpl.java diff --git a/src/main/java/org/hibernate/models/internal/ShortTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/ShortTypeDescriptor.java similarity index 55% rename from src/main/java/org/hibernate/models/internal/ShortTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/ShortTypeDescriptor.java index 209e8e9..d087ab3 100644 --- a/src/main/java/org/hibernate/models/internal/ShortTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/ShortTypeDescriptor.java @@ -6,10 +6,6 @@ */ package org.hibernate.models.internal; -import org.hibernate.models.internal.jandex.ShortValueConverter; -import org.hibernate.models.internal.jandex.ShortValueExtractor; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; import org.hibernate.models.spi.SourceModelBuildingContext; /** @@ -25,16 +21,6 @@ public Class getValueType() { return Short.class; } - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext buildingContext) { - return ShortValueConverter.JANDEX_SHORT_VALUE_WRAPPER; - } - - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext buildingContext) { - return ShortValueExtractor.JANDEX_SHORT_EXTRACTOR; - } - @Override public Object unwrap(Short value) { return value; diff --git a/src/main/java/org/hibernate/models/internal/SimpleClassDetails.java b/hibernate-models/src/main/java/org/hibernate/models/internal/SimpleClassDetails.java similarity index 98% rename from src/main/java/org/hibernate/models/internal/SimpleClassDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/SimpleClassDetails.java index 7a80d7f..471e270 100644 --- a/src/main/java/org/hibernate/models/internal/SimpleClassDetails.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/SimpleClassDetails.java @@ -35,7 +35,7 @@ public class SimpleClassDetails implements ClassDetails { private final TypeDetails genericSuperTypeDetails; public SimpleClassDetails(Class clazz) { - this( clazz, ClassDetails.OBJECT_CLASS_DETAILS, null ); + this( clazz, OBJECT_CLASS_DETAILS, null ); } public SimpleClassDetails(Class clazz, ClassDetails superClassDetails, TypeDetails genericSuperTypeDetails) { diff --git a/src/main/java/org/hibernate/models/internal/SimpleClassLoading.java b/hibernate-models/src/main/java/org/hibernate/models/internal/SimpleClassLoading.java similarity index 69% rename from src/main/java/org/hibernate/models/internal/SimpleClassLoading.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/SimpleClassLoading.java index 93beb53..9382d46 100644 --- a/src/main/java/org/hibernate/models/internal/SimpleClassLoading.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/SimpleClassLoading.java @@ -7,6 +7,11 @@ package org.hibernate.models.internal; import java.net.URL; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.ServiceLoader; +import java.util.Set; import org.hibernate.models.UnknownClassException; import org.hibernate.models.spi.ClassLoading; @@ -39,4 +44,15 @@ public Package packageForName(String name) { public URL locateResource(String resourceName) { return getClass().getClassLoader().getResource( resourceName ); } + + @Override + public Collection loadJavaServices(Class serviceType) { + final ServiceLoader loadedServices = ServiceLoader.load( serviceType ); + final Iterator iterator = loadedServices.iterator(); + final Set services = new HashSet<>(); + while ( iterator.hasNext() ) { + services.add( iterator.next() ); + } + return services; + } } diff --git a/src/main/java/org/hibernate/models/internal/StandardAnnotationDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/StandardAnnotationDescriptor.java similarity index 94% rename from src/main/java/org/hibernate/models/internal/StandardAnnotationDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/StandardAnnotationDescriptor.java index d2a281e..33ac176 100644 --- a/src/main/java/org/hibernate/models/internal/StandardAnnotationDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/StandardAnnotationDescriptor.java @@ -21,8 +21,6 @@ import org.hibernate.models.spi.AttributeDescriptor; import org.hibernate.models.spi.SourceModelBuildingContext; -import org.jboss.jandex.AnnotationInstance; - /** * Simple implementation of {@link AnnotationDescriptor}. * @@ -58,15 +56,6 @@ public A createUsage(A jdkAnnotation, SourceModelBuildingContext context) { return jdkAnnotation; } - @Override - public A createUsage(AnnotationInstance jandexAnnotation, SourceModelBuildingContext context) { - return AnnotationProxy.makeProxy( - this, - jandexAnnotation, - context - ); - } - @Override public A createUsage(SourceModelBuildingContext context) { throw new UnsupportedOperationException( diff --git a/src/main/java/org/hibernate/models/internal/StringTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/StringTypeDescriptor.java similarity index 66% rename from src/main/java/org/hibernate/models/internal/StringTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/StringTypeDescriptor.java index a97bdf4..9590949 100644 --- a/src/main/java/org/hibernate/models/internal/StringTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/StringTypeDescriptor.java @@ -6,10 +6,6 @@ */ package org.hibernate.models.internal; -import org.hibernate.models.internal.jandex.StringValueConverter; -import org.hibernate.models.internal.jandex.StringValueExtractor; -import org.hibernate.models.spi.JandexValueConverter; -import org.hibernate.models.spi.JandexValueExtractor; import org.hibernate.models.spi.RenderingCollector; import org.hibernate.models.spi.SourceModelBuildingContext; @@ -26,16 +22,6 @@ public Class getValueType() { return String.class; } - @Override - public JandexValueConverter createJandexValueConverter(SourceModelBuildingContext buildingContext) { - return StringValueConverter.JANDEX_STRING_VALUE_WRAPPER; - } - - @Override - public JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext buildingContext) { - return StringValueExtractor.JANDEX_STRING_EXTRACTOR; - } - @Override public Object unwrap(String value) { return value; diff --git a/src/main/java/org/hibernate/models/internal/TypeDescriptors.java b/hibernate-models/src/main/java/org/hibernate/models/internal/TypeDescriptors.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/TypeDescriptors.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/TypeDescriptors.java diff --git a/src/main/java/org/hibernate/models/internal/TypeDetailsSwitch.java b/hibernate-models/src/main/java/org/hibernate/models/internal/TypeDetailsSwitch.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/TypeDetailsSwitch.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/TypeDetailsSwitch.java diff --git a/src/main/java/org/hibernate/models/internal/TypeDetailsSwitchSupport.java b/hibernate-models/src/main/java/org/hibernate/models/internal/TypeDetailsSwitchSupport.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/TypeDetailsSwitchSupport.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/TypeDetailsSwitchSupport.java diff --git a/src/main/java/org/hibernate/models/internal/TypeDetailsSwitcher.java b/hibernate-models/src/main/java/org/hibernate/models/internal/TypeDetailsSwitcher.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/TypeDetailsSwitcher.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/TypeDetailsSwitcher.java diff --git a/src/main/java/org/hibernate/models/internal/TypeVariableDetailsImpl.java b/hibernate-models/src/main/java/org/hibernate/models/internal/TypeVariableDetailsImpl.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/TypeVariableDetailsImpl.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/TypeVariableDetailsImpl.java diff --git a/src/main/java/org/hibernate/models/internal/TypeVariableReferenceDetailsImpl.java b/hibernate-models/src/main/java/org/hibernate/models/internal/TypeVariableReferenceDetailsImpl.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/TypeVariableReferenceDetailsImpl.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/TypeVariableReferenceDetailsImpl.java diff --git a/src/main/java/org/hibernate/models/internal/VoidTypeDetailsImpl.java b/hibernate-models/src/main/java/org/hibernate/models/internal/VoidTypeDetailsImpl.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/VoidTypeDetailsImpl.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/VoidTypeDetailsImpl.java diff --git a/src/main/java/org/hibernate/models/internal/WildcardTypeDetailsImpl.java b/hibernate-models/src/main/java/org/hibernate/models/internal/WildcardTypeDetailsImpl.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/WildcardTypeDetailsImpl.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/WildcardTypeDetailsImpl.java diff --git a/src/main/java/org/hibernate/models/internal/dynamic/AbstractAnnotationTarget.java b/hibernate-models/src/main/java/org/hibernate/models/internal/dynamic/AbstractAnnotationTarget.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/dynamic/AbstractAnnotationTarget.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/dynamic/AbstractAnnotationTarget.java diff --git a/src/main/java/org/hibernate/models/internal/dynamic/DynamicClassDetails.java b/hibernate-models/src/main/java/org/hibernate/models/internal/dynamic/DynamicClassDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/dynamic/DynamicClassDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/dynamic/DynamicClassDetails.java diff --git a/src/main/java/org/hibernate/models/internal/dynamic/DynamicFieldDetails.java b/hibernate-models/src/main/java/org/hibernate/models/internal/dynamic/DynamicFieldDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/dynamic/DynamicFieldDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/dynamic/DynamicFieldDetails.java diff --git a/src/main/java/org/hibernate/models/internal/dynamic/DynamicMethodDetails.java b/hibernate-models/src/main/java/org/hibernate/models/internal/dynamic/DynamicMethodDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/dynamic/DynamicMethodDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/dynamic/DynamicMethodDetails.java diff --git a/src/main/java/org/hibernate/models/internal/dynamic/package-info.java b/hibernate-models/src/main/java/org/hibernate/models/internal/dynamic/package-info.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/dynamic/package-info.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/dynamic/package-info.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/AbstractJdkAnnotationTarget.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/AbstractJdkAnnotationTarget.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/AbstractJdkAnnotationTarget.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/AbstractJdkAnnotationTarget.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/AbstractJdkValueExtractor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/AbstractJdkValueExtractor.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/AbstractJdkValueExtractor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/AbstractJdkValueExtractor.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkArrayValueConverter.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkArrayValueConverter.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkArrayValueConverter.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkArrayValueConverter.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkArrayValueExtractor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkArrayValueExtractor.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkArrayValueExtractor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkArrayValueExtractor.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkBuilders.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkBuilders.java similarity index 93% rename from src/main/java/org/hibernate/models/internal/jdk/JdkBuilders.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkBuilders.java index 0da114e..05ba016 100644 --- a/src/main/java/org/hibernate/models/internal/jdk/JdkBuilders.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkBuilders.java @@ -11,6 +11,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Type; +import org.hibernate.models.UnknownClassException; import org.hibernate.models.internal.AnnotationDescriptorRegistryStandard; import org.hibernate.models.internal.ModifierUtils; import org.hibernate.models.internal.PrimitiveKind; @@ -69,10 +70,21 @@ public static JdkClassDetails buildClassDetailsStatic(String name, SourceModelBu if ( name.startsWith( "[" ) ) { return buildArrayClassDetails( name, buildingContext ); } - return buildClassDetailsStatic( - buildingContext.getClassLoading().classForName( name ), - buildingContext - ); + + try { + final Class loadedClass = buildingContext.getClassLoading().classForName( name ); + return buildClassDetailsStatic( loadedClass, buildingContext ); + } + catch (UnknownClassException e) { + // see if it might be a package name... + try { + final Class packageInfoClass = buildingContext.getClassLoading().classForName( name + ".package-info" ); + return buildClassDetailsStatic( packageInfoClass, buildingContext ); + } + catch (UnknownClassException noPackage) { + throw e; + } + } } private static JdkClassDetails buildArrayClassDetails(String name, SourceModelBuildingContext buildingContext) { diff --git a/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkBuildingContextProvider.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkBuildingContextProvider.java new file mode 100644 index 0000000..e008202 --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkBuildingContextProvider.java @@ -0,0 +1,29 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ + +package org.hibernate.models.internal.jdk; + +import java.util.Map; + +import org.hibernate.models.spi.ClassLoading; +import org.hibernate.models.spi.RegistryPrimer; +import org.hibernate.models.spi.SourceModelBuildingContext; +import org.hibernate.models.spi.SourceModelBuildingContextProvider; + +/** + * @author Steve Ebersole + */ +public class JdkBuildingContextProvider implements SourceModelBuildingContextProvider { + + @Override + public SourceModelBuildingContext produceContext( + ClassLoading classLoading, + RegistryPrimer registryPrimer, + Map configProperties) { + return null; + } +} diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkClassDetails.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkClassDetails.java similarity index 97% rename from src/main/java/org/hibernate/models/internal/jdk/JdkClassDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkClassDetails.java index e06d5f6..4ee023c 100644 --- a/src/main/java/org/hibernate/models/internal/jdk/JdkClassDetails.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkClassDetails.java @@ -71,10 +71,7 @@ private static ClassDetails determineSuperClass(Class managedClass, SourceMod } final ClassDetailsRegistry classDetailsRegistry = modelContext.getClassDetailsRegistry(); - return classDetailsRegistry.resolveClassDetails( - superclass.getName(), - (n) -> JdkBuilders.buildClassDetailsStatic( superclass, modelContext ) - ); + return classDetailsRegistry.resolveClassDetails( superclass.getName() ); } @Override diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkFieldDetails.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkFieldDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkFieldDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkFieldDetails.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkMethodDetails.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkMethodDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkMethodDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkMethodDetails.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkNestedValueConverter.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkNestedValueConverter.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkNestedValueConverter.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkNestedValueConverter.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkNestedValueExtractor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkNestedValueExtractor.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkNestedValueExtractor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkNestedValueExtractor.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkPassThruConverter.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkPassThruConverter.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkPassThruConverter.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkPassThruConverter.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkPassThruExtractor.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkPassThruExtractor.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkPassThruExtractor.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkPassThruExtractor.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkRecordComponentDetails.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkRecordComponentDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkRecordComponentDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkRecordComponentDetails.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkTrackingTypeSwitch.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkTrackingTypeSwitch.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkTrackingTypeSwitch.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkTrackingTypeSwitch.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkTrackingTypeSwitcher.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkTrackingTypeSwitcher.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkTrackingTypeSwitcher.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkTrackingTypeSwitcher.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkTypeSwitch.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkTypeSwitch.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkTypeSwitch.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkTypeSwitch.java diff --git a/src/main/java/org/hibernate/models/internal/jdk/JdkTypeSwitcher.java b/hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkTypeSwitcher.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/jdk/JdkTypeSwitcher.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/jdk/JdkTypeSwitcher.java diff --git a/src/main/java/org/hibernate/models/internal/util/CollectionHelper.java b/hibernate-models/src/main/java/org/hibernate/models/internal/util/CollectionHelper.java similarity index 98% rename from src/main/java/org/hibernate/models/internal/util/CollectionHelper.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/util/CollectionHelper.java index 2f838a3..41832a5 100644 --- a/src/main/java/org/hibernate/models/internal/util/CollectionHelper.java +++ b/hibernate-models/src/main/java/org/hibernate/models/internal/util/CollectionHelper.java @@ -7,7 +7,6 @@ package org.hibernate.models.internal.util; -import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; diff --git a/src/main/java/org/hibernate/models/internal/util/IndexedConsumer.java b/hibernate-models/src/main/java/org/hibernate/models/internal/util/IndexedConsumer.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/util/IndexedConsumer.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/util/IndexedConsumer.java diff --git a/src/main/java/org/hibernate/models/internal/util/StringHelper.java b/hibernate-models/src/main/java/org/hibernate/models/internal/util/StringHelper.java similarity index 100% rename from src/main/java/org/hibernate/models/internal/util/StringHelper.java rename to hibernate-models/src/main/java/org/hibernate/models/internal/util/StringHelper.java diff --git a/src/main/java/org/hibernate/models/package-info.java b/hibernate-models/src/main/java/org/hibernate/models/package-info.java similarity index 100% rename from src/main/java/org/hibernate/models/package-info.java rename to hibernate-models/src/main/java/org/hibernate/models/package-info.java diff --git a/src/main/java/org/hibernate/models/spi/AnnotationDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationDescriptor.java similarity index 89% rename from src/main/java/org/hibernate/models/spi/AnnotationDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationDescriptor.java index 3227edd..b2657cd 100644 --- a/src/main/java/org/hibernate/models/spi/AnnotationDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationDescriptor.java @@ -10,12 +10,12 @@ import java.lang.annotation.Repeatable; import java.util.EnumSet; import java.util.List; +import java.util.Map; import org.hibernate.models.IllegalCastException; import org.hibernate.models.UnknownAnnotationAttributeException; import org.hibernate.models.internal.AnnotationHelper; - -import org.jboss.jandex.AnnotationInstance; +import org.hibernate.models.internal.AnnotationProxy; /** * Describes an annotation type (the Class) @@ -33,6 +33,11 @@ default Kind getKind() { */ Class getAnnotationType(); + default S as(Class type) { + //noinspection unchecked + return (S) type; + } + /** * Create an empty usage. Used when there is no source form, such as XML processing. */ @@ -46,9 +51,13 @@ default Kind getKind() { A createUsage(A jdkAnnotation, SourceModelBuildingContext context); /** - * Create a usage from the Jandex representation. + * Create a usage from the JDK representation. This will often just return the passed annotation, + * although for Hibernate and JPA annotations we generally want wrappers to be able to manipulate the + * values. */ - A createUsage(AnnotationInstance jandexAnnotation, SourceModelBuildingContext context); + default A createUsage(Map attributeValues, SourceModelBuildingContext context) { + return AnnotationProxy.makeProxy( this, attributeValues ); + } /** * The places the described annotation can be used diff --git a/src/main/java/org/hibernate/models/spi/AnnotationDescriptorRegistry.java b/hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationDescriptorRegistry.java similarity index 87% rename from src/main/java/org/hibernate/models/spi/AnnotationDescriptorRegistry.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationDescriptorRegistry.java index 62a568f..8fd2a50 100644 --- a/src/main/java/org/hibernate/models/spi/AnnotationDescriptorRegistry.java +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationDescriptorRegistry.java @@ -34,14 +34,6 @@ public interface AnnotationDescriptorRegistry { */ AnnotationDescriptor getContainedRepeatableDescriptor(Class javaType); - /** - * Make a copy of this registry which cannot be added-to. - * - * @deprecated No real need to make this immutable - */ - @Deprecated(forRemoval = true) - AnnotationDescriptorRegistry makeImmutableCopy(); - @FunctionalInterface interface DescriptorCreator { AnnotationDescriptor createDescriptor(Class annotationType); diff --git a/src/main/java/org/hibernate/models/spi/AnnotationTarget.java b/hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationTarget.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/AnnotationTarget.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationTarget.java diff --git a/hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationUsage.java b/hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationUsage.java new file mode 100644 index 0000000..211e59e --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/AnnotationUsage.java @@ -0,0 +1,63 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ + +package org.hibernate.models.spi; + +import java.lang.annotation.Annotation; + +/** + * Describes the usage of an {@linkplain AnnotationDescriptor annotation class} on one of its + * allowable {@linkplain AnnotationTarget targets} where the source of the data is read from + * something other than Java reflection. In other words, an abstraction of an annotation usage + * not read via {@linkplain java.lang.annotation.Annotation}. + *

+ * The standard way to access values is using {@linkplain #getAttributeValue}. + * + * @author Steve Ebersole + */ +public interface AnnotationUsage { + /** + * Descriptor for the type of the used annotation + */ + AnnotationDescriptor getAnnotationDescriptor(); + + /** + * Type of the used annotation + */ + default Class getAnnotationType() { + return getAnnotationDescriptor().getAnnotationType(); + } + + /** + * The target where this usage occurs + */ + AnnotationTarget getAnnotationTarget(); + + /** + * Create an Annotation representation of this usage + */ + A toAnnotation(); + + /** + * The value of the named annotation attribute + */ + V findAttributeValue(String name); + + /** + * The value of the named annotation attribute + */ + default V getAttributeValue(String name) { + final Object value = findAttributeValue( name ); + if ( value == null ) { + // this is unusual. make sure the attribute exists. + // NOTE : the call to #getAttribute throws the exception if it does not + getAnnotationDescriptor().getAttribute( name ); + } + //noinspection unchecked + return (V) value; + } +} diff --git a/src/main/java/org/hibernate/models/spi/ArrayTypeDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/ArrayTypeDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/ArrayTypeDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/ArrayTypeDetails.java diff --git a/src/main/java/org/hibernate/models/spi/AttributeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/spi/AttributeDescriptor.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/AttributeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/AttributeDescriptor.java diff --git a/src/main/java/org/hibernate/models/spi/ClassBasedTypeDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/ClassBasedTypeDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/ClassBasedTypeDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/ClassBasedTypeDetails.java diff --git a/src/main/java/org/hibernate/models/spi/ClassDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/ClassDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetails.java diff --git a/src/main/java/org/hibernate/models/spi/ClassDetailsBuilder.java b/hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetailsBuilder.java similarity index 92% rename from src/main/java/org/hibernate/models/spi/ClassDetailsBuilder.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetailsBuilder.java index e6fc3c0..48aebc6 100644 --- a/src/main/java/org/hibernate/models/spi/ClassDetailsBuilder.java +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetailsBuilder.java @@ -21,6 +21,5 @@ public interface ClassDetailsBuilder { * * @throws UnknownClassException To indicate that the given class name is not valid */ - ClassDetails buildClassDetails(String name, SourceModelBuildingContext buildingContext) - throws UnknownClassException; + ClassDetails buildClassDetails(String name, SourceModelBuildingContext buildingContext); } diff --git a/hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetailsBuilderProvider.java b/hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetailsBuilderProvider.java new file mode 100644 index 0000000..456a35a --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetailsBuilderProvider.java @@ -0,0 +1,26 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ + +package org.hibernate.models.spi; + +/** + * Contract for providing custom {@link ClassDetailsBuilder} handling into the processing of + * {@link ClassDetailsRegistry#resolveClassDetails} for a Java type we have not yet seen. + * + * @apiNote {@linkplain java.util.ServiceLoader Loadable service} for extensibility. + * + * @author Steve Ebersole + */ +public interface ClassDetailsBuilderProvider { + /** + * Provide a specialized {@linkplain ClassDetailsBuilder} for this provider, or {@code null} + * + * @eturn + * if none (e.g., the Jandex provider might return null here to indicate that there is no Jandex index available). + */ + ClassDetailsBuilder provideBuilder(SourceModelBuildingContext buildingContext); +} diff --git a/src/main/java/org/hibernate/models/spi/ClassDetailsRegistry.java b/hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetailsRegistry.java similarity index 63% rename from src/main/java/org/hibernate/models/spi/ClassDetailsRegistry.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetailsRegistry.java index af5c3c8..14bc672 100644 --- a/src/main/java/org/hibernate/models/spi/ClassDetailsRegistry.java +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/ClassDetailsRegistry.java @@ -61,54 +61,19 @@ default ClassDetails getClassDetails(String name) { @SuppressWarnings("unused") void forEachDirectSubType(String superTypeName, ClassDetailsConsumer consumer); - /** - * Adds a managed-class descriptor using its {@linkplain ClassDetails#getName() name} - * as the registration key. - */ - void addClassDetails(ClassDetails classDetails); - - /** - * Adds a managed-class descriptor using the given {@code name} as the registration key - */ - void addClassDetails(String name, ClassDetails classDetails); - /** * Resolves a managed-class by name. If there is currently no such registration, * one is created. */ ClassDetails resolveClassDetails(String name); - /** - * Resolves a managed-class by name. If there is currently no such registration, - * one is created using the specified {@code creator}. - */ - ClassDetails resolveClassDetails(String name, ClassDetailsBuilder creator); - - /** - * Resolve (find or create) ClassDetails by name. If there is currently no - * such registration, one is created using the specified {@code creator}. - */ - ClassDetails resolveClassDetails(String name, ClassDetailsCreator creator); - - /** - * Create a CLass Details - */ - @ FunctionalInterface - interface ClassDetailsCreator { - /** - * @throws UnknownClassException - */ - ClassDetails createClassDetails(String name) throws UnknownClassException; + default S as(Class type) { + //noinspection unchecked + return (S) this; } @FunctionalInterface interface ClassDetailsConsumer { void consume(ClassDetails classDetails); } - - /** - * Makes a copy of this registry whose internal state is immutable - */ - @SuppressWarnings("unused") - ClassDetailsRegistry makeImmutableCopy(); } diff --git a/src/main/java/org/hibernate/models/spi/ClassLoading.java b/hibernate-models/src/main/java/org/hibernate/models/spi/ClassLoading.java similarity index 70% rename from src/main/java/org/hibernate/models/spi/ClassLoading.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/ClassLoading.java index 68da28e..35d166f 100644 --- a/src/main/java/org/hibernate/models/spi/ClassLoading.java +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/ClassLoading.java @@ -8,6 +8,8 @@ package org.hibernate.models.spi; import java.net.URL; +import java.util.Collection; +import java.util.ServiceLoader; import org.hibernate.models.Incubating; import org.hibernate.models.UnknownClassException; @@ -39,4 +41,14 @@ public interface ClassLoading { * may return {@code null} to indicate the resource was not found */ URL locateResource(String resourceName); + + /** + * Discovers and instantiates implementations of the given {@link java.util.ServiceLoader Java service} contract. + * + * @param serviceType The java type defining the service contract + * @param The type of the service contract + * + * @return The ordered set of discovered services. + */ + Collection loadJavaServices(Class serviceType); } diff --git a/src/main/java/org/hibernate/models/spi/ClassTypeDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/ClassTypeDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/ClassTypeDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/ClassTypeDetails.java diff --git a/src/main/java/org/hibernate/models/spi/FieldDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/FieldDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/FieldDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/FieldDetails.java diff --git a/src/main/java/org/hibernate/models/spi/JdkValueConverter.java b/hibernate-models/src/main/java/org/hibernate/models/spi/JdkValueConverter.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/JdkValueConverter.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/JdkValueConverter.java diff --git a/src/main/java/org/hibernate/models/spi/JdkValueExtractor.java b/hibernate-models/src/main/java/org/hibernate/models/spi/JdkValueExtractor.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/JdkValueExtractor.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/JdkValueExtractor.java diff --git a/src/main/java/org/hibernate/models/spi/MemberDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/MemberDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/MemberDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/MemberDetails.java diff --git a/src/main/java/org/hibernate/models/spi/MethodDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/MethodDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/MethodDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/MethodDetails.java diff --git a/hibernate-models/src/main/java/org/hibernate/models/spi/ModelsConfiguration.java b/hibernate-models/src/main/java/org/hibernate/models/spi/ModelsConfiguration.java new file mode 100644 index 0000000..ecb6191 --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/ModelsConfiguration.java @@ -0,0 +1,99 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ + +package org.hibernate.models.spi; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.hibernate.models.internal.BasicModelBuildingContextImpl; +import org.hibernate.models.internal.ModelsLogging; +import org.hibernate.models.internal.SimpleClassLoading; + +/** + * Bootstrapping + * + * @author Steve Ebersole + */ +public class ModelsConfiguration { + private final Map configValues = new HashMap<>(); + + private ClassLoading classLoading = SimpleClassLoading.SIMPLE_CLASS_LOADING; + private RegistryPrimer registryPrimer; + + private SourceModelBuildingContextProvider explicitContextProvider; + + public ModelsConfiguration() { + } + + public Map getConfigValues() { + return configValues; + } + + public Object configValue(Object key, Object value) { + return configValues.put( key, value ); + } + + public ClassLoading getClassLoading() { + return classLoading; + } + + public void setClassLoading(ClassLoading classLoading) { + this.classLoading = classLoading; + } + + public RegistryPrimer getRegistryPrimer() { + return registryPrimer; + } + + public void setRegistryPrimer(RegistryPrimer registryPrimer) { + this.registryPrimer = registryPrimer; + } + + public SourceModelBuildingContextProvider getExplicitContextProvider() { + return explicitContextProvider; + } + + public void setExplicitContextProvider(SourceModelBuildingContextProvider explicitContextProvider) { + this.explicitContextProvider = explicitContextProvider; + } + + public SourceModelBuildingContext bootstrap() { + if ( explicitContextProvider != null ) { + final SourceModelBuildingContext context = explicitContextProvider.produceContext( + classLoading, + registryPrimer, + configValues + ); + if ( context != null ) { + return context; + } + ModelsLogging.MODELS_LOGGER.debugf( "Explicit SourceModelBuildingContextProvider returned null" ); + } + + final Collection discoveredProviders = classLoading.loadJavaServices( SourceModelBuildingContextProvider.class ); + if ( discoveredProviders.size() > 1 ) { + ModelsLogging.MODELS_LOGGER.debugf( "Multiple SourceModelBuildingContextProvider impls found" ); + } + final Iterator iterator = discoveredProviders.iterator(); + while ( iterator.hasNext() ) { + final SourceModelBuildingContextProvider provider = iterator.next(); + final SourceModelBuildingContext context = provider.produceContext( + classLoading, + registryPrimer, + configValues + ); + if ( context != null ) { + return context; + } + } + + return new BasicModelBuildingContextImpl( classLoading, registryPrimer ); + } +} diff --git a/hibernate-models/src/main/java/org/hibernate/models/spi/MutableAnnotationDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/spi/MutableAnnotationDescriptor.java new file mode 100644 index 0000000..2b85291 --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/MutableAnnotationDescriptor.java @@ -0,0 +1,20 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ + +package org.hibernate.models.spi; + +import java.lang.annotation.Annotation; + +/** + * @author Steve Ebersole + */ +public interface MutableAnnotationDescriptor extends AnnotationDescriptor { + /** + * The mutable contract for the given annotation + */ + Class getMutableAnnotationType(); +} diff --git a/src/main/java/org/hibernate/models/spi/MutableAnnotationTarget.java b/hibernate-models/src/main/java/org/hibernate/models/spi/MutableAnnotationTarget.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/MutableAnnotationTarget.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/MutableAnnotationTarget.java diff --git a/src/main/java/org/hibernate/models/spi/MutableClassDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/MutableClassDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/MutableClassDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/MutableClassDetails.java diff --git a/src/main/java/org/hibernate/models/spi/MutableMemberDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/MutableMemberDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/MutableMemberDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/MutableMemberDetails.java diff --git a/src/main/java/org/hibernate/models/spi/ParameterizedTypeDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/ParameterizedTypeDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/ParameterizedTypeDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/ParameterizedTypeDetails.java diff --git a/src/main/java/org/hibernate/models/spi/PrimitiveTypeDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/PrimitiveTypeDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/PrimitiveTypeDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/PrimitiveTypeDetails.java diff --git a/src/main/java/org/hibernate/models/spi/RecordComponentDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/RecordComponentDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/RecordComponentDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/RecordComponentDetails.java diff --git a/src/main/java/org/hibernate/models/spi/RegistryPrimer.java b/hibernate-models/src/main/java/org/hibernate/models/spi/RegistryPrimer.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/RegistryPrimer.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/RegistryPrimer.java diff --git a/src/main/java/org/hibernate/models/spi/RenderingCollector.java b/hibernate-models/src/main/java/org/hibernate/models/spi/RenderingCollector.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/RenderingCollector.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/RenderingCollector.java diff --git a/src/main/java/org/hibernate/models/spi/SourceModelBuildingContext.java b/hibernate-models/src/main/java/org/hibernate/models/spi/SourceModelBuildingContext.java similarity index 80% rename from src/main/java/org/hibernate/models/spi/SourceModelBuildingContext.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/SourceModelBuildingContext.java index f24238a..ddbbab6 100644 --- a/src/main/java/org/hibernate/models/spi/SourceModelBuildingContext.java +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/SourceModelBuildingContext.java @@ -6,8 +6,6 @@ */ package org.hibernate.models.spi; -import org.jboss.jandex.IndexView; - /** * Context object used while building references for {@link AnnotationDescriptor}, * {@link ClassDetails} and friends. @@ -16,7 +14,7 @@ * * @author Steve Ebersole */ -public interface SourceModelBuildingContext extends SourceModelContext, SharedNamedAnnotationScope { +public interface SourceModelBuildingContext extends SourceModelContext { //, SharedNamedAnnotationScope { /** * If model processing code needs to load things from the class-loader, they should * really use this access. At this level, accessing the class-loader at all @@ -24,8 +22,8 @@ public interface SourceModelBuildingContext extends SourceModelContext, SharedNa */ ClassLoading getClassLoading(); - /** - * Access to the pre-built Jandex index}, if any. - */ - IndexView getJandexIndex(); + default S as(Class type) { + //noinspection unchecked + return (S) this; + } } diff --git a/hibernate-models/src/main/java/org/hibernate/models/spi/SourceModelBuildingContextProvider.java b/hibernate-models/src/main/java/org/hibernate/models/spi/SourceModelBuildingContextProvider.java new file mode 100644 index 0000000..3a7b09b --- /dev/null +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/SourceModelBuildingContextProvider.java @@ -0,0 +1,28 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright: Red Hat Inc. and Hibernate Authors + */ + +package org.hibernate.models.spi; + +import java.util.Map; + +/** + * Pluggable support for optional {@linkplain SourceModelBuildingContext} implementations, resolved + * using {@linkplain java.util.ServiceLoader Java services}. + * + * @apiNote If none found, or if the provider(s) return null, the expectation is that the + * {@linkplain org.hibernate.models.internal.BasicModelBuildingContextImpl default impl} should be used. + * + * @author Steve Ebersole + */ +public interface SourceModelBuildingContextProvider { + /** + * Produce an alternate SourceModelBuildingContext. + * + * @return The alternate context, or null. + */ + SourceModelBuildingContext produceContext(ClassLoading classLoading, RegistryPrimer registryPrimer, Map configProperties); +} diff --git a/src/main/java/org/hibernate/models/spi/SourceModelContext.java b/hibernate-models/src/main/java/org/hibernate/models/spi/SourceModelContext.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/SourceModelContext.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/SourceModelContext.java diff --git a/src/main/java/org/hibernate/models/spi/TypeDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/TypeDetails.java similarity index 96% rename from src/main/java/org/hibernate/models/spi/TypeDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/TypeDetails.java index e32b3f4..b988866 100644 --- a/src/main/java/org/hibernate/models/spi/TypeDetails.java +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/TypeDetails.java @@ -7,15 +7,14 @@ package org.hibernate.models.spi; -import static org.hibernate.models.internal.IsResolvedTypeSwitch.IS_RESOLVED_SWITCH; +import org.hibernate.models.internal.IsResolvedTypeSwitch; + import static org.hibernate.models.spi.TypeDetailsSwitch.switchType; /** * Abstraction for what Hibernate understands about a "type", generally before it has access to * the actual {@link java.lang.reflect.Type} reference. * - * @see org.jboss.jandex.Type - * * @author Steve Ebersole */ public interface TypeDetails extends TypeVariableScope { @@ -110,7 +109,7 @@ default boolean isResolved() { // IMPORTANT : Relies on the fact that `IsResolvedTypeSwitch` never uses the // `SourceModelBuildingContext` passed to it as a `TypeDetailsSwitch` implementation. // Hence, the passing `null` here - return switchType( this, IS_RESOLVED_SWITCH, null ); + return switchType( this, IsResolvedTypeSwitch.IS_RESOLVED_SWITCH, null ); } /** diff --git a/src/main/java/org/hibernate/models/spi/TypeDetailsHelper.java b/hibernate-models/src/main/java/org/hibernate/models/spi/TypeDetailsHelper.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/TypeDetailsHelper.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/TypeDetailsHelper.java diff --git a/src/main/java/org/hibernate/models/spi/TypeDetailsSwitch.java b/hibernate-models/src/main/java/org/hibernate/models/spi/TypeDetailsSwitch.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/TypeDetailsSwitch.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/TypeDetailsSwitch.java diff --git a/src/main/java/org/hibernate/models/spi/TypeVariableDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/TypeVariableDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/TypeVariableDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/TypeVariableDetails.java diff --git a/src/main/java/org/hibernate/models/spi/TypeVariableReferenceDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/TypeVariableReferenceDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/TypeVariableReferenceDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/TypeVariableReferenceDetails.java diff --git a/src/main/java/org/hibernate/models/spi/TypeVariableScope.java b/hibernate-models/src/main/java/org/hibernate/models/spi/TypeVariableScope.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/TypeVariableScope.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/TypeVariableScope.java diff --git a/src/main/java/org/hibernate/models/spi/ValueTypeDescriptor.java b/hibernate-models/src/main/java/org/hibernate/models/spi/ValueTypeDescriptor.java similarity index 87% rename from src/main/java/org/hibernate/models/spi/ValueTypeDescriptor.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/ValueTypeDescriptor.java index 3dfec28..df93e02 100644 --- a/src/main/java/org/hibernate/models/spi/ValueTypeDescriptor.java +++ b/hibernate-models/src/main/java/org/hibernate/models/spi/ValueTypeDescriptor.java @@ -25,10 +25,6 @@ public interface ValueTypeDescriptor { */ AttributeDescriptor createAttributeDescriptor(Class annotationType, String attributeName); - JandexValueConverter createJandexValueConverter(SourceModelBuildingContext modelContext); - - JandexValueExtractor createJandexValueExtractor(SourceModelBuildingContext modelContext); - JdkValueConverter createJdkValueConverter(SourceModelBuildingContext modelContext); JdkValueExtractor createJdkValueExtractor(SourceModelBuildingContext modelContext); diff --git a/src/main/java/org/hibernate/models/spi/VoidTypeDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/VoidTypeDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/VoidTypeDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/VoidTypeDetails.java diff --git a/src/main/java/org/hibernate/models/spi/WildcardTypeDetails.java b/hibernate-models/src/main/java/org/hibernate/models/spi/WildcardTypeDetails.java similarity index 100% rename from src/main/java/org/hibernate/models/spi/WildcardTypeDetails.java rename to hibernate-models/src/main/java/org/hibernate/models/spi/WildcardTypeDetails.java diff --git a/src/test/resources/log4j2.properties b/hibernate-models/src/test/resources/log4j2.properties similarity index 100% rename from src/test/resources/log4j2.properties rename to hibernate-models/src/test/resources/log4j2.properties diff --git a/settings.gradle b/settings.gradle index d9e7f6c..9c7af13 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,7 @@ pluginManagement { plugins { id "org.checkerframework" version "0.6.34" apply false + id "io.github.gradle-nexus.publish-plugin" version "2.0.0" apply false } repositories { gradlePluginPortal() @@ -12,7 +13,7 @@ plugins { id 'com.gradle.develocity' version '3.17.4' } -rootProject.name = "hibernate-models" +rootProject.name = "hibernate-models-group" dependencyResolutionManagement { repositories { @@ -126,3 +127,6 @@ dependencyResolutionManagement { } } +include "hibernate-models" +include "hibernate-models-jandex" +include 'hibernate-models-testing' diff --git a/src/main/java/org/hibernate/models/internal/AbstractClassDetailsRegistry.java b/src/main/java/org/hibernate/models/internal/AbstractClassDetailsRegistry.java deleted file mode 100644 index 10b8b3f..0000000 --- a/src/main/java/org/hibernate/models/internal/AbstractClassDetailsRegistry.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * SPDX-License-Identifier: Apache-2.0 - * Copyright: Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.models.internal; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.hibernate.models.spi.ClassDetails; -import org.hibernate.models.spi.ClassDetailsBuilder; -import org.hibernate.models.spi.ClassDetailsRegistry; - -/** - * @author Steve Ebersole - */ -public abstract class AbstractClassDetailsRegistry implements ClassDetailsRegistry { - protected final Map classDetailsMap; - - // subtype per type - protected final Map> subTypeClassDetailsMap; - - protected AbstractClassDetailsRegistry() { - this( new ConcurrentHashMap<>(), new ConcurrentHashMap<>() ); - } - - protected AbstractClassDetailsRegistry( - Map classDetailsMap, - Map> subTypeClassDetailsMap) { - this.classDetailsMap = classDetailsMap; - this.subTypeClassDetailsMap = subTypeClassDetailsMap; - } - - @Override - public List getDirectSubTypes(String superTypeName) { - return subTypeClassDetailsMap.get( superTypeName ); - } - - @Override - public void forEachDirectSubType(String superTypeName, ClassDetailsConsumer consumer) { - final List directSubTypes = getDirectSubTypes( superTypeName ); - if ( directSubTypes == null ) { - return; - } - for ( int i = 0; i < directSubTypes.size(); i++ ) { - consumer.consume( directSubTypes.get( i ) ); - } - } - - @Override - public ClassDetails findClassDetails(String name) { - return classDetailsMap.get( name ); - } - - @Override - public void forEachClassDetails(ClassDetailsConsumer consumer) { - for ( Map.Entry entry : classDetailsMap.entrySet() ) { - consumer.consume( entry.getValue() ); - } - } - - @Override - public ClassDetails resolveClassDetails(String name, ClassDetailsBuilder creator) { - if ( name == null ) { - throw new IllegalArgumentException( "`name` cannot be null" ); - } - - final ClassDetails existing = classDetailsMap.get( name ); - if ( existing != null ) { - return existing; - } - - return createClassDetails( name, creator ); - } - - protected abstract ClassDetails createClassDetails(String name, ClassDetailsBuilder creator); - - @Override public ClassDetails resolveClassDetails( - String name, - ClassDetailsCreator creator) { - if ( name == null ) { - throw new IllegalArgumentException( "`name` cannot be null" ); - } - - if ( "void".equals( name ) ) { - return null; - } - - final ClassDetails existing = classDetailsMap.get( name ); - if ( existing != null ) { - return existing; - } - - return createClassDetails( name, creator ); - } - - protected abstract ClassDetails createClassDetails(String name, ClassDetailsCreator creator); -} diff --git a/src/main/java/org/hibernate/models/internal/AnnotationDescriptorRegistryImmutable.java b/src/main/java/org/hibernate/models/internal/AnnotationDescriptorRegistryImmutable.java deleted file mode 100644 index 1287b29..0000000 --- a/src/main/java/org/hibernate/models/internal/AnnotationDescriptorRegistryImmutable.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * SPDX-License-Identifier: Apache-2.0 - * Copyright: Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.models.internal; - -import java.lang.annotation.Annotation; -import java.util.Map; - -import org.hibernate.models.ModelsException; -import org.hibernate.models.spi.AnnotationDescriptor; -import org.hibernate.models.spi.AnnotationDescriptorRegistry; - -import static org.hibernate.models.internal.ModelsAnnotationLogging.MODELS_ANNOTATION_LOGGER; - -/** - * @author Steve Ebersole - */ -public class AnnotationDescriptorRegistryImmutable extends AbstractAnnotationDescriptorRegistry { - public AnnotationDescriptorRegistryImmutable( - Map, AnnotationDescriptor> descriptorMap, - Map, AnnotationDescriptor> repeatableByContainerMap) { - super( descriptorMap, repeatableByContainerMap ); - MODELS_ANNOTATION_LOGGER.debugf( "Created immutable AnnotationDescriptorRegistry" ); - } - - @Override - public AnnotationDescriptor getDescriptor(Class javaType) { - return resolveDescriptor( javaType, null ); - } - - @Override - public AnnotationDescriptor resolveDescriptor( - Class javaType, - DescriptorCreator creator) { - //noinspection unchecked - final AnnotationDescriptor descriptor = (AnnotationDescriptor) descriptorMap.get( javaType ); - if ( descriptor == null ) { - throw new ModelsException( "AnnotationDescriptorRegistry is immutable - " + javaType.getName() ); - } - return descriptor; - } - - @Override - public AnnotationDescriptorRegistry makeImmutableCopy() { - return this; - } -} diff --git a/src/main/java/org/hibernate/models/internal/ClassDetailsRegistryImmutable.java b/src/main/java/org/hibernate/models/internal/ClassDetailsRegistryImmutable.java deleted file mode 100644 index 1069740..0000000 --- a/src/main/java/org/hibernate/models/internal/ClassDetailsRegistryImmutable.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * SPDX-License-Identifier: Apache-2.0 - * Copyright: Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.models.internal; - -import java.util.List; -import java.util.Map; - -import org.hibernate.models.ModelsException; -import org.hibernate.models.spi.ClassDetails; -import org.hibernate.models.spi.ClassDetailsBuilder; -import org.hibernate.models.spi.ClassDetailsRegistry; - -import static org.hibernate.models.internal.ModelsClassLogging.MODELS_CLASS_LOGGER; - -/** - * @author Steve Ebersole - */ -public class ClassDetailsRegistryImmutable extends AbstractClassDetailsRegistry { - public ClassDetailsRegistryImmutable( - Map classDetailsMap, - Map> subTypeClassDetailsMap) { - super( classDetailsMap, subTypeClassDetailsMap ); - MODELS_CLASS_LOGGER.debugf( "Created immutable ClassDetailsRegistry" ); - } - - @Override - protected ClassDetails createClassDetails(String name, ClassDetailsBuilder creator) { - throw new ModelsException( "ClassDetailsRegistry is immutable" ); - } - - @Override - protected ClassDetails createClassDetails(String name, ClassDetailsCreator creator) { - throw new ModelsException( "ClassDetailsRegistry is immutable" ); - } - - @Override - public void addClassDetails(ClassDetails classDetails) { - throw new ModelsException( "ClassDetailsRegistry is immutable" ); - } - - @Override - public void addClassDetails(String name, ClassDetails classDetails) { - throw new ModelsException( "ClassDetailsRegistry is immutable" ); - } - - @Override - public ClassDetails resolveClassDetails(String name) { - return resolveClassDetails( name, (ClassDetailsCreator) null ); - } - - @Override - public ClassDetailsRegistry makeImmutableCopy() { - return this; - } -} diff --git a/src/main/java/org/hibernate/models/internal/ClassDetailsRegistryStandard.java b/src/main/java/org/hibernate/models/internal/ClassDetailsRegistryStandard.java deleted file mode 100644 index 30d5631..0000000 --- a/src/main/java/org/hibernate/models/internal/ClassDetailsRegistryStandard.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * SPDX-License-Identifier: Apache-2.0 - * Copyright: Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.models.internal; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.hibernate.models.UnknownClassException; -import org.hibernate.models.internal.jandex.JandexBuilders; -import org.hibernate.models.internal.jdk.JdkBuilders; -import org.hibernate.models.spi.ClassDetails; -import org.hibernate.models.spi.ClassDetailsBuilder; -import org.hibernate.models.spi.ClassDetailsRegistry; -import org.hibernate.models.spi.SourceModelBuildingContext; - -import org.jboss.jandex.IndexView; - -import static org.hibernate.models.internal.ModelsClassLogging.MODELS_CLASS_LOGGER; - -/** - * Standard ClassDetailsRegistry implementation. - * - * @author Steve Ebersole - */ -public class ClassDetailsRegistryStandard extends AbstractClassDetailsRegistry { - private final StandardClassDetailsBuilder standardClassDetailsBuilder; - private final SourceModelBuildingContext context; - - public ClassDetailsRegistryStandard(SourceModelBuildingContext context) { - this.context = context; - this.standardClassDetailsBuilder = new StandardClassDetailsBuilder( JdkBuilders.DEFAULT_BUILDER, context.getJandexIndex() ); - - classDetailsMap.put( ClassDetails.VOID_CLASS_DETAILS.getClassName(), ClassDetails.VOID_CLASS_DETAILS ); - classDetailsMap.put( ClassDetails.VOID_OBJECT_CLASS_DETAILS.getClassName(), ClassDetails.VOID_OBJECT_CLASS_DETAILS ); - classDetailsMap.put( ClassDetails.OBJECT_CLASS_DETAILS.getClassName(), ClassDetails.OBJECT_CLASS_DETAILS ); - } - - @Override - public void addClassDetails(ClassDetails classDetails) { - addClassDetails( classDetails.getClassName(), classDetails ); - } - - @Override - public void addClassDetails(String name, ClassDetails classDetails) { - classDetailsMap.put( name, classDetails ); - - if ( classDetails.getSuperClass() != null ) { - List subTypes = subTypeClassDetailsMap.get( classDetails.getSuperClass().getName() ); - //noinspection Java8MapApi - if ( subTypes == null ) { - subTypes = new ArrayList<>(); - subTypeClassDetailsMap.put( classDetails.getSuperClass().getName(), subTypes ); - } - subTypes.add( classDetails ); - } - } - - @Override - public ClassDetails resolveClassDetails(String name) { - return resolveClassDetails( name, standardClassDetailsBuilder ); - } - - @Override - protected ClassDetails createClassDetails(String name, ClassDetailsBuilder creator) { - try { - final ClassDetails created = creator.buildClassDetails( name, context ); - addClassDetails( name, created ); - return created; - } - catch (UnknownClassException e) { - // see if it might be a package name... - try { - return creator.buildClassDetails( name + ".package-info", context ); - } - catch (UnknownClassException noPackage) { - throw e; - } - } - } - - @Override - protected ClassDetails createClassDetails(String name, ClassDetailsCreator creator) { - try { - final ClassDetails created = creator.createClassDetails( name ); - addClassDetails( name, created ); - return created; - } - catch (UnknownClassException e) { - // see if it might be a package name... - try { - return creator.createClassDetails( name + ".package-info" ); - } - catch (UnknownClassException noPackage) { - throw e; - } - } - } - - private static class StandardClassDetailsBuilder implements ClassDetailsBuilder { - private final boolean tryJandex; - private final ClassDetailsBuilder fallbackClassDetailsBuilder; - - public StandardClassDetailsBuilder(ClassDetailsBuilder fallbackClassDetailsBuilder, IndexView jandexIndex) { - this.fallbackClassDetailsBuilder = fallbackClassDetailsBuilder; - this.tryJandex = jandexIndex != null; - - if ( tryJandex ) { - MODELS_CLASS_LOGGER.debug( "Starting StandardClassDetailsBuilder with Jandex support" ); - } - else { - MODELS_CLASS_LOGGER.debug( "Starting StandardClassDetailsBuilder without Jandex support" ); - } - } - - @Override - public ClassDetails buildClassDetails(String name, SourceModelBuildingContext buildingContext) { - MODELS_CLASS_LOGGER.tracef( "Building ClassDetails - %s", name ); - if ( tryJandex ) { - try { - return JandexBuilders.buildClassDetailsStatic( name, buildingContext ); - } - catch (UnknownClassException e) { - // generally means the class is not in the Jandex index - try the fallback - } - } - - return fallbackClassDetailsBuilder.buildClassDetails( name, buildingContext ); - } - } - - @Override - public ClassDetailsRegistry makeImmutableCopy() { - return new ClassDetailsRegistryImmutable( - Map.copyOf( classDetailsMap ), - Map.copyOf( subTypeClassDetailsMap ) - ); - } -} diff --git a/src/main/java/org/hibernate/models/internal/SourceModelBuildingContextImpl.java b/src/main/java/org/hibernate/models/internal/SourceModelBuildingContextImpl.java deleted file mode 100644 index 71a80c6..0000000 --- a/src/main/java/org/hibernate/models/internal/SourceModelBuildingContextImpl.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * SPDX-License-Identifier: Apache-2.0 - * Copyright: Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.models.internal; - -import java.lang.annotation.Annotation; -import java.util.List; -import java.util.function.Consumer; - -import org.hibernate.models.internal.jdk.JdkBuilders; -import org.hibernate.models.spi.AnnotationDescriptor; -import org.hibernate.models.spi.AnnotationDescriptorRegistry; -import org.hibernate.models.spi.ClassDetails; -import org.hibernate.models.spi.ClassDetailsRegistry; -import org.hibernate.models.spi.ClassLoading; -import org.hibernate.models.spi.RegistryPrimer; -import org.hibernate.models.spi.SourceModelBuildingContext; - -import org.jboss.jandex.IndexView; - -/** - * @author Steve Ebersole - */ -public class SourceModelBuildingContextImpl implements SourceModelBuildingContext { - private final ClassLoading classLoadingAccess; - private final IndexView jandexIndex; - - private final AnnotationDescriptorRegistryStandard descriptorRegistry; - private final ClassDetailsRegistryStandard classDetailsRegistry; - - public SourceModelBuildingContextImpl(ClassLoading classLoadingAccess, IndexView jandexIndex) { - this( classLoadingAccess, jandexIndex, null ); - } - - public SourceModelBuildingContextImpl( - ClassLoading classLoadingAccess, - IndexView jandexIndex, - RegistryPrimer registryPrimer) { - this.classLoadingAccess = classLoadingAccess; - this.jandexIndex = jandexIndex; - - this.descriptorRegistry = new AnnotationDescriptorRegistryStandard( this ); - this.classDetailsRegistry = new ClassDetailsRegistryStandard( this ); - - primeRegistries( registryPrimer ); - } - - @Override - public AnnotationDescriptorRegistry getAnnotationDescriptorRegistry() { - return descriptorRegistry; - } - - @Override - public ClassDetailsRegistry getClassDetailsRegistry() { - return classDetailsRegistry; - } - - @Override - public ClassLoading getClassLoading() { - return classLoadingAccess; - } - - @Override - public IndexView getJandexIndex() { - return jandexIndex; - } - - @Override - public List getAllAnnotationUsages(Class annotationType) { - throw new UnsupportedOperationException( "Not yet implemented" ); - } - - @Override - public void forEachAnnotationUsage(Class annotationType, Consumer consumer) { - throw new UnsupportedOperationException( "Not yet implemented" ); - } - - - - private void primeRegistries(RegistryPrimer registryPrimer) { - BaseLineJavaTypes.forEachJavaType( this::primeClassDetails ); - - if ( registryPrimer != null ) { - registryPrimer.primeRegistries( new RegistryContributions(), this ); - } - } - - private void primeClassDetails(Class javaType) { - // Since we have a Class reference already, it is safe to directly use - // the reflection - classDetailsRegistry.resolveClassDetails( - javaType.getName(), - (name) -> JdkBuilders.buildClassDetailsStatic( javaType, this ) - ); - } - - private void primeAnnotation(AnnotationDescriptor descriptor) { - descriptorRegistry.register( descriptor ); - primeClassDetails( descriptor.getAnnotationType() ); - } - - private class RegistryContributions implements RegistryPrimer.Contributions { - @Override - public void registerAnnotation(AnnotationDescriptor descriptor) { - primeAnnotation( descriptor ); - } - - @Override - public void registerClass(ClassDetails details) { - classDetailsRegistry.addClassDetails( details ); - } - } -} diff --git a/src/main/java/org/hibernate/models/internal/jandex/JandexBuilders.java b/src/main/java/org/hibernate/models/internal/jandex/JandexBuilders.java deleted file mode 100644 index 630a61d..0000000 --- a/src/main/java/org/hibernate/models/internal/jandex/JandexBuilders.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * SPDX-License-Identifier: Apache-2.0 - * Copyright: Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.models.internal.jandex; - -import org.hibernate.models.UnknownClassException; -import org.hibernate.models.internal.jdk.JdkBuilders; -import org.hibernate.models.internal.util.StringHelper; -import org.hibernate.models.spi.ClassDetails; -import org.hibernate.models.spi.ClassDetailsBuilder; -import org.hibernate.models.spi.MethodDetails; -import org.hibernate.models.spi.SourceModelBuildingContext; - -import org.jboss.jandex.ClassInfo; -import org.jboss.jandex.IndexView; -import org.jboss.jandex.MethodInfo; -import org.jboss.jandex.Type; - -import static org.hibernate.models.internal.jandex.JandexTypeSwitchStandard.switchType; - -/** - * Jandex based ClassDetailsBuilder - * - * @author Steve Ebersole - */ -public class JandexBuilders implements ClassDetailsBuilder { - public static final JandexBuilders DEFAULT_BUILDER = new JandexBuilders(); - - public JandexBuilders() { - } - - @Override - public ClassDetails buildClassDetails(String name, SourceModelBuildingContext buildingContext) { - return buildClassDetailsStatic( name, buildingContext.getJandexIndex(), buildingContext ); - } - - public static ClassDetails buildClassDetailsStatic( - String name, - SourceModelBuildingContext processingContext) { - return buildClassDetailsStatic( name, processingContext.getJandexIndex(), processingContext ); - } - - public static ClassDetails buildClassDetailsStatic( - String name, - IndexView jandexIndex, - SourceModelBuildingContext processingContext) { - if ( "void".equals( name ) ) { - name = Void.class.getName(); - } - final ClassInfo classInfo = jandexIndex.getClassByName( name ); - if ( StringHelper.isNotEmpty( name ) && classInfo == null ) { - // potentially handle primitives - final Class primitiveClass = resolvePrimitiveClass( name ); - if ( primitiveClass != null ) { - return JdkBuilders.buildClassDetailsStatic( primitiveClass, processingContext ); - } - - throw new UnknownClassException( "Could not find class [" + name + "] in Jandex index" ); - } - return new JandexClassDetails( classInfo, processingContext ); - } - - 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, - 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, - 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, - 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" ); - } -} diff --git a/src/main/java/org/hibernate/models/spi/SharedAnnotationScope.java b/src/main/java/org/hibernate/models/spi/SharedAnnotationScope.java deleted file mode 100644 index 5daff49..0000000 --- a/src/main/java/org/hibernate/models/spi/SharedAnnotationScope.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * SPDX-License-Identifier: Apache-2.0 - * Copyright: Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.models.spi; - -import java.lang.annotation.Annotation; -import java.util.List; -import java.util.function.Consumer; - -/** - * A scope for annotation usages. Differs from {@linkplain AnnotationTarget} in that this - * is a "registry" of usages that are shareable. - *

- * Generally speaking, this equates to global and package scope. - * - * @author Steve Ebersole - */ -public interface SharedAnnotationScope { - List getAllAnnotationUsages(Class annotationType); - - default List getAllAnnotationUsages(AnnotationDescriptor annotationDescriptor) { - return getAllAnnotationUsages( annotationDescriptor.getAnnotationType() ); - } - - void forEachAnnotationUsage(Class annotationType, Consumer consumer); - - default void forEachAnnotationUsage( - AnnotationDescriptor annotationDescriptor, - Consumer consumer) { - forEachAnnotationUsage( annotationDescriptor.getAnnotationType(), consumer ); - } -} diff --git a/src/main/java/org/hibernate/models/spi/SharedNamedAnnotationScope.java b/src/main/java/org/hibernate/models/spi/SharedNamedAnnotationScope.java deleted file mode 100644 index 54a3953..0000000 --- a/src/main/java/org/hibernate/models/spi/SharedNamedAnnotationScope.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * SPDX-License-Identifier: Apache-2.0 - * Copyright: Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.models.spi; - -import java.lang.annotation.Annotation; -import java.util.List; -import java.util.Objects; - -import org.hibernate.models.internal.AnnotationHelper; - -/** - * AnnotationScope with the ability to resolve "named" annotations - * - * @author Steve Ebersole - */ -public interface SharedNamedAnnotationScope extends SharedAnnotationScope { - /** - * Get a usage of the given annotation {@code annotationDescriptor} whose {@code attributeToMatch} attribute value - * matches the given {@code matchName}. - * - * @param annotationDescriptor The type of annotation to search - * @param matchName The name to match. - * @return The matching annotation usage, or {@code null} if none matched - */ - default X getNamedAnnotation( - AnnotationDescriptor annotationDescriptor, - String matchName) { - return getNamedAnnotation( annotationDescriptor, matchName, "name" ); - } - - /** - * Get a usage of the given {@code annotationDescriptor} whose - * {@code attributeToMatch} attribute value matches the given {@code matchName}. - * - * @param annotationDescriptor The type of annotation to search - * @param matchName The name to match. - * @param attributeToMatch Name of the attribute to match on. - * - * @return The matching annotation usage, or {@code null} if none matched - */ - default A getNamedAnnotation( - AnnotationDescriptor annotationDescriptor, - String matchName, - String attributeToMatch) { - final List allUsages = getAllAnnotationUsages( annotationDescriptor ); - final AttributeDescriptor matchAttribute = annotationDescriptor.getAttribute( attributeToMatch ); - for ( int i = 0; i < allUsages.size(); i++ ) { - final A annotationUsage = allUsages.get( i ); - final String usageName = AnnotationHelper.extractValue( annotationUsage, matchAttribute ); - if ( Objects.equals( matchName, usageName ) ) { - return annotationUsage; - } - } - return null; - } -} diff --git a/src/test/java/org/hibernate/models/annotations/RegistryTests.java b/src/test/java/org/hibernate/models/annotations/RegistryTests.java deleted file mode 100644 index 439d6bb..0000000 --- a/src/test/java/org/hibernate/models/annotations/RegistryTests.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * SPDX-License-Identifier: Apache-2.0 - * Copyright: Red Hat Inc. and Hibernate Authors - */ - -package org.hibernate.models.annotations; - -import org.hibernate.models.ModelsException; -import org.hibernate.models.SourceModelTestHelper; -import org.hibernate.models.internal.AnnotationDescriptorRegistryStandard; -import org.hibernate.models.internal.SourceModelBuildingContextImpl; -import org.hibernate.models.internal.StandardAnnotationDescriptor; -import org.hibernate.models.spi.AnnotationDescriptorRegistry; - -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.fail; - -/** - * @author Steve Ebersole - */ -public class RegistryTests { - @Test - void testImmutableRegistry() { - final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext(); - - final AnnotationDescriptorRegistryStandard base = new AnnotationDescriptorRegistryStandard( buildingContext ); - base.register( new StandardAnnotationDescriptor<>( Annotation1.class, buildingContext ) ); - assertThat( base.getDescriptor( Annotation1.class ) ).isNotNull(); - - final AnnotationDescriptorRegistry immutableCopy = base.makeImmutableCopy(); - assertThat( immutableCopy.getDescriptor( Annotation1.class ) ).isNotNull(); - - // this should succeed - base.resolveDescriptor( Annotation2.class, annotationType -> new StandardAnnotationDescriptor<>( annotationType, buildingContext ) ); - - // this should fail - try { - immutableCopy.resolveDescriptor( Annotation2.class, annotationType -> new StandardAnnotationDescriptor<>( annotationType, buildingContext ) ); - fail( "Expecting an exception" ); - } - catch (ModelsException expected) { - assertThat( expected.getMessage() ).contains( "immutable" ); - } - } - - public @interface Annotation1 { - - } - - public @interface Annotation2 { - - } -} diff --git a/src/test/java/org/hibernate/models/pkg/package-info.java b/src/test/java/org/hibernate/models/pkg/package-info.java deleted file mode 100644 index aab848e..0000000 --- a/src/test/java/org/hibernate/models/pkg/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @author Steve Ebersole - */ -@CustomAnnotation -package org.hibernate.models.pkg;