Skip to content

Commit

Permalink
HHH-16952 Discover embeddable types through @Embedded annotation for …
Browse files Browse the repository at this point in the history
…enhancement in a pre-discovery phase
  • Loading branch information
beikov committed Aug 28, 2023
1 parent 13bc7ff commit ea9a915
Show file tree
Hide file tree
Showing 8 changed files with 25 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -341,17 +341,15 @@ private EntityManagerFactoryBuilderImpl(
);

persistenceUnit.pushClassTransformer( enhancementContext );

if ( !persistenceUnit.getClassTransformers().isEmpty() ) {
final ClassTransformer classTransformer = persistenceUnit.getClassTransformer();
if ( classTransformer != null ) {
final ClassLoader classLoader = persistenceUnit.getTempClassLoader();
if ( classLoader == null ) {
throw persistenceException( "Enhancement requires a temp class loader, but none was given." );
}
for ( ClassTransformer classTransformer : persistenceUnit.getClassTransformers() ) {
for ( PersistentClass entityBinding : metadata.getEntityBindings() ) {
if ( entityBinding.getClassName() != null ) {
classTransformer.discoverTypes( classLoader, entityBinding.getClassName() );
}
for ( PersistentClass entityBinding : metadata.getEntityBindings() ) {
if ( entityBinding.getClassName() != null ) {
classTransformer.discoverTypes( classLoader, entityBinding.getClassName() );
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ public void pushClassTransformer(EnhancementContext enhancementContext) {
}

@Override
public Collection<ClassTransformer> getClassTransformers() {
return Collections.emptyList();
public ClassTransformer getClassTransformer() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import java.util.Collection;
import java.util.List;
import java.util.Properties;

import jakarta.persistence.PersistenceException;
import jakarta.persistence.SharedCacheMode;
import jakarta.persistence.ValidationMode;
import jakarta.persistence.spi.PersistenceUnitInfo;
Expand All @@ -26,7 +28,7 @@
*/
public class PersistenceUnitInfoDescriptor implements PersistenceUnitDescriptor {
private final PersistenceUnitInfo persistenceUnitInfo;
private final ArrayList<ClassTransformer> classTransformers = new ArrayList<>();
private ClassTransformer classTransformer;

public PersistenceUnitInfoDescriptor(PersistenceUnitInfo persistenceUnitInfo) {
this.persistenceUnitInfo = persistenceUnitInfo;
Expand Down Expand Up @@ -114,16 +116,19 @@ public List<URL> getJarFileUrls() {

@Override
public void pushClassTransformer(EnhancementContext enhancementContext) {
if ( this.classTransformer != null ) {
throw new PersistenceException( "Persistence unit [" + persistenceUnitInfo.getPersistenceUnitName() + "] can only have a single class transformer." );
}
// During testing, we will return a null temp class loader in cases where we don't care about enhancement
if ( persistenceUnitInfo.getNewTempClassLoader() != null ) {
final EnhancingClassTransformerImpl classTransformer = new EnhancingClassTransformerImpl( enhancementContext );
classTransformers.add( classTransformer );
this.classTransformer = classTransformer;
persistenceUnitInfo.addTransformer( classTransformer );
}
}

@Override
public Collection<ClassTransformer> getClassTransformers() {
return classTransformers;
public ClassTransformer getClassTransformer() {
return classTransformer;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,5 +88,5 @@ public interface PersistenceUnitDescriptor {

void pushClassTransformer(EnhancementContext enhancementContext);

Collection<ClassTransformer> getClassTransformers();
ClassTransformer getClassTransformer();
}
Original file line number Diff line number Diff line change
Expand Up @@ -253,8 +253,8 @@ public void pushClassTransformer(EnhancementContext enhancementContext) {
}

@Override
public Collection<ClassTransformer> getClassTransformers() {
return Collections.emptyList();
public ClassTransformer getClassTransformer() {
return null;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,8 @@ public void pushClassTransformer(EnhancementContext enhancementContext) {
}

@Override
public Collection<ClassTransformer> getClassTransformers() {
return Collections.emptyList();
public ClassTransformer getClassTransformer() {
return null;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public void pushClassTransformer(EnhancementContext enhancementContext) {
}

@Override
public Collection<ClassTransformer> getClassTransformers() {
return Collections.emptyList();
public ClassTransformer getClassTransformer() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,8 @@ public void pushClassTransformer(EnhancementContext enhancementContext) {
}

@Override
public Collection<ClassTransformer> getClassTransformers() {
return Collections.emptyList();
public ClassTransformer getClassTransformer() {
return null;
}
}

Expand Down

0 comments on commit ea9a915

Please sign in to comment.