
de.is24.deadcode4j.analyzer.ByteCodeAnalyzer Maven / Gradle / Ivy
package de.is24.deadcode4j.analyzer;
import de.is24.deadcode4j.Analyzer;
import de.is24.deadcode4j.CodeContext;
import javassist.ClassPool;
import javassist.CtClass;
import org.apache.commons.io.IOUtils;
import javax.annotation.Nonnull;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/**
* Serves as a base class with which to analyze byte code (classes).
*
* @since 1.3.0
*/
public abstract class ByteCodeAnalyzer implements Analyzer {
@Override
public final void doAnalysis(@Nonnull CodeContext codeContext, @Nonnull File file) {
if (file.getName().endsWith(".class")) {
analyzeClass(codeContext, file);
}
}
/**
* Perform an analysis for the specified class.
* Results must be reported via the capabilities of the {@link CodeContext}.
*
* @since 1.3.0
*/
protected abstract void analyzeClass(@Nonnull CodeContext codeContext, @Nonnull CtClass clazz);
private void analyzeClass(@Nonnull CodeContext codeContext, @Nonnull File clazz) {
final CtClass ctClass;
FileInputStream in = null;
try {
in = new FileInputStream(clazz);
ctClass = new ClassPool(false).makeClass(in);
} catch (IOException e) {
throw new RuntimeException("Could not analyze [" + clazz + "]!", e);
} finally {
IOUtils.closeQuietly(in);
}
analyzeClass(codeContext, ctClass);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy