Skip to content

Commit c4c2638

Browse files
JoshIsOnItcsadilek
authored andcommitted
More codegen/rebind performance improvements
- Improved String building performance in AbstractMetaClass.hashString - Cached the super class in JavaReflectionClass - Optimized ClassScanner when processing reloadable classes
1 parent 4aeacee commit c4c2638

File tree

3 files changed

+35
-11
lines changed

3 files changed

+35
-11
lines changed

errai-codegen/src/main/java/org/jboss/errai/codegen/meta/impl/AbstractMetaClass.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -761,24 +761,30 @@ public int hashContent() {
761761
}
762762

763763
private String _hashString;
764+
static final private String MetaClassName = MetaClass.class.getName();
765+
764766
public String hashString() {
765767
if (_hashString == null) {
766-
_hashString = MetaClass.class.getName().concat(":").concat(getFullyQualifiedName());
768+
_hashString = MetaClassName + ":" + getFullyQualifiedName();
767769
if (getParameterizedType() != null) {
768770
_hashString += getParameterizedType().toString();
769771
}
770772
}
771773
return _hashString;
772774
}
773775

776+
private Integer _hashCode;
777+
774778
@Override
775779
public int hashCode() {
776-
return hashString().hashCode();
780+
if (_hashCode != null)
781+
return _hashCode;
782+
return _hashCode = hashString().hashCode();
777783
}
778784

779785
@Override
780786
public boolean equals(Object o) {
781-
return o instanceof AbstractMetaClass && hashString().equals(((AbstractMetaClass) o).hashString());
787+
return o instanceof AbstractMetaClass && hashString().equals(((AbstractMetaClass) o).hashString());
782788
}
783789

784790
@Override

errai-codegen/src/main/java/org/jboss/errai/codegen/meta/impl/java/JavaReflectionClass.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,14 +366,21 @@ public MetaClass[] getInterfaces() {
366366
return _interfacesCache = metaClassList.toArray(new MetaClass[metaClassList.size()]);
367367
}
368368

369+
private MetaClass _superClass;
370+
369371
@Override
370372
public MetaClass getSuperClass() {
373+
if (_superClass != null)
374+
return _superClass;
375+
371376
if (getGenericSuperClass() != null) {
372-
return parameterizedAs(getEnclosedMetaObject().getSuperclass(), typeParametersOf(getGenericSuperClass().getTypeParameters()));
377+
_superClass = parameterizedAs(getEnclosedMetaObject().getSuperclass(), typeParametersOf(getGenericSuperClass()
378+
.getTypeParameters()));
373379
}
374380
else {
375-
return newInstance(getEnclosedMetaObject().getSuperclass());
381+
_superClass = newInstance(getEnclosedMetaObject().getSuperclass());
376382
}
383+
return _superClass;
377384
}
378385

379386
@Override

errai-config/src/main/java/org/jboss/errai/config/util/ClassScanner.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.Set;
1313
import java.util.concurrent.ConcurrentHashMap;
1414
import java.util.concurrent.CopyOnWriteArrayList;
15+
import java.util.concurrent.CopyOnWriteArraySet;
1516
import java.util.concurrent.atomic.AtomicLong;
1617
import java.util.regex.Pattern;
1718

@@ -39,7 +40,7 @@ public static class CacheHolder implements CacheStore {
3940
final Map<MetaClass, Collection<MetaClass>> subtypesCache = new ConcurrentHashMap<MetaClass, Collection<MetaClass>>();
4041
final Collection<MetaClass> reloadableClasses = new CopyOnWriteArrayList<MetaClass>();
4142
final Collection<String> reloadableClassNames = new CopyOnWriteArrayList<String>();
42-
final Collection<String> reloadablePackages = new CopyOnWriteArrayList<String>();
43+
final Set<String> reloadablePackages = new CopyOnWriteArraySet<String>();
4344

4445
@Override
4546
public void clear() {
@@ -293,12 +294,22 @@ private static Collection<MetaClass> getAllReloadableCachedClasses(final Generat
293294

294295
final Collection<MetaClass> classes = new ArrayList<MetaClass>();
295296
final Collection<String> classNames = new ArrayList<String>();
297+
296298
for (MetaClass clazz : MetaClassFactory.getAllCachedClasses()) {
297-
for (String reloadablePackage : cache.reloadablePackages) {
298-
final String fqcn = clazz.getFullyQualifiedName();
299-
if (fqcn.startsWith(reloadablePackage)) {
300-
classes.add(clazz);
301-
classNames.add(fqcn);
299+
final String fqcn = clazz.getFullyQualifiedName();
300+
301+
if (cache.reloadablePackages.contains(clazz.getPackageName())) {
302+
classes.add(clazz);
303+
classNames.add(fqcn);
304+
}
305+
else {
306+
for (String reloadablePackage : cache.reloadablePackages) {
307+
if (fqcn.startsWith(reloadablePackage)) {
308+
classes.add(clazz);
309+
classNames.add(fqcn);
310+
cache.reloadablePackages.add(clazz.getPackageName());
311+
break;
312+
}
302313
}
303314
}
304315
}

0 commit comments

Comments
 (0)