package de.is24.deadcode4j.analyzer;
import de.is24.deadcode4j.AnalysisContext;
import org.apache.commons.io.IOUtils;
import javax.annotation.Nonnull;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import static com.google.common.collect.Iterables.filter;
/**
* Analyzes <a href="http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/extensible-xml.html">
* <code>spring.handlers</code> property files</a> and lists the defined <i>namespace handlers</i> as classes being
* referenced.
*/
public class SpringNamespaceHandlerAnalyzer extends AnalyzerAdapter {
@Override
public void doAnalysis(@Nonnull AnalysisContext analysisContext, @Nonnull File file) {
if (file.getAbsolutePath().endsWith("META-INF/spring.handlers")) {
logger.debug("Analyzing property file [{}]...", file);
registerSpringHandlersDefinedIn(analysisContext, file);
}
}
private void registerSpringHandlersDefinedIn(AnalysisContext analysisContext, File file) {
Properties springNamespaceHandlers = readPropertyFile(file);
analysisContext.addDependencies("_Spring-NamespaceHandler_", filter(springNamespaceHandlers.values(), String.class));
}
private Properties readPropertyFile(File file) {
Properties properties = new Properties();
FileInputStream in = null;
try {
in = new FileInputStream(file);
properties.load(in);
} catch (IOException e) {
throw new RuntimeException("Failed to read [" + file + "]!", e);
} finally {
IOUtils.closeQuietly(in);
}
return properties;
}
}