static ReferenceType getReferenceTypeFromToken(String idToken) { ReferenceType cls = null; if (Character.isDigit(idToken.charAt(0))) { cls = null; } else if (idToken.startsWith("*.")) { // This notation saves typing by letting the user omit leading // package names. The first // loaded class whose name matches this limited regular // expression is selected. idToken = idToken.substring(1); List classes = Env.vm().allClasses(); Iterator iter = classes.iterator(); while (iter.hasNext()) { ReferenceType type = ((ReferenceType) iter.next()); if (type.name().endsWith(idToken)) { cls = type; break; } } } else { // It's a class name List classes = Env.vm().classesByName(idToken); if (classes.size() > 0) { // TO DO: handle multiples cls = (ReferenceType) classes.get(0); } } return cls; }
static synchronized String sourceLine(Location location, int lineNumber) throws IOException { if (lineNumber == -1) { throw new IllegalArgumentException(); } try { String fileName = location.sourceName(); Iterator iter = sourceCache.iterator(); SourceCode code = null; while (iter.hasNext()) { SourceCode candidate = (SourceCode) iter.next(); if (candidate.fileName().equals(fileName)) { code = candidate; iter.remove(); break; } } if (code == null) { BufferedReader reader = sourceReader(location); if (reader == null) { throw new FileNotFoundException(fileName); } code = new SourceCode(fileName, reader); if (sourceCache.size() == SOURCE_CACHE_SIZE) { sourceCache.remove(sourceCache.size() - 1); } } sourceCache.add(0, code); return code.sourceLine(lineNumber); } catch (AbsentInformationException e) { throw new IllegalArgumentException(); } }