77import  java .util .Objects ;
88import  java .util .concurrent .ConcurrentHashMap ;
99
10+ import  net .bytebuddy .description .type .TypeDescription ;
1011import  net .bytebuddy .dynamic .ClassFileLocator ;
1112import  net .bytebuddy .pool .TypePool ;
1213
1617 */ 
1718public  class  ModelTypePool  extends  TypePool .Default  implements  EnhancerClassLocator  {
1819
19- 	private  final  ConcurrentHashMap <String , Resolution > resolutions  = new  ConcurrentHashMap <>();
20- 	private  final  OverridingClassFileLocator  locator ;
21- 	private  final  SafeCacheProvider  poolCache ;
20+ 	private  final  EnhancerClassFileLocator  locator ;
21+ 	private  final  EnhancerCacheProvider  poolCache ;
2222
23- 	private  ModelTypePool (SafeCacheProvider  cacheProvider , OverridingClassFileLocator  classFileLocator , CoreTypePool  parent ) {
23+ 	private  ModelTypePool (EnhancerCacheProvider  cacheProvider , EnhancerClassFileLocator  classFileLocator , CoreTypePool  parent ) {
2424		super ( cacheProvider , classFileLocator , ReaderMode .FAST , parent  );
2525		this .poolCache  = cacheProvider ;
2626		this .locator  = classFileLocator ;
@@ -62,7 +62,7 @@ public static EnhancerClassLocator buildModelTypePool(ClassFileLocator classFile
6262	 * @return 
6363	 */ 
6464	public  static  EnhancerClassLocator  buildModelTypePool (ClassFileLocator  classFileLocator , CoreTypePool  coreTypePool ) {
65- 		return  buildModelTypePool ( classFileLocator , coreTypePool , new  SafeCacheProvider () );
65+ 		return  buildModelTypePool ( classFileLocator , coreTypePool , new  EnhancerCacheProvider () );
6666	}
6767
6868	/** 
@@ -72,39 +72,23 @@ public static EnhancerClassLocator buildModelTypePool(ClassFileLocator classFile
7272	 * @param cacheProvider 
7373	 * @return 
7474	 */ 
75- 	public   static  EnhancerClassLocator  buildModelTypePool (ClassFileLocator  classFileLocator , CoreTypePool  coreTypePool , SafeCacheProvider  cacheProvider ) {
75+ 	static  EnhancerClassLocator  buildModelTypePool (ClassFileLocator  classFileLocator , CoreTypePool  coreTypePool , EnhancerCacheProvider  cacheProvider ) {
7676		Objects .requireNonNull ( classFileLocator  );
7777		Objects .requireNonNull ( coreTypePool  );
7878		Objects .requireNonNull ( cacheProvider  );
79- 		return  new  ModelTypePool ( cacheProvider , new  OverridingClassFileLocator ( classFileLocator  ), coreTypePool  );
80- 	}
81- 
82- 	@ Override 
83- 	protected  Resolution  doDescribe (final  String  name ) {
84- 		final  Resolution  resolution  = resolutions .get ( name  );
85- 		if  ( resolution  != null  ) {
86- 			return  resolution ;
87- 		}
88- 		else  {
89- 			return  resolutions .computeIfAbsent ( name , super ::doDescribe  );
90- 		}
79+ 		return  new  ModelTypePool ( cacheProvider , new  EnhancerClassFileLocator ( classFileLocator  ), coreTypePool  );
9180	}
9281
9382	@ Override 
9483	public  void  registerClassNameAndBytes (final  String  className , final  byte [] bytes ) {
95- 		//Very important: ensure the registered override is actually effective in case this class 
96- 		//was already resolved in the recent past; this could have happened for example as a side effect 
97- 		//of symbol resolution during enhancement of a different class, or very simply when attempting 
98- 		//to re-enhanced the same class - which happens frequently in WildFly because of the class transformers 
99- 		//being triggered concurrently by multiple parallel deployments. 
100- 		resolutions .remove ( className  );
101- 		poolCache .remove ( className  );
102- 		locator .put ( className , new  ClassFileLocator .Resolution .Explicit ( Objects .requireNonNull ( bytes  ) ) );
84+ 		locator .registerEnhancedType ( className , new  ClassFileLocator .Resolution .Explicit ( Objects .requireNonNull ( bytes  ) ) );
85+ 		poolCache .registerEnhancedType ( className , doDescribe ( className  ) );
10386	}
10487
10588	@ Override 
10689	public  void  deregisterClassNameAndBytes (final  String  className ) {
107- 		locator .remove ( className  );
90+ 		poolCache .deregisterEnhancedType ( className  );
91+ 		locator .deregisterEnhancedType ( className  );
10892	}
10993
11094	@ Override 
0 commit comments