/*******************************************************************************
* Copyright (c) 2007 Spring IDE Developers
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.core.type.asm;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.asm.ClassReader;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.util.ClassUtils;
/**
* Simple implementation of the {@link ClassReaderFactory} interface, creating a
* new ClassReader for every request.
* @author Christian Dupuis
* @author Juergen Hoeller
* @since 2.0.2
*/
public class SimpleClassReaderFactory implements ClassReaderFactory {
private final ResourceLoader resourceLoader;
/**
* Create a new SimpleClassReaderFactory for the default class loader.
*/
public SimpleClassReaderFactory() {
this.resourceLoader = new DefaultResourceLoader();
}
/**
* Create a new SimpleClassReaderFactory for the given resource loader.
* @param resourceLoader the Spring ResourceLoader to use (also determines
* the ClassLoader to use)
*/
public SimpleClassReaderFactory(ResourceLoader resourceLoader) {
this.resourceLoader = (resourceLoader != null ? resourceLoader
: new DefaultResourceLoader());
}
/**
* Create a new SimpleClassReaderFactory for the given class loader.
* @param classLoader the ClassLoader to use
*/
public SimpleClassReaderFactory(ClassLoader classLoader) {
this.resourceLoader = (classLoader != null ? new DefaultResourceLoader(
classLoader) : new DefaultResourceLoader());
}
public ClassReader getClassReader(String className) throws IOException {
String resourcePath = ResourceLoader.CLASSPATH_URL_PREFIX
+ ClassUtils.convertClassNameToResourcePath(className)
+ ClassUtils.CLASS_FILE_SUFFIX;
return getClassReader(this.resourceLoader.getResource(resourcePath));
}
public ClassReader getClassReader(Resource resource) throws IOException {
InputStream is = resource.getInputStream();
try {
return new ClassReader(is);
}
finally {
is.close();
}
}
}