* Implement negative result caching in getPrototypeName(Object).
This commit is contained in:
parent
2b7e92d9f6
commit
4494d0bff5
1 changed files with 34 additions and 33 deletions
|
@ -168,9 +168,11 @@ public final class Application implements Runnable {
|
|||
Hashtable customCronJobs = null;
|
||||
|
||||
private ResourceComparator resourceComparator;
|
||||
|
||||
private Resource currentCodeResource;
|
||||
|
||||
// Field to cache unmapped java classes
|
||||
private final static String CLASS_NOT_MAPPED = "(unmapped)";
|
||||
|
||||
/**
|
||||
* Simple constructor for dead application instances.
|
||||
*/
|
||||
|
@ -1315,41 +1317,40 @@ public final class Application implements Runnable {
|
|||
public String getPrototypeName(Object obj) {
|
||||
if (obj == null) {
|
||||
return "global";
|
||||
} else if (obj instanceof IPathElement) {
|
||||
// check if e implements the IPathElement interface
|
||||
return ((IPathElement) obj).getPrototype();
|
||||
}
|
||||
|
||||
// check if e implements the IPathElement interface
|
||||
if (obj instanceof IPathElement) {
|
||||
// e implements the getPrototype() method
|
||||
return ((IPathElement) obj).getPrototype();
|
||||
} else {
|
||||
// look up prototype name by java class name
|
||||
Class clazz = obj.getClass();
|
||||
String protoname = classMapping.getProperty(clazz.getName());
|
||||
if (protoname != null) {
|
||||
return protoname;
|
||||
}
|
||||
// walk down superclass path
|
||||
while ((clazz = clazz.getSuperclass()) != null) {
|
||||
protoname = classMapping.getProperty(clazz.getName());
|
||||
if (protoname != null) {
|
||||
// cache the class name for the object so we run faster next time
|
||||
classMapping.setProperty(obj.getClass().getName(), protoname);
|
||||
return protoname;
|
||||
}
|
||||
}
|
||||
// check interfaces, too
|
||||
Class[] classes = obj.getClass().getInterfaces();
|
||||
for (int i = 0; i < classes.length; i++) {
|
||||
protoname = classMapping.getProperty(classes[i].getName());
|
||||
if (protoname != null) {
|
||||
// cache the class name for the object so we run faster next time
|
||||
classMapping.setProperty(obj.getClass().getName(), protoname);
|
||||
return protoname;
|
||||
}
|
||||
}
|
||||
// nada
|
||||
return null;
|
||||
Class clazz = obj.getClass();
|
||||
String className = clazz.getName();
|
||||
String protoName = classMapping.getProperty(className);
|
||||
if (protoName != null) {
|
||||
return protoName == CLASS_NOT_MAPPED ? null : protoName;
|
||||
}
|
||||
|
||||
// walk down superclass path
|
||||
while ((clazz = clazz.getSuperclass()) != null) {
|
||||
protoName = classMapping.getProperty(clazz.getName());
|
||||
if (protoName != null) {
|
||||
// cache the class name for the object so we run faster next time
|
||||
classMapping.setProperty(className, protoName);
|
||||
return protoName;
|
||||
}
|
||||
}
|
||||
// check interfaces, too
|
||||
Class[] classes = obj.getClass().getInterfaces();
|
||||
for (int i = 0; i < classes.length; i++) {
|
||||
protoName = classMapping.getProperty(classes[i].getName());
|
||||
if (protoName != null) {
|
||||
// cache the class name for the object so we run faster next time
|
||||
classMapping.setProperty(className, protoName);
|
||||
return protoName;
|
||||
}
|
||||
}
|
||||
// not mapped - cache negative result
|
||||
classMapping.setProperty(className, CLASS_NOT_MAPPED);
|
||||
return null;
|
||||
}
|
||||
|
||||
public DocApplication getDoc() {
|
||||
|
|
Loading…
Add table
Reference in a new issue