@@ -82,7 +82,8 @@ public void setIsAnnotation(boolean isAnnotation) {
8282 private boolean isUnitTest ;
8383
8484
85- private static Set <String > arrayTypes = Collections .synchronizedSet (new TreeSet <String >());
85+ private static Set <String > arrayTypes = new TreeSet <String >();
86+ private static ReadWriteLock arrayTypesLock = new ReentrantReadWriteLock ();
8687
8788 private ByteCodeClass baseClassObject ;
8889 private List <ByteCodeClass > baseInterfacesObject ;
@@ -94,9 +95,11 @@ public void setIsAnnotation(boolean isAnnotation) {
9495
9596 private boolean marked ;
9697 private static volatile ByteCodeClass mainClass ;
98+ private static ReentrantLock mainClassLock = new ReentrantLock ();
9799 private boolean finalClass ;
98100 private boolean isEnum ;
99- private static Set <String > writableFields = Collections .synchronizedSet (new HashSet <String >());
101+ private static Set <String > writableFields = new HashSet <String >();
102+ private static ReadWriteLock writableFieldsLock = new ReentrantReadWriteLock ();
100103
101104 /**
102105 *
@@ -155,12 +158,15 @@ static void setSaveUnitTests(boolean save) {
155158
156159 public void addMethod (BytecodeMethod m ) {
157160 if (m .isMain ()) {
158- synchronized (ByteCodeClass .class ) {
161+ mainClassLock .lock ();
162+ try {
159163 if (mainClass == null ) {
160164 mainClass = this ;
161165 } else {
162166 throw new RuntimeException ("Multiple main classes: " +mainClass .clsName +" and " +this .clsName );
163167 }
168+ } finally {
169+ mainClassLock .unlock ();
164170 }
165171 }
166172 m .setSourceFile (sourceFile );
@@ -1058,29 +1064,29 @@ public String generateCCode(List<ByteCodeClass> allClasses) {
10581064 b .append (clsName );
10591065 b .append (");\n return;\n }\n \n " );
10601066
1061- boolean c1 = false ;
1062- boolean c2 = false ;
1063- boolean c3 = false ;
1067+ boolean arrayTypeC1 = false ;
1068+ boolean arrayTypeC2 = false ;
1069+ boolean arrayTypeC3 = false ;
10641070 arrayTypesLock .readLock ().lock ();
10651071 try {
1066- c1 = arrayTypes .contains ("1_" + clsName ) || arrayTypes .contains ("2_" + clsName ) || arrayTypes .contains ("3_" + clsName );
1067- c2 = arrayTypes .contains ("2_" + clsName ) || arrayTypes .contains ("3_" + clsName );
1068- c3 = arrayTypes .contains ("3_" + clsName );
1072+ arrayTypeC1 = arrayTypes .contains ("1_" + clsName ) || arrayTypes .contains ("2_" + clsName ) || arrayTypes .contains ("3_" + clsName );
1073+ arrayTypeC2 = arrayTypes .contains ("2_" + clsName ) || arrayTypes .contains ("3_" + clsName );
1074+ arrayTypeC3 = arrayTypes .contains ("3_" + clsName );
10691075 } finally {
10701076 arrayTypesLock .readLock ().unlock ();
10711077 }
1072- if (c1 ) {
1078+ if (arrayTypeC1 ) {
10731079 b .append ("class_array1__" );
10741080 b .append (clsName );
10751081 b .append (".vtable = initVtableForInterface();\n " );
10761082 }
10771083
1078- if (c2 ) {
1084+ if (arrayTypeC2 ) {
10791085 b .append ("class_array2__" );
10801086 b .append (clsName );
10811087 b .append (".vtable = initVtableForInterface();\n " );
10821088 }
1083- if (c3 ) {
1089+ if (arrayTypeC3 ) {
10841090 b .append ("class_array3__" );
10851091 b .append (clsName );
10861092 b .append (".vtable = initVtableForInterface();\n " );
@@ -1294,30 +1300,30 @@ public String generateCHeader() {
12941300 b .append (clsName );
12951301 b .append (";\n " );
12961302
1297- boolean _c1 = false ;
1298- boolean _c2 = false ;
1299- boolean _c3 = false ;
1303+ boolean arrayTypeC1 = false ;
1304+ boolean arrayTypeC2 = false ;
1305+ boolean arrayTypeC3 = false ;
13001306 arrayTypesLock .readLock ().lock ();
13011307 try {
1302- _c1 = arrayTypes .contains ("1_" + clsName ) || arrayTypes .contains ("2_" + clsName ) || arrayTypes .contains ("3_" + clsName );
1303- _c2 = arrayTypes .contains ("2_" + clsName ) || arrayTypes .contains ("3_" + clsName );
1304- _c3 = arrayTypes .contains ("3_" + clsName );
1308+ arrayTypeC1 = arrayTypes .contains ("1_" + clsName ) || arrayTypes .contains ("2_" + clsName ) || arrayTypes .contains ("3_" + clsName );
1309+ arrayTypeC2 = arrayTypes .contains ("2_" + clsName ) || arrayTypes .contains ("3_" + clsName );
1310+ arrayTypeC3 = arrayTypes .contains ("3_" + clsName );
13051311 } finally {
13061312 arrayTypesLock .readLock ().unlock ();
13071313 }
1308- if (_c1 ) {
1314+ if (arrayTypeC1 ) {
13091315 b .append ("extern struct clazz class_array1__" );
13101316 b .append (clsName );
13111317 b .append (";\n " );
13121318 }
13131319
1314- if (_c2 ) {
1320+ if (arrayTypeC2 ) {
13151321 b .append ("extern struct clazz class_array2__" );
13161322 b .append (clsName );
13171323 b .append (";\n " );
13181324 }
13191325
1320- if (_c3 ) {
1326+ if (arrayTypeC3 ) {
13211327 b .append ("extern struct clazz class_array3__" );
13221328 b .append (clsName );
13231329 b .append (";\n " );
@@ -1357,14 +1363,14 @@ public String generateCHeader() {
13571363 b .append ("extern JAVA_OBJECT __VALUE_OF_" ).append (clsName ).append ("(CODENAME_ONE_THREAD_STATE, JAVA_OBJECT value);\n " );
13581364 }
13591365
1360- boolean _c1_arr = false ;
1366+ boolean arrayTypeC1_arr = false ;
13611367 arrayTypesLock .readLock ().lock ();
13621368 try {
1363- _c1_arr = arrayTypes .contains ("1_" + clsName );
1369+ arrayTypeC1_arr = arrayTypes .contains ("1_" + clsName );
13641370 } finally {
13651371 arrayTypesLock .readLock ().unlock ();
13661372 }
1367- if (_c1_arr ) {
1373+ if (arrayTypeC1_arr ) {
13681374 b .append ("extern JAVA_OBJECT __NEW_ARRAY_" );
13691375 b .append (clsName );
13701376 b .append ("(CODENAME_ONE_THREAD_STATE, JAVA_INT size);\n " );
0 commit comments