< prev index next >
src/jdk.jdi/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java
Print this page
@@ -324,19 +324,45 @@
list = retrieveClassesBySignature(signature);
}
return Collections.unmodifiableList(list);
}
+ private static boolean isReferenceArray(String signature) {
+ int i = signature.lastIndexOf('[');
+ if (i > -1 && signature.charAt(i+1) == 'L') {
+ return true;
+ }
+ return false;
+ }
+
public List<ReferenceType> classesByName(String className) {
validateVM();
String signature = JNITypeParser.typeNameToSignature(className);
List<ReferenceType> list;
if (retrievedAllTypes) {
list = findReferenceTypes(signature);
} else {
list = retrieveClassesBySignature(signature);
}
+ // HACK: add second request to cover the case where className
+ // is the name of an inline type. This is done only if the
+ // first signature is either a reference type or an array
+ // of a reference type.
+ if (signature.length() > 1 &&
+ (signature.charAt(0) == 'L' || isReferenceArray((signature)))) {
+ List<ReferenceType> listInlineTypes;
+ signature = JNITypeParser.inlineTypeNameToSignature(className);
+ if (retrievedAllTypes) {
+ listInlineTypes = findReferenceTypes(signature);
+ } else {
+ listInlineTypes = retrieveClassesBySignature(signature);
+ }
+ if (!listInlineTypes.isEmpty()) {
+ list.addAll(listInlineTypes);
+ }
+ }
+
return Collections.unmodifiableList(list);
}
public List<ReferenceType> allClasses() {
validateVM();
< prev index next >