package de.is24.deadcode4j.analyzer; import com.google.common.base.Optional; import de.is24.deadcode4j.AnalysisContext; import de.is24.deadcode4j.analyzer.webxml.BaseWebXmlAnalyzer; import de.is24.deadcode4j.analyzer.webxml.Param; import de.is24.deadcode4j.analyzer.webxml.WebXmlHandler; import javax.annotation.Nonnull; import java.util.List; import static de.is24.deadcode4j.analyzer.javassist.ClassPoolAccessor.classPoolAccessorFor; /** * Analyzes web.xml files: looks for context parameters or servlet init parameters * <ul> * <li>named <i>contextClass</i> referring to an instance of <tt><a href="http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/web/context/ConfigurableWebApplicationContext.html">ConfigurableWebApplicationContext</a></tt> or</li> * <li>named <i>contextInitializerClasses</i> referring to several instances of <tt><a href="http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/context/ApplicationContextInitializer.html">ApplicationContextInitializer</a></tt></li> * </ul>. * * @since 1.4 */ public final class SpringWebXmlAnalyzer extends BaseWebXmlAnalyzer { @Nonnull @Override protected WebXmlHandler createWebXmlHandlerFor(@Nonnull final AnalysisContext analysisContext) { return new WebXmlHandler() { @Override public void contextParam(Param param) { param(param); } @Override public void servlet(String className, List<Param> initParams) { for (Param initParam : initParams) { param(initParam); } } private void param(Param param) { if ("contextClass".equals(param.getName())) { analysisContext.addDependencies("_Spring-Context_", param.getValue()); } else if ("contextInitializerClasses".equals(param.getName())) { for (String initializerClass : param.getValue().split(",")) { initializerClass = initializerClass.trim(); if (!initializerClass.isEmpty()) { analysisContext.addDependencies("_Spring-ContextInitializer_", initializerClass); } } } else if ("contextConfigLocation".equals(param.getName())) { for (String configLocation : param.getValue().split(",")) { configLocation = configLocation.trim(); if (configLocation.isEmpty()) { continue; } Optional<String> referencedClass = classPoolAccessorFor(analysisContext).resolveClass(configLocation); if (referencedClass.isPresent()) { analysisContext.addDependencies("_Spring-ContextInitializer_", referencedClass.get()); } } } } }; } }