This repository was archived by the owner on Mar 11, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
deadcode4j v2.0.0: Features
Sebastian Kirsch edited this page Jun 26, 2014
·
4 revisions
deadcode4j takes several approaches to analyze if a class is still in use or not:
- statical code analysis using Javassist, recognizing class dependencies1
- statical java source file analysis using Java 1.7 parser to counteract type erasure and constants inlining
- parsing Spring XML files: files ending with
.xmlare examined- each
beanelement'sclassattribute is treated as live code -
CXF endpoint definitions: each
endpointelement'simplementor/implementorClassattribute is treated as live code -
Quartz job definitions: each
propertyelement'sclassattribute is treated as live code if it has annameattribute ofjobClass -
Spring View resolvers: each
propertyelement'sclassattribute is treated as live code if it has annameattribute ofviewClass - recognizes Spring XML NamespaceHandlers as live code
- each
- recognizing classes annotated with those Spring annotations as live code:
org.springframework.jmx.export.annotation.ManagedResource-
org.springframework.stereotype.Componentannotations are examined recursively, thus other annotations like e.g.@Controlleralso mark classes as live code
- recognizing Spring Data custom repositories: custom implementations are treated as live code
- recognizes only custom implementations following the default naming convention
RepositoryNameImpl
- recognizes only custom implementations following the default naming convention
- parsing
web.xml- recognizing listed listeners, filters & servlets (according to the XSD files)
- look for the parameters defined by Spring's ContextLoader and FrameworkServlet:
contextClass,contextConfigLocation&contextInitializerClasses, treating the configured classes as live code - if the
metadata-completeattribute isn't explicitly set tofalse:- implementations of
javax.servlet.ServletContainerInitializerare treated as live code - implementations of
org.springframework.web.WebApplicationInitializerare treated as live code
- implementations of
- parsing
*.tldfiles: recognizing custom tags, tag extra infos, listeners, tag library validators & EL functions - parsing
faces-config.xmlfiles: recognizing those element classes as live code:action-listener,application-factory,attribute-class,base-name,behavior-class,client-behavior-renderer-class,component-class,converter-class,converter-for-class,el-resolver,exception-handler-factory,external-context-factory,facelet-cache-factory,faces-config-value-classType,faces-context-factory,flash-factory,flow-handler-factory,key-class,lifecycle-factory,managed-bean-class,navigation-handler,partial-view-context-factory,phase-listener,property-class,property-resolver,referenced-bean-class,render-kit-class,render-kit-factory,renderer-class,resource-handler,source-class,state-manager,system-event-class,system-event-listener-class,tag-handler-delegate-factory,validator-class,value-class,variable-resolver,view-declaration-language-factory,view-handler,visit-context-factory - recognizing classes annotated with JEE annotations as live code:
javax.annotation.ManagedBeanjavax.inject.Namedjavax.persistence.metamodel.StaticMetamodel- JAXB annotation
javax.xml.bind.annotation.XmlRegistry - JAXB annotation
javax.xml.bind.annotation.XmlSchema -
JSF annotations
javax.faces.component.behavior.FacesBehavior,javax.faces.convert.FacesConverter,javax.faces.event.ListenerFor,javax.faces.event.ListenersFor,javax.faces.event.NamedEvent,javax.faces.render.FacesBehaviorRenderer,javax.faces.render.FacesRenderer,javax.faces.validator.FacesValidator,javax.faces.view.facelets.FaceletsResourceResolver
- parsing Spring Web Flow XML: files ending with
.xmlare examined- each
attributeelement'stypeattribute is treated as live code - each
evaluateelement'sresult-typeattribute is treated as live code - each
inputelement'stypeattribute is treated as live code - each
outputelement'stypeattribute is treated as live code - each
setelement'stypeattribute is treated as live code - each
varelement'sclassattribute is treated as live code
- each
- parsing Apache Tiles XML definition files: files ending with
.xmlare examined- each
definitionelement'spreparerattribute is treated as live code - each
beanelement'sclasstypeattribute is treated as live code - each
itemelement'sclasstypeattribute is treated as live code
- each
- processing Hibernate Annotations
- recognizing the
strategyvalue of theorg.hibernate.annotations.GenericGeneratorannotation as live code- issue a warning if a
@GenericGeneratoris defined more than once with the samename
- issue a warning if a
- recognizing classes annotated with
org.hibernate.annotations.GenericGeneratorthat are referenced by another class viajavax.persistence.GeneratedValueannotation'sgeneratorvalue as live code - recognizing the
typevalue of theorg.hibernate.annotations.Typeannotation as live code - recognizing classes annotated with a
org.hibernate.annotations.TypeDefthat are referenced by another class in the project as live code- issue a warning if a
@TypeDefis defined more than once with the samename
- issue a warning if a
- recognizing the
- recognizing
*Descriptorclasses being generated by Castor as live code - recognizing service classes defined within Axis
.wsddfiles as live code - recognizing aspects defined within
aop.xmlas live code; supports both AspectJ and AspectWerkz - parsing Jetty XML configuration files: recognizing listed
classandtypeattributes as live code
- recognizing classes annotated with custom specified annotations as live code
- Annotations are processed recursively; i.e. if you list
@Annotationhere and a class is annotated with@SubAnnotationwhich is itself annotated with@Annotation, that class is marked as live code - Annotations marked with
@Inheritedwill cause subclasses of a class with such an annotation to be marked as live code as well - issue a warning if an annotation is not found in the class path and thus is likely to not exist
- Annotations are processed recursively; i.e. if you list
- recognizing classes implementing custom specified interfaces as live code
- issue a warning if an interface is not found in the class path and thus is likely to not exist
- recognizing classes extending custom specified classes as live code
- issue a warning if a superclass is not found in the class path and thus is likely to not exist
- custom XML file parsing: treating classes referenced in elements' text or attributes as live code
- issue a warning if a configuration never identifies anything
1 Inner classes are always recognized as being referenced by the outer class and vice versa (even static inner classes). This is not only true for the currently used Javassist, but also for BCEL. This suggests that this is an aspect of the JVM spec.