Skip to content

Commit 2753116

Browse files
committed
#136 - Allow control over whether to track implementors
1 parent a7d188f commit 2753116

File tree

20 files changed

+473
-184
lines changed

20 files changed

+473
-184
lines changed

buildSrc/src/main/groovy/testing.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ dependencies {
1212
testImplementation jakartaLibs.jpa
1313
testImplementation testLibs.junit5Api
1414
testImplementation testLibs.assertjCore
15+
testImplementation testLibs.junit5Params
1516

1617
testImplementation testLibs.junit5Engine
1718
testImplementation testLibs.log4j

hibernate-models-bytebuddy/src/main/java/org/hibernate/models/bytebuddy/internal/ByteBuddyContextProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.hibernate.models.bytebuddy.Settings;
1010
import org.hibernate.models.internal.BasicModelsContextImpl;
1111
import org.hibernate.models.spi.ClassLoading;
12+
import org.hibernate.models.spi.ModelsConfiguration;
1213
import org.hibernate.models.spi.ModelsContext;
1314
import org.hibernate.models.spi.RegistryPrimer;
1415
import org.hibernate.models.spi.ModelsContextProvider;
@@ -27,12 +28,13 @@ public ModelsContext produceContext(
2728
RegistryPrimer registryPrimer,
2829
Map<Object, Object> configProperties) {
2930
final TypePool typePool = resolveTypePool( configProperties );
31+
final boolean trackImplementors = ModelsConfiguration.shouldTrackImplementors( configProperties );
3032

3133
if ( typePool != null ) {
32-
return new ByteBuddyModelsContextImpl( typePool, classLoading, registryPrimer );
34+
return new ByteBuddyModelsContextImpl( typePool, trackImplementors, classLoading, registryPrimer );
3335
}
3436

35-
return new BasicModelsContextImpl( classLoading, registryPrimer );
37+
return new BasicModelsContextImpl( classLoading, trackImplementors, registryPrimer );
3638
}
3739

3840
private TypePool resolveTypePool(Map<Object, Object> configProperties) {

hibernate-models-bytebuddy/src/main/java/org/hibernate/models/bytebuddy/internal/ByteBuddyModelsContextImpl.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
import net.bytebuddy.pool.TypePool;
2323

24+
import static org.hibernate.models.internal.ModelsClassLogging.MODELS_CLASS_LOGGER;
25+
2426
/**
2527
* Implementation of ByteBuddyModelsContext
2628
*
@@ -39,13 +41,16 @@ public class ByteBuddyModelsContextImpl
3941

4042
public ByteBuddyModelsContextImpl(
4143
TypePool typePool,
44+
boolean trackImplementors,
4245
ClassLoading classLoading,
4346
RegistryPrimer registryPrimer) {
4447
super( classLoading );
4548

49+
MODELS_CLASS_LOGGER.debugf( "Using Byte Buddy support" );
50+
4651
this.typePool = typePool;
4752

48-
this.classDetailsRegistry = new ClassDetailsRegistryImpl( this );
53+
this.classDetailsRegistry = new ClassDetailsRegistryImpl( this, trackImplementors );
4954
this.descriptorRegistry = new AnnotationDescriptorRegistryStandard( this );
5055

5156
primeRegistries( registryPrimer );
@@ -68,7 +73,11 @@ public MutableAnnotationDescriptorRegistry getAnnotationDescriptorRegistry() {
6873

6974
@Override
7075
public StorableContext toStorableForm() {
71-
return new StorableContextImpl( classDetailsRegistry.classDetailsMap(), descriptorRegistry.descriptorMap() );
76+
return new StorableContextImpl(
77+
classDetailsRegistry.isTrackingImplementors(),
78+
classDetailsRegistry.classDetailsMap(),
79+
descriptorRegistry.descriptorMap()
80+
);
7281
}
7382

7483
@Override

hibernate-models-bytebuddy/src/main/java/org/hibernate/models/bytebuddy/internal/ClassDetailsRegistryImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
public class ClassDetailsRegistryImpl extends AbstractClassDetailsRegistry {
1919
private final ClassDetailsBuilderImpl classDetailsBuilder;
2020

21-
public ClassDetailsRegistryImpl(ByteBuddyModelsContextImpl context) {
22-
super( context );
21+
public ClassDetailsRegistryImpl(ByteBuddyModelsContextImpl context, boolean trackImplementors) {
22+
super( trackImplementors, context );
2323
this.classDetailsBuilder = new ClassDetailsBuilderImpl( context );
2424
}
2525

hibernate-models-bytebuddy/src/test/java/org/hibernate/models/testing/shared/intg/ByteBuddyModelsContextFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public ByteBuddyModelsContext createModelContext(
2929
RegistryPrimer registryPrimer,
3030
Class<?>... modelClasses) {
3131
final TypePool byteBuddyTypePool = buildTypePool( modelClasses );
32-
return new ByteBuddyModelsContextImpl( byteBuddyTypePool, SIMPLE_CLASS_LOADING, registryPrimer );
32+
return new ByteBuddyModelsContextImpl( byteBuddyTypePool, true, SIMPLE_CLASS_LOADING, registryPrimer );
3333
}
3434

3535
public static TypePool buildTypePool(Class<?>... modelClasses) {

hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexClassDetailsRegistry.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ public class JandexClassDetailsRegistry extends AbstractClassDetailsRegistry {
2323
private final IndexView jandexIndex;
2424
private final ClassDetailsBuilder classDetailsBuilder;
2525

26-
public JandexClassDetailsRegistry(IndexView jandexIndex, ModelsContext context) {
27-
super( context );
26+
public JandexClassDetailsRegistry(IndexView jandexIndex, boolean trackImplementors, ModelsContext context) {
27+
super( trackImplementors, context );
2828
this.jandexIndex = jandexIndex;
2929
this.classDetailsBuilder = new JandexClassDetailsBuilderImpl( jandexIndex, context );
3030
}

hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexModelsContextImpl.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,18 @@ public class JandexModelsContextImpl extends AbstractModelsContext implements Ja
4040

4141
public JandexModelsContextImpl(
4242
IndexView jandexIndex,
43+
boolean trackImplementors,
4344
ClassLoading classLoading,
4445
RegistryPrimer registryPrimer) {
4546
super( classLoading );
4647

48+
MODELS_CLASS_LOGGER.debugf( "Using Jandex support" );
49+
4750
assert jandexIndex != null;
4851
this.jandexIndex = jandexIndex;
4952

50-
MODELS_CLASS_LOGGER.debugf( "Using Jandex support" );
51-
5253
this.descriptorRegistry = new JandexAnnotationDescriptorRegistry( this );
53-
this.classDetailsRegistry = new JandexClassDetailsRegistry( jandexIndex, this );
54+
this.classDetailsRegistry = new JandexClassDetailsRegistry( jandexIndex, trackImplementors,this );
5455

5556
primeRegistries( registryPrimer );
5657
}
@@ -104,6 +105,10 @@ public <V> JandexValueExtractor<V> getJandexValueExtractor(ValueTypeDescriptor<V
104105

105106
@Override
106107
public StorableContext toStorableForm() {
107-
return new StorableContextImpl( classDetailsRegistry.classDetailsMap(), descriptorRegistry.descriptorMap() );
108+
return new StorableContextImpl(
109+
classDetailsRegistry.isTrackingImplementors(),
110+
classDetailsRegistry.classDetailsMap(),
111+
descriptorRegistry.descriptorMap()
112+
);
108113
}
109114
}

hibernate-models-jandex/src/main/java/org/hibernate/models/jandex/internal/JandexModelsContextProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.hibernate.models.internal.BasicModelsContextImpl;
1010
import org.hibernate.models.jandex.Settings;
1111
import org.hibernate.models.spi.ClassLoading;
12+
import org.hibernate.models.spi.ModelsConfiguration;
1213
import org.hibernate.models.spi.ModelsContext;
1314
import org.hibernate.models.spi.RegistryPrimer;
1415
import org.hibernate.models.spi.ModelsContextProvider;
@@ -29,12 +30,13 @@ public ModelsContext produceContext(
2930
RegistryPrimer registryPrimer,
3031
Map<Object, Object> configProperties) {
3132
final IndexView jandexIndex = resolveJandexIndex( configProperties );
33+
final boolean trackImplementors = ModelsConfiguration.shouldTrackImplementors( configProperties );
3234

3335
if ( jandexIndex != null ) {
34-
return new JandexModelsContextImpl( jandexIndex, classLoading, registryPrimer );
36+
return new JandexModelsContextImpl( jandexIndex, trackImplementors, classLoading, registryPrimer );
3537
}
3638

37-
return new BasicModelsContextImpl( classLoading, registryPrimer );
39+
return new BasicModelsContextImpl( classLoading, trackImplementors, registryPrimer );
3840

3941
}
4042

hibernate-models-jandex/src/test/java/org/hibernate/models/testing/shared/intg/JandexModelsContextFactoryImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public JandexModelsContextImpl createModelContext(
2929
RegistryPrimer registryPrimer,
3030
Class<?>... modelClasses) {
3131
final Index jandexIndex = buildJandexIndex( SIMPLE_CLASS_LOADING, modelClasses );
32-
return new JandexModelsContextImpl( jandexIndex, SIMPLE_CLASS_LOADING, registryPrimer );
32+
return new JandexModelsContextImpl( jandexIndex, true, SIMPLE_CLASS_LOADING, registryPrimer );
3333
}
3434

3535
public static Index buildJandexIndex(ClassLoading classLoadingAccess, Class<?>... modelClasses) {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright: Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.models;
6+
7+
import org.hibernate.models.spi.ClassDetailsRegistry;
8+
9+
/**
10+
* @author Steve Ebersole
11+
*/
12+
public interface Settings {
13+
/**
14+
* Controls whether to track {@linkplain ClassDetailsRegistry#getDirectImplementors implementors}.
15+
* This tracking has the potential to grow quite large, so this setting allows to
16+
* enable/disable it. By default, this is {@code false}.
17+
*/
18+
@Incubating
19+
String TRACK_IMPLEMENTORS = "hibernate.models.trackImplementors";
20+
}

0 commit comments

Comments
 (0)