1 7 34 35 package com.sun.tools.example.debug.tty; 36 37 import com.sun.jdi.*; 38 import com.sun.jdi.request.ClassPrepareRequest; 39 import java.util.StringTokenizer ; 40 41 42 class PatternReferenceTypeSpec implements ReferenceTypeSpec { 43 final String classId; 44 String stem; 45 46 PatternReferenceTypeSpec(String classId) throws ClassNotFoundException { 47 this.classId = classId; 48 stem = classId; 49 if (classId.startsWith("*")) { 50 stem = stem.substring(1); 51 } else if (classId.endsWith("*")) { 52 stem = stem.substring(0, classId.length() - 1); 53 } 54 checkClassName(stem); 55 } 56 57 60 public boolean isUnique() { 61 return classId.equals(stem); 62 } 63 64 67 public boolean matches(ReferenceType refType) { 68 if (classId.startsWith("*")) { 69 return refType.name().endsWith(stem); 70 } else if (classId.endsWith("*")) { 71 return refType.name().startsWith(stem); 72 } else { 73 return refType.name().equals(classId); 74 } 75 } 76 77 public ClassPrepareRequest createPrepareRequest() { 78 ClassPrepareRequest request = 79 Env.vm().eventRequestManager().createClassPrepareRequest(); 80 request.addClassFilter(classId); 81 request.addCountFilter(1); 82 return request; 83 } 84 85 public int hashCode() { 86 return classId.hashCode(); 87 } 88 89 public boolean equals(Object obj) { 90 if (obj instanceof PatternReferenceTypeSpec) { 91 PatternReferenceTypeSpec spec = (PatternReferenceTypeSpec)obj; 92 93 return classId.equals(spec.classId); 94 } else { 95 return false; 96 } 97 } 98 99 private void checkClassName(String className) throws ClassNotFoundException { 100 StringTokenizer tokenizer = new StringTokenizer (className, "."); 105 while (tokenizer.hasMoreTokens()) { 106 String token = tokenizer.nextToken(); 107 if (!isJavaIdentifier(token)) { 112 throw new ClassNotFoundException (); 113 } 114 } 115 } 116 117 private boolean isJavaIdentifier(String s) { 118 if (s.length() == 0) { 119 return false; 120 } 121 122 int cp = s.codePointAt(0); 123 if (! Character.isJavaIdentifierStart(cp)) { 124 return false; 125 } 126 127 for (int i = Character.charCount(cp); i < s.length(); i += Character.charCount(cp)) { 128 cp = s.codePointAt(i); 129 if (! Character.isJavaIdentifierPart(cp)) { 130 return false; 131 } 132 } 133 134 return true; 135 } 136 137 public String toString() { 138 return classId; 139 } 140 } 141 142 143 | Popular Tags |