The following document contains the results of a JDepend metric analysis. The various metrics are defined at the bottom of this document.
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| org.apache.commons.proxy2.Interceptor org.apache.commons.proxy2.Invocation
 org.apache.commons.proxy2.Invoker
 org.apache.commons.proxy2.ObjectProvider
 org.apache.commons.proxy2.ProxyFactory
 
 | org.apache.commons.proxy2.DefaultProxyFactory org.apache.commons.proxy2.ProxyUtils
 
 | org.apache.commons.proxy2.impl org.apache.commons.proxy2.interceptor
 org.apache.commons.proxy2.interceptor.matcher
 org.apache.commons.proxy2.interceptor.matcher.invocation
 org.apache.commons.proxy2.invoker
 org.apache.commons.proxy2.invoker.recorder
 org.apache.commons.proxy2.provider
 org.apache.commons.proxy2.stub
 
 | java.io java.lang
 java.lang.reflect
 java.util
 org.apache.commons.lang3
 
 | 
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| None | org.apache.commons.proxy2.exception.InvokerException org.apache.commons.proxy2.exception.ObjectProviderException
 org.apache.commons.proxy2.exception.ProxyFactoryException
 
 | org.apache.commons.proxy2.impl org.apache.commons.proxy2.provider
 
 | java.lang 
 | 
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| org.apache.commons.proxy2.impl.AbstractProxyClassGenerator org.apache.commons.proxy2.impl.AbstractProxyFactory
 org.apache.commons.proxy2.impl.AbstractSubclassingProxyFactory
 org.apache.commons.proxy2.impl.ProxyClassGenerator
 
 | org.apache.commons.proxy2.impl.MethodSignature org.apache.commons.proxy2.impl.MethodSignature$SignaturePosition
 org.apache.commons.proxy2.impl.ProxyClassCache
 
 | org.apache.commons.proxy2.stub 
 | java.io java.lang
 java.lang.ref
 java.lang.reflect
 java.text
 java.util
 org.apache.commons.lang3
 org.apache.commons.lang3.builder
 org.apache.commons.lang3.reflect
 org.apache.commons.lang3.tuple
 org.apache.commons.proxy2
 org.apache.commons.proxy2.exception
 
 | 
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| None | org.apache.commons.proxy2.interceptor.InterceptorUtils org.apache.commons.proxy2.interceptor.InvokerInterceptor
 org.apache.commons.proxy2.interceptor.ObjectProviderInterceptor
 org.apache.commons.proxy2.interceptor.SwitchInterceptor
 org.apache.commons.proxy2.interceptor.SwitchInterceptor$1
 org.apache.commons.proxy2.interceptor.SwitchInterceptor$CaseBuilder
 org.apache.commons.proxy2.interceptor.ThrowingInterceptor
 
 | org.apache.commons.proxy2.stub 
 | java.io java.lang
 java.util
 java.util.concurrent
 org.apache.commons.lang3
 org.apache.commons.lang3.tuple
 org.apache.commons.proxy2
 org.apache.commons.proxy2.interceptor.matcher
 org.apache.commons.proxy2.provider
 
 | 
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| org.apache.commons.proxy2.interceptor.matcher.ArgumentMatcher org.apache.commons.proxy2.interceptor.matcher.InvocationMatcher
 
 | None | org.apache.commons.proxy2.interceptor org.apache.commons.proxy2.interceptor.matcher.argument
 org.apache.commons.proxy2.interceptor.matcher.invocation
 org.apache.commons.proxy2.stub
 
 | java.lang org.apache.commons.proxy2
 
 | 
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$ComparatorMatcher 
 | org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$1
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$AnyMatcher
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$EndsWithMatcher
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$EqualsMatcher
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$GreaterThanMatcher
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$GreaterThanOrEqualMatcher
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$InstanceOfMatcher
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$IsNullMatcher
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$LessThanMatcher
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$LessThanOrEqualMatcher
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$NotNullMatcher
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$RegexMatcher
 org.apache.commons.proxy2.interceptor.matcher.argument.ArgumentMatcherUtils$StartsWithMatcher
 
 | org.apache.commons.proxy2.stub 
 | java.lang org.apache.commons.lang3
 org.apache.commons.proxy2.interceptor.matcher
 
 | 
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| None | org.apache.commons.proxy2.interceptor.matcher.invocation.DeclaredByMatcher org.apache.commons.proxy2.interceptor.matcher.invocation.MethodNameMatcher
 org.apache.commons.proxy2.interceptor.matcher.invocation.ReturnTypeMatcher
 
 | None | java.lang java.lang.reflect
 org.apache.commons.proxy2
 org.apache.commons.proxy2.interceptor.matcher
 
 | 
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| None | org.apache.commons.proxy2.invoker.DelegatingInvoker org.apache.commons.proxy2.invoker.DuckTypingInvoker
 org.apache.commons.proxy2.invoker.InvocationHandlerAdapter
 org.apache.commons.proxy2.invoker.NullInvoker
 org.apache.commons.proxy2.invoker.RecordedInvocation
 
 | org.apache.commons.proxy2.invoker.recorder org.apache.commons.proxy2.stub
 
 | java.io java.lang
 java.lang.reflect
 org.apache.commons.lang3
 org.apache.commons.proxy2
 
 | 
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| None | org.apache.commons.proxy2.invoker.recorder.InvocationRecorder org.apache.commons.proxy2.invoker.recorder.InvocationRecorder$1
 org.apache.commons.proxy2.invoker.recorder.InvocationRecorder$InvocationRecorderInvoker
 
 | None | java.lang java.lang.reflect
 java.util
 org.apache.commons.lang3.reflect
 org.apache.commons.proxy2
 org.apache.commons.proxy2.invoker
 
 | 
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| None | org.apache.commons.proxy2.provider.BeanProvider org.apache.commons.proxy2.provider.CloningProvider
 org.apache.commons.proxy2.provider.ConstantProvider
 org.apache.commons.proxy2.provider.NullProvider
 org.apache.commons.proxy2.provider.ObjectProviderUtils
 org.apache.commons.proxy2.provider.ProviderDecorator
 org.apache.commons.proxy2.provider.SingletonProvider
 
 | org.apache.commons.proxy2.interceptor org.apache.commons.proxy2.stub
 
 | java.io java.lang
 org.apache.commons.lang3
 org.apache.commons.lang3.exception
 org.apache.commons.lang3.reflect
 org.apache.commons.proxy2
 org.apache.commons.proxy2.exception
 
 | 
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| org.apache.commons.proxy2.serialization.ReadResolve org.apache.commons.proxy2.serialization.WriteReplace
 
 | None | None | java.io java.lang
 
 | 
| Abstract Classes | Concrete Classes | Used by Packages | Uses Packages | 
| org.apache.commons.proxy2.stub.AnnotationTrainer org.apache.commons.proxy2.stub.BaseAnnotationTrainer
 org.apache.commons.proxy2.stub.BaseTrainer
 org.apache.commons.proxy2.stub.BaseTrainer$BaseWhen
 org.apache.commons.proxy2.stub.Trainer
 
 | org.apache.commons.proxy2.stub.AnnotationBuilder org.apache.commons.proxy2.stub.AnnotationBuilder$1
 org.apache.commons.proxy2.stub.AnnotationBuilder$1$1
 org.apache.commons.proxy2.stub.AnnotationBuilder$1$2
 org.apache.commons.proxy2.stub.AnnotationBuilder$InterceptorInvocationHandler
 org.apache.commons.proxy2.stub.AnnotationBuilder$MapAnnotationTrainer
 org.apache.commons.proxy2.stub.AnnotationBuilder$ReflectionInvocation
 org.apache.commons.proxy2.stub.AnnotationInvoker
 org.apache.commons.proxy2.stub.AnnotationTypeTrainer
 org.apache.commons.proxy2.stub.BaseAnnotationTrainer$1
 org.apache.commons.proxy2.stub.BaseAnnotationTrainer$StubAnnotationArrayBuilder
 org.apache.commons.proxy2.stub.BaseAnnotationTrainer$WhenAnnotation
 org.apache.commons.proxy2.stub.BaseAnnotationTrainer$WhenAnnotationArray
 org.apache.commons.proxy2.stub.BaseTrainer$StubArrayBuilder
 org.apache.commons.proxy2.stub.BaseTrainer$WhenBooleanArray
 org.apache.commons.proxy2.stub.BaseTrainer$WhenByteArray
 org.apache.commons.proxy2.stub.BaseTrainer$WhenCharArray
 org.apache.commons.proxy2.stub.BaseTrainer$WhenClass
 org.apache.commons.proxy2.stub.BaseTrainer$WhenDoubleArray
 org.apache.commons.proxy2.stub.BaseTrainer$WhenFloatArray
 org.apache.commons.proxy2.stub.BaseTrainer$WhenIntArray
 org.apache.commons.proxy2.stub.BaseTrainer$WhenLongArray
 org.apache.commons.proxy2.stub.BaseTrainer$WhenObject
 org.apache.commons.proxy2.stub.BaseTrainer$WhenObjectArray
 org.apache.commons.proxy2.stub.BaseTrainer$WhenShortArray
 org.apache.commons.proxy2.stub.StubBuilder
 org.apache.commons.proxy2.stub.StubInterceptorBuilder
 org.apache.commons.proxy2.stub.TrainingContext
 org.apache.commons.proxy2.stub.TrainingContext$1
 org.apache.commons.proxy2.stub.TrainingContext$ExactArgumentsMatcher
 org.apache.commons.proxy2.stub.TrainingContext$MatchingArgumentsMatcher
 org.apache.commons.proxy2.stub.TrainingContext$TrainingContextFrame
 org.apache.commons.proxy2.stub.TrainingContext$TrainingInvoker
 
 | None | java.io java.lang
 java.lang.annotation
 java.lang.reflect
 java.util
 org.apache.commons.lang3
 org.apache.commons.lang3.builder
 org.apache.commons.lang3.reflect
 org.apache.commons.proxy2
 org.apache.commons.proxy2.impl
 org.apache.commons.proxy2.interceptor
 org.apache.commons.proxy2.interceptor.matcher
 org.apache.commons.proxy2.interceptor.matcher.argument
 org.apache.commons.proxy2.invoker
 org.apache.commons.proxy2.provider
 
 | 
There are no cyclic dependencies.
The following explanations are for quick reference and are lifted directly from the original JDepend documentation.
| Term | Description | 
| Number of Classes | The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package. | 
| Afferent Couplings | The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. | 
| Efferent Couplings | The number of other packages that the classes in the package depend upon is an indicator of the package's independence. | 
| Abstractness | The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. | 
| Instability | The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. | 
| Distance | The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. | 
| Cycles | Packages participating in a package dependency cycle are  in a deadly embrace with respect to reusability and their  release cycle. Package dependency cycles can be easily identified by reviewing the textual reports of dependency cycles. Once these dependency cycles have been identified with JDepend, they can be broken by employing various object-oriented techniques. |