2323import java .lang .reflect .Field ;
2424import java .util .Map ;
2525import java .util .Optional ;
26+ import java .util .concurrent .atomic .AtomicBoolean ;
2627
2728/**
2829 * @author huazhongming
2930 * @since 4.4.0
3031 */
3132public class ModuleUtil {
3233
33- private static final Logger LOGGER = SofaBootLoggerFactory
34- .getLogger (ModuleUtil .class );
34+ private static final Logger LOGGER = SofaBootLoggerFactory
35+ .getLogger (ModuleUtil .class );
3536
3637 private static final MethodHandle implAddOpensToAllUnnamed ;
38+
3739 private static final MethodHandle implAddOpens ;
40+
3841 private static final MethodHandle implAddExportsToAllUnnamed ;
42+
3943 private static final MethodHandle implAddExports ;
44+
4045 private static final Map <String , Module > nameToModules ;
4146
47+ private static final AtomicBoolean isExported = new AtomicBoolean (false );
48+
4249 static {
4350 implAddOpensToAllUnnamed = createModuleMethodHandle ("implAddOpensToAllUnnamed" ,
4451 String .class );
@@ -54,7 +61,7 @@ public class ModuleUtil {
5461 */
5562 public static void exportAllJDKModulePackageToAll () {
5663 try {
57- if (nameToModules != null ) {
64+ if (isExported . compareAndSet ( false , true ) && nameToModules != null ) {
5865 nameToModules .forEach ((name , module ) -> module .getPackages ().forEach (pkgName -> {
5966 if (isJDKModulePackage (pkgName )) {
6067 addOpensToAll (module , pkgName );
@@ -76,8 +83,7 @@ private static boolean isJDKModulePackage(String modulePackageName) {
7683 */
7784 public static void exportAllModulePackageToAll () {
7885 try {
79- Map <String , Module > nameToModules = getNameToModule ();
80- if (nameToModules != null ) {
86+ if (isExported .compareAndSet (false ,true ) && nameToModules != null ) {
8187 nameToModules .forEach ((name , module ) -> module .getPackages ().forEach (pkgName -> {
8288 addOpensToAll (module , pkgName );
8389 addExportsToAll (module , pkgName );
@@ -244,5 +250,4 @@ private static Object getModuleLayerFieldsValue(String fieldName) {
244250 public static Map <String , Module > getNameToModule () {
245251 return (Map <String , Module >) getModuleLayerFieldsValue ("nameToModule" );
246252 }
247-
248253}
0 commit comments