Cope with null slashedname when processing exclude patterns

Issue: #122
This commit is contained in:
Andy Clement
2015-06-26 13:34:55 -07:00
parent 8381a562da
commit 7c57f7073f

View File

@@ -102,8 +102,8 @@ public class TypeRegistry {
// required), the targets for some calls may come and go (may not have been in the original loaded version)
"org.apache.jasper.servlet.JasperLoader",
// tc server configuration...
// "org.apache.catalina.loader.StandardClassLoader"
// tc server configuration...
// "org.apache.catalina.loader.StandardClassLoader"
};
// @formatter:on
@@ -132,8 +132,8 @@ public class TypeRegistry {
* created before a ReloadableType object is created - and in that window TypeRegistries would be GCd if the
* reference here was weak.
*/
private static Map<ClassLoader, TypeRegistry> loaderToRegistryMap = Collections
.synchronizedMap(new WeakHashMap<ClassLoader, TypeRegistry>());
private static Map<ClassLoader, TypeRegistry> loaderToRegistryMap = Collections.synchronizedMap(
new WeakHashMap<ClassLoader, TypeRegistry>());
private static String[] excludedLoaders = STANDARD_EXCLUDED_LOADERS;
@@ -819,16 +819,18 @@ public class TypeRegistry {
}
}
else {
boolean isExcluded = false;
String matchName = slashedName.replace('/', '.');
for (TypePattern typepattern : exclusionPatterns) {
if (typepattern.matches(matchName)) {
isExcluded = true;
break;
if (slashedName != null) {
boolean isExcluded = false;
String matchName = slashedName.replace('/', '.');
for (TypePattern typepattern : exclusionPatterns) {
if (typepattern.matches(matchName)) {
isExcluded = true;
break;
}
}
if (isExcluded) {
return false;
}
}
if (isExcluded) {
return false;
}
if (couldBeReloadable(slashedName)) {
return true;
@@ -1275,8 +1277,8 @@ public class TypeRegistry {
}
if (reloadableType != null && reloadableType.hasBeenReloaded()) {
MethodMember method = reloadableType.getLiveVersion().incrementalTypeDescriptor
.getFromLatestByDescriptor(nameAndDescriptor);
MethodMember method = reloadableType.getLiveVersion().incrementalTypeDescriptor.getFromLatestByDescriptor(
nameAndDescriptor);
boolean dispatchThroughDescriptor = false;
if (method == null) {
// method has been deleted or is on a supertype. Look for it:
@@ -1301,7 +1303,8 @@ public class TypeRegistry {
}
}
else if (nextInHierarchy.hasBeenReloaded()) {
method = nextInHierarchy.getLiveVersion().incrementalTypeDescriptor.getFromLatestByDescriptor(nameAndDescriptor);
method = nextInHierarchy.getLiveVersion().incrementalTypeDescriptor.getFromLatestByDescriptor(
nameAndDescriptor);
if (method != null && IncrementalTypeDescriptor.wasDeleted(method)) {
method = null;
}
@@ -1454,7 +1457,8 @@ public class TypeRegistry {
// return false;
// }
// Search for the dispatcher we can call
__DynamicallyDispatchable o = (__DynamicallyDispatchable) invokespecialSearch(reloadableType, nameAndDescriptor);
__DynamicallyDispatchable o = (__DynamicallyDispatchable) invokespecialSearch(reloadableType,
nameAndDescriptor);
return o;
}
@@ -1519,8 +1523,8 @@ public class TypeRegistry {
return false;
}
if (reloadableType != null && reloadableType.hasBeenReloaded()) {
MethodMember method = reloadableType.getLiveVersion().incrementalTypeDescriptor
.getFromLatestByDescriptor(nameAndDescriptor);
MethodMember method = reloadableType.getLiveVersion().incrementalTypeDescriptor.getFromLatestByDescriptor(
nameAndDescriptor);
boolean dispatchThroughDescriptor = false;
if (method == null) {
// method does not exist
@@ -1739,8 +1743,8 @@ public class TypeRegistry {
}
if (reloadableType != null && reloadableType.hasBeenReloaded()) {
MethodMember method = reloadableType.getLiveVersion().incrementalTypeDescriptor
.getFromLatestByDescriptor(nameAndDescriptor);
MethodMember method = reloadableType.getLiveVersion().incrementalTypeDescriptor.getFromLatestByDescriptor(
nameAndDescriptor);
boolean dispatchThroughDescriptor = false;
if (method == null) {
if (!reloadableType.getTypeDescriptor().isFinalInHierarchy(nameAndDescriptor)) {