in compilers/eclipse/src/main/java/org/apache/commons/jci2/compiler/eclipse/EclipseJavaCompiler.java [248:309]
private NameEnvironmentAnswer findType( final String className ) {
if (isPackage(className)) {
return null;
}
log.debug("finding " + className);
final String resourceName = ConversionUtils.convertClassToResourcePath(className);
final byte[] clazzBytes = resourceStore.read(resourceName);
if (clazzBytes != null) {
log.debug("loading from store " + className);
final char[] fileName = className.toCharArray();
try {
final ClassFileReader classFileReader = new ClassFileReader(clazzBytes, fileName, true);
return new NameEnvironmentAnswer(classFileReader, null);
} catch (final ClassFormatException e) {
log.error("wrong class format", e);
return null;
}
}
log.debug("not in store " + className);
final InputStream is = classLoader.getResourceAsStream(resourceName);
if (is == null) {
log.debug("class " + className + " not found");
return null;
}
final byte[] buffer = new byte[8192];
final ByteArrayOutputStream baos = new ByteArrayOutputStream(buffer.length);
int count;
try {
while ((count = is.read(buffer, 0, buffer.length)) > 0) {
baos.write(buffer, 0, count);
}
baos.flush();
final char[] fileName = className.toCharArray();
final ClassFileReader classFileReader = new ClassFileReader(baos.toByteArray(), fileName, true);
return new NameEnvironmentAnswer(classFileReader, null);
} catch (final IOException e) {
log.error("could not read class", e);
return null;
} catch (final ClassFormatException e) {
log.error("wrong class format", e);
return null;
} finally {
try {
baos.close();
} catch (final IOException oe) {
log.error("could not close output stream", oe);
}
try {
is.close();
} catch (final IOException ie) {
log.error("could not close input stream", ie);
}
}
}