diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 3cba306..0000000 --- a/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Ignore IDE project files -# Ignore IntelliJ project directory and iml files -.idea/ -*.iml - -# Ignore target directories -target/ - -# Meta data of Mac OS X's Finder.app -.DS_Store diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 486a88c..0000000 --- a/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: java -jdk: - - openjdk7 - - oraclejdk7 - - oraclejdk8 -script: mvn verify -B diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 038d749..0000000 --- a/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2014, Florian Schoppmann -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the java-types project nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md deleted file mode 100644 index 7a3976a..0000000 --- a/README.md +++ /dev/null @@ -1,160 +0,0 @@ -Skeletal implementation of interface -[`javax.lang.model.util.Types`](http://docs.oracle.com/javase/8/docs/api/javax/lang/model/util/Types.html), -plus concrete realization backed by core Java Reflection API, akin to -[JDK Enhancement Proposal (JEP) 119](http://openjdk.java.net/jeps/119) - -## Status -[![Build Status](https://travis-ci.org/fschopp/java-types.svg?branch=master)](https://travis-ci.org/fschopp/java-types) -[![Maven Central](https://maven-badges.herokuapp.com/maven-central/net.florianschoppmann.java/java-types/badge.svg?style=flat)](http://search.maven.org/#search|gav|1|g:net.florianschoppmann.java%20AND%20a:java-types) - -## Overview - -- source compatible with Java 7 and 8 -- algorithms, relations, and properties of Java Language Specification - implemented exclusively in terms of - [`javax.lang.model`](https://docs.oracle.com/javase/8/docs/api/javax/lang/model/package-summary.html) - interfaces; therefore supports different concrete implementations of - `javax.lang.model` interfaces -- besides the generic skeletal implementation of `javax.lang.model.util.Types`, - also includes a concrete implementation backed by the Java Reflection API -- implemented in plain Java with no dependencies; easily embeddable in projects - that have Java types as part of their domain model (for instance, - domain-specific languages on top of the JVM that need some sort of support - for Java generic types) -- contract tests for the methods and classes that clients of the library need - to provide in order to support other implementations of `javax.lang.model` - interfaces -- tests have virtually - [full code coverage](http://fschopp.github.io/java-types/jacoco/index.html) -- contains a complete implementation of `javax.lang.model.util.Types` methods - pertaining to JLS - [§4](http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html) (including - primitive types, reference types, type variables, parameterized types, type - erasure, raw types, intersection types, and subtyping) and - [§5.1.10](http://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.10) - (capture conversion) -- also includes method for resolving formal type parameters to actual type - arguments (for example, determining the actual type argument to - [`Comparable`](http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html), - given type - [`Integer`](http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html)) -- methods pertaining to non-type elements (notably, - [`ExecutableElement`](http://docs.oracle.com/javase/8/docs/api/javax/lang/model/element/ExecutableElement.html) - and - [`VariableElement`](http://docs.oracle.com/javase/8/docs/api/javax/lang/model/element/VariableElement.html)) - not currently implemented -- Code makes use of JSR 305 annotations (e.g., `@Nullable`) - -## License - -[Revised BSD (3-Clause) License](LICENSE) - -## Binary Releases - -Published releases (compiled for Java 7 and up) are available on Maven Central. - -``` - - net.florianschoppmann.java - java-types - 1.0.1 - -``` - -## Documentation - -- [API documentation](http://fschopp.github.io/java-types/apidocs/index.html) -- [Maven-generated project documentation](http://fschopp.github.io/java-types) - -## Usage Examples - -The following examples show some use cases of class `ReflectionTypes`, the Java -Reflection API-based implementation of `javax.lang.model.util.Types` provided -by this project. While the bulk of the functionality of `ReflectionTypes` is -provided by an abstract, skeletal-implementation class called `AbstractTypes`, -class `ReflectionTypes` provides methods `typeElement()` and `typeMirror()` -that facilitate converting Java classes and generic types to `TypeElement` and -`TypeMirror` instances. - -### Test whether one type is a subtype of another - -(see JLS §4.10 and its references) - -```java -ReflectionTypes types = ReflectionTypes.getInstance(); -// listSuperNumberType: List -DeclaredType listSuperNumberType = types.getDeclaredType( - types.typeElement(List.class), - types.getWildcardType(null, types.typeMirror(Number.class)) -); -// iterableExtendsNumberType: Iterable -DeclaredType iterableExtendsNumberType = types.getDeclaredType( - types.typeElement(Iterable.class), - types.getWildcardType(types.typeMirror(Number.class), null) -); -// iterableType: Iterable -DeclaredType iterableType = types.getDeclaredType( - types.typeElement(Iterable.class), - types.getWildcardType(null, null) -); -assert types.isSubtype(listSuperNumberType, iterableType); -assert types.isSubtype(iterableExtendsNumberType, iterableType); -assert !types.isSubtype(listSuperNumberType, iterableExtendsNumberType); -``` - -### Resolve actual type arguments - -(see JLS §4.5, §8.1, and their references) - -```java -ReflectionTypes types = ReflectionTypes.getInstance(); -// actual type arguments to Comparable, given the (raw) subtype ScheduledFuture -List typeArguments = types.resolveActualTypeArguments( - types.typeElement(Comparable.class), - types.typeMirror(ScheduledFuture.class) -); -assert typeArguments.equals( - Collections.singletonList(types.typeMirror(Delayed.class)) -); -``` - -### Capture conversion with mutually recursive type-variable bounds - -(taken from [Example 8.1.2-1](http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e11077) -of JLS 8, see also JLS §5.1.10 and its references) - -```java -// The following are top-level definitions -interface ConvertibleTo { - T convert(); -} -class ReprChange, - S extends ConvertibleTo> { - T t; - void set(S s) { t = s.convert(); } - S get() { return t.convert(); } -} -class Amount implements ConvertibleTo { - @Override public Integer convert() { return 42; } -} - -// [...] - -ReflectionTypes types = ReflectionTypes.getInstance(); -// reprChangeType: ReprChange -DeclaredType reprChangeType = types.getDeclaredType( - types.typeElement(ReprChange.class), - types.typeMirror(Amount.class), - types.getWildcardType(null, null) -); -TypeMirror convertedType = types.capture(reprChangeType); - -TypeVariable capturedS - = (TypeVariable) ((DeclaredType) convertedType).getTypeArguments().get(1); -// convertibleToAmountType: ConvertibleTo -DeclaredType convertibleToAmountType = types.getDeclaredType( - types.typeElement(ConvertibleTo.class), - types.typeMirror(Amount.class) -); -assert capturedS.getUpperBound().equals(convertibleToAmountType); -``` diff --git a/apidocs/allclasses-frame.html b/apidocs/allclasses-frame.html new file mode 100644 index 0000000..2f28c5c --- /dev/null +++ b/apidocs/allclasses-frame.html @@ -0,0 +1,25 @@ + + + + + + +All Classes (Java Types 1.0.1 API) + + + + + +

All Classes

+ + + diff --git a/apidocs/allclasses-noframe.html b/apidocs/allclasses-noframe.html new file mode 100644 index 0000000..08804b7 --- /dev/null +++ b/apidocs/allclasses-noframe.html @@ -0,0 +1,25 @@ + + + + + + +All Classes (Java Types 1.0.1 API) + + + + + +

All Classes

+ + + diff --git a/apidocs/constant-values.html b/apidocs/constant-values.html new file mode 100644 index 0000000..fe3dbd1 --- /dev/null +++ b/apidocs/constant-values.html @@ -0,0 +1,126 @@ + + + + + + +Constant Field Values (Java Types 1.0.1 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

Constant Field Values

+

Contents

+
+ +
+ + + + + + + +
+ + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/deprecated-list.html b/apidocs/deprecated-list.html new file mode 100644 index 0000000..52c24d5 --- /dev/null +++ b/apidocs/deprecated-list.html @@ -0,0 +1,126 @@ + + + + + + +Deprecated List (Java Types 1.0.1 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + + + +
+ + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/help-doc.html b/apidocs/help-doc.html new file mode 100644 index 0000000..63d6a31 --- /dev/null +++ b/apidocs/help-doc.html @@ -0,0 +1,231 @@ + + + + + + +API Help (Java Types 1.0.1 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
  • +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Use

    +

    Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + + + +
+ + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/index-all.html b/apidocs/index-all.html new file mode 100644 index 0000000..3ece173 --- /dev/null +++ b/apidocs/index-all.html @@ -0,0 +1,406 @@ + + + + + + +Index (Java Types 1.0.1 API) + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E G I N R S T U V  + + +

A

+
+
AbstractTypes - Class in net.florianschoppmann.java.type
+
+
Abstract skeletal implementation of Types.
+
+
AbstractTypes() - Constructor for class net.florianschoppmann.java.type.AbstractTypes
+
 
+
AnnotatedConstruct - Interface in net.florianschoppmann.java.type
+
+
Represents a construct that can be annotated, equivalent to javax.lang.model.AnnotatedConstruct in JDK 8.
+
+
asElement(TypeMirror) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns the element corresponding to a type.
+
+
asMemberOf(DeclaredType, Element) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
+ + + +

B

+
+
boxedClass(PrimitiveType) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
+ + + +

C

+
+
capture(TypeMirror) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns the capture conversion of the given type, as specified by JLS §5.1.10.
+
+
capturedTypeArgument(TypeVariable) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
capturedTypeArgument(TypeVariable) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns the captured wildcard type argument of the given type variable, or null if the given type variable is not + the result of a capture conversion.
+
+
contains(TypeMirror, TypeMirror) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns whether the first type argument contains the second type argument, as specified by JLS §4.5.1.
+
+
createTypeVariable(TypeParameterElement, WildcardType) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
createTypeVariable(TypeParameterElement, WildcardType) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Creates a new unfinished type variable for the given formal parameter.
+
+
+ + + +

D

+
+
directSupertypes(TypeMirror) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
+ + + +

E

+
+
erasure(TypeMirror) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns the erasure of a type, as specified by JLS §4.6.
+
+
ExtendedTypeKindVisitor7<R,P> - Class in net.florianschoppmann.java.type
+
+
A visitor of types that supports IntersectionType, but otherwise behaves as TypeKindVisitor7.
+
+
ExtendedTypeKindVisitor7() - Constructor for class net.florianschoppmann.java.type.ExtendedTypeKindVisitor7
+
+
Constructor for concrete subclasses to call; uses null for the default value.
+
+
ExtendedTypeKindVisitor7(R) - Constructor for class net.florianschoppmann.java.type.ExtendedTypeKindVisitor7
+
+
Constructor for concrete subclasses to call; uses the argument for the default value.
+
+
+ + + +

G

+
+
getAnnotation(Class<A>) - Method in interface net.florianschoppmann.java.type.AnnotatedConstruct
+
+
Returns this construct's annotation of the specified type if such an annotation is present, else + null.
+
+
getAnnotationMirrors() - Method in interface net.florianschoppmann.java.type.AnnotatedConstruct
+
+
Returns the annotations that are directly present on this construct.
+
+
getAnnotationsByType(Class<A>) - Method in interface net.florianschoppmann.java.type.AnnotatedConstruct
+
+
Returns annotations that are associated with this construct.
+
+
getArrayType(TypeMirror) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
getBounds() - Method in interface net.florianschoppmann.java.type.IntersectionType
+
+
Return the bounds comprising this intersection type.
+
+
getDeclaredType(DeclaredType, TypeElement, TypeMirror...) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
getDeclaredType(TypeElement, TypeMirror...) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
getInstance() - Static method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
+
Returns the singleton instance of this class.
+
+
getIntersectionType(TypeMirror...) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
getIntersectionType(TypeMirror...) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns a new intersection type.
+
+
getNoType(TypeKind) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
getNullType() - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
getPrimitiveType(TypeKind) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
getTypeVariable(TypeParameterElement, TypeMirror, TypeMirror, WildcardType) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns a new type variable that corresponds to the given formal type parameter and that has the given actual + upper and lower bounds.
+
+
getWildcardType(TypeMirror, TypeMirror) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
+ + + +

I

+
+
IntersectionType - Interface in net.florianschoppmann.java.type
+
+
Represents an intersection type, equivalent to javax.lang.model.type.IntersectionType in JDK 8.
+
+
isAssignable(TypeMirror, TypeMirror) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
isIntersectionType() - Method in interface net.florianschoppmann.java.type.IntersectionType
+
+
Returns whether this type mirror represents an intersection type.
+
+
isSameType(TypeMirror, TypeMirror) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns whether the two given type arguments represent the same type.
+
+
isSubsignature(ExecutableType, ExecutableType) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
isSubtype(TypeMirror, TypeMirror) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns whether the first type is a subtype of the second type, as specified by JLS §4.10.
+
+
+ + + +

N

+
+
net.florianschoppmann.java.reflect - package net.florianschoppmann.java.reflect
+
+
Provides a concrete implementation of AbstractTypes backed by the Java + Reflection API.
+
+
net.florianschoppmann.java.type - package net.florianschoppmann.java.type
+
+
Provides an abstract skeletal implementation of class Types, together with classes and + interfaces that ensure source compatibility with both Java 7 and 8.
+
+
NonNullByDefault - Annotation Type in net.florianschoppmann.java.type
+
+
Annotation to define that all contained entities for which a null annotation is otherwise lacking should be + considered as Nonnull.
+
+
+ + + +

R

+
+
ReflectionTypes - Class in net.florianschoppmann.java.reflect
+
+
Implementation of Types backed by the Java Reflection API.
+
+
requireValidElement(Element) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
requireValidElement(Element) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Verifies that the given Element is valid for use with this class.
+
+
requireValidType(TypeMirror) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
requireValidType(TypeMirror) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Verifies that the given TypeMirror is valid for use with this class, or that it is null.
+
+
requireValidTypes(TypeMirror[]) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Verifies that the given array is non-null and contains valid types that are not null.
+
+
resolveActualTypeArguments(TypeElement, TypeMirror) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns the actual type arguments of a type declaration given a subtype (typically with its own actual type + arguments).
+
+
+ + + +

S

+
+
setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Sets the bounds of a type variable previously returned by + createTypeVariable(TypeParameterElement, WildcardType).
+
+
substitute(TypeMirror, Map<TypeParameterElement, ? extends TypeMirror>) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Replaces formal type parameters in the given type.
+
+
+ + + +

T

+
+
toString(TypeMirror) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns the canonical string representation of the given type.
+
+
typeElement(Class<?>) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
+
Returns a type element corresponding to the given Class object.
+
+
typeMirror(Type) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
+
Returns a type mirror corresponding to the given Java reflection type.
+
+
typeMirror(Type) - Method in class net.florianschoppmann.java.type.AbstractTypes
+
+
Returns a type mirror corresponding to the given Java reflection type.
+
+
+ + + +

U

+
+
unboxedType(TypeMirror) - Method in class net.florianschoppmann.java.reflect.ReflectionTypes
+
 
+
+ + + +

V

+
+
visitIntersection(IntersectionType, P) - Method in class net.florianschoppmann.java.type.ExtendedTypeKindVisitor7
+
+
Visits an intersection type by calling SimpleTypeVisitor6.defaultAction(TypeMirror, Object).
+
+
visitOther(TypeMirror, P) - Method in class net.florianschoppmann.java.type.ExtendedTypeKindVisitor7
+
+
Visits an unknown kind of type.
+
+
visitUnknown(TypeMirror, P) - Method in class net.florianschoppmann.java.type.ExtendedTypeKindVisitor7
+
+
Visits an unknown kind of type or an IntersectionType, which did not exist in the TypeMirror + hierarchy of Java 7.
+
+
+A B C D E G I N R S T U V 
+ +
+ + + + + + + +
+ + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/index.html b/apidocs/index.html new file mode 100644 index 0000000..0e90bf1 --- /dev/null +++ b/apidocs/index.html @@ -0,0 +1,75 @@ + + + + + + +Java Types 1.0.1 API + + + + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + + diff --git a/apidocs/net/florianschoppmann/java/reflect/ReflectionTypes.html b/apidocs/net/florianschoppmann/java/reflect/ReflectionTypes.html new file mode 100644 index 0000000..29b5095 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/reflect/ReflectionTypes.html @@ -0,0 +1,736 @@ + + + + + + +ReflectionTypes (Java Types 1.0.1 API) + + + + + + + + + + + + +
+
net.florianschoppmann.java.reflect
+

Class ReflectionTypes

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/reflect/class-use/ReflectionTypes.html b/apidocs/net/florianschoppmann/java/reflect/class-use/ReflectionTypes.html new file mode 100644 index 0000000..e7f1e26 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/reflect/class-use/ReflectionTypes.html @@ -0,0 +1,171 @@ + + + + + + +Uses of Class net.florianschoppmann.java.reflect.ReflectionTypes (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Uses of Class
net.florianschoppmann.java.reflect.ReflectionTypes

+
+
+ +
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/reflect/package-frame.html b/apidocs/net/florianschoppmann/java/reflect/package-frame.html new file mode 100644 index 0000000..fd5e661 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/reflect/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +net.florianschoppmann.java.reflect (Java Types 1.0.1 API) + + + + + +

net.florianschoppmann.java.reflect

+
+

Classes

+ +
+ + diff --git a/apidocs/net/florianschoppmann/java/reflect/package-summary.html b/apidocs/net/florianschoppmann/java/reflect/package-summary.html new file mode 100644 index 0000000..84353f8 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/reflect/package-summary.html @@ -0,0 +1,157 @@ + + + + + + +net.florianschoppmann.java.reflect (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Package net.florianschoppmann.java.reflect

+
+
Provides a concrete implementation of AbstractTypes backed by the Java + Reflection API.
+
+

See: Description

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ReflectionTypes +
    Implementation of Types backed by the Java Reflection API.
    +
    +
  • +
+ + + +

Package net.florianschoppmann.java.reflect Description

+
Provides a concrete implementation of AbstractTypes backed by the Java + Reflection API.
+
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/reflect/package-tree.html b/apidocs/net/florianschoppmann/java/reflect/package-tree.html new file mode 100644 index 0000000..2abdfeb --- /dev/null +++ b/apidocs/net/florianschoppmann/java/reflect/package-tree.html @@ -0,0 +1,143 @@ + + + + + + +net.florianschoppmann.java.reflect Class Hierarchy (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Hierarchy For Package net.florianschoppmann.java.reflect

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/reflect/package-use.html b/apidocs/net/florianschoppmann/java/reflect/package-use.html new file mode 100644 index 0000000..c1159c4 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/reflect/package-use.html @@ -0,0 +1,164 @@ + + + + + + +Uses of Package net.florianschoppmann.java.reflect (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Uses of Package
net.florianschoppmann.java.reflect

+
+
+ +
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/AbstractTypes.html b/apidocs/net/florianschoppmann/java/type/AbstractTypes.html new file mode 100644 index 0000000..af1f021 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/AbstractTypes.html @@ -0,0 +1,909 @@ + + + + + + +AbstractTypes (Java Types 1.0.1 API) + + + + + + + + + + + + +
+
net.florianschoppmann.java.type
+

Class AbstractTypes

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Types
    +
    +
    +
    Direct Known Subclasses:
    +
    ReflectionTypes
    +
    +
    +
    +
    public abstract class AbstractTypes
    +extends Object
    +implements Types
    +
    Abstract skeletal implementation of Types. + +

    This class provides a skeletal implementation of the Types interface. Specifically, it implements all + methods pertaining to §4.10 (subtyping) in the Java Language Specification (JLS). Concrete subclasses are expected to + implement the abstract methods in this class, which are responsible for creating appropriate type-mirror instances. + This class does not place any additional constraints on the concrete TypeMirror and Element + implementations, so mutability and thread-safety are implementation-defined. However, this class crucially relies on + the equals method being well-defined. That is, Element objects that have equal names and equal + enclosing elements must compare equal. Likewise, TypeMirror objects that contain equal values must compare + equal. In particular, multiple instances created by one of the get-methods must compare equal when the given + arguments compare equal. + +

    Besides subtype-related methods, this class also provides method + resolveActualTypeArguments(TypeElement, TypeMirror) for resolving formal type parameters to actual type + arguments. For instance, given type List<String>, this method determines the actual type argument for the + formal type parameter of Collection<E> (that is, String in this simple example). + +

    Unless explicitly stated otherwise, all methods in this class expect non-null arguments. Passing null where not + expected will cause a NullPointerException to be thrown. Implementations typically place additional + restrictions on method arguments not captured by the types of the formal parameters (which stem from + javax.lang.model and its subpackages). While the details are implementation-defined, typically this means + that arguments must have been crated by the same implementation, or otherwise an IllegalArgumentException + will be thrown. Implementations must override requireValidType(TypeMirror) and + requireValidElement(Element), as these methods are expected to perform any necessary validation.

    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AbstractTypes

        +
        public AbstractTypes()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        requireValidElement

        +
        protected abstract void requireValidElement(Element element)
        +
        Verifies that the given Element is valid for use with this class. + +

        The meaning of valid is implementation-defined, but typically a valid Element must have been created + by the implementation that belongs to the current AbstractTypes instance.

        +
        +
        Parameters:
        +
        element - element
        +
        Throws:
        +
        NullPointerException - if the argument is null
        +
        IllegalArgumentException - if the given Element cannot be used with this class
        +
        +
      • +
      + + + + + + + +
        +
      • +

        requireValidTypes

        +
        protected final void requireValidTypes(TypeMirror[] types)
        +
        Verifies that the given array is non-null and contains valid types that are not null.
        +
        +
        Parameters:
        +
        types - array of types
        +
        Throws:
        +
        NullPointerException - if the given array or any of its elements are null
        +
        IllegalArgumentException - if requireValidType(TypeMirror) throws an exception for one of the + array elements
        +
        +
      • +
      + + + +
        +
      • +

        typeMirror

        +
        protected abstract TypeMirror typeMirror(Type type)
        +
        Returns a type mirror corresponding to the given Java reflection type. + +

        Subclasses are required to return the appropriate DeclaredType instances for the following + Class instances: +

        + +

        Support for other types is not required and implementation-defined.

        +
        +
        Parameters:
        +
        type - type as represented by Java Reflection API
        +
        Returns:
        +
        the type mirror corresponding to the given reflection type
        +
        Throws:
        +
        UnsupportedOperationException - If the given type is not one of the above Class objects and + this type-utilities implementation does not support mirroring arbitrary Java reflection types.
        +
        +
      • +
      + + + +
        +
      • +

        substitute

        +
        protected TypeMirror substitute(TypeMirror type,
        +                                Map<TypeParameterElement,? extends TypeMirror> substitutionMap)
        +
        Replaces formal type parameters in the given type. + +

        This method requires that type does not contain transitive references to itself, unless through + DeclaredType.asElement()Element.asType() or TypeVariable.asElement() → + Element.asType(). Otherwise, this method might run into an infinite recursion, resulting in + a StackOverflowError. + +

        Moreover, this method requires that any type variable transitively referenced by substitutionMap must + not contain a transitive reference (through TypeVariable.getUpperBound() or + TypeVariable.getLowerBound()) to itself. Instead, any instance of TypeVariable (transitively) + referenced by a value in substitutionMap must be the result of Element.asType(). + +

        This method creates a fresh type variable for each formal type parameter that is to be substituted by a type + variable for the same formal type parameter. For instance, suppose T extends Object is a formal type + parameter, and substitutionMap specifies to replace it with the type variable T extends U<T>. In + this case, createTypeVariable(TypeParameterElement, WildcardType) will be called with the formal type + parameter T extends Object as (first) argument. Once all fresh types have been created, + setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror) will then be called with U<T> as + upper bound, where T is the fresh type variable T extends U<T>.

        +
        +
        Parameters:
        +
        type - type in which the type parameters will be replaced recursively, guaranteed non-null
        +
        substitutionMap - mapping from formal type parameters to substituted type, guaranteed non-null
        +
        Returns:
        +
        new port type, guaranteed non-null
        +
        +
      • +
      + + + +
        +
      • +

        resolveActualTypeArguments

        +
        @Nullable
        +public final List<? extends TypeMirror> resolveActualTypeArguments(TypeElement typeElement,
        +                                                                             TypeMirror subType)
        +
        Returns the actual type arguments of a type declaration given a subtype (typically with its own actual type + arguments). + +

        This method "projects" the actual type arguments of subtype, as well as all actual type arguments of + super types in the type hierarchy between typeElement and subType, onto the type declaration + represented by typeElement. + +

        For example, typeElement may be the (generic) type declaration Comparable<T>, and + subType may be the (non-generic) type Integer. The result in this case would be a singleton list + containing the type Integer. + +

        More generally, resolution works as follows: First, the shortest inheritance path from subType to + typeElement is found. Note that while Java allows multiple inheritance for interfaces, JLS §8.1.5 + disallows inheriting from the same interface with different type parameters (both directly and transitively). + Hence, the shortest path contains all information that is necessary to resolve formal type parameters to actual + parameters. This method then propagates the actual type arguments bottom-up along the inheritance path. + Note that the inheritance path consists of DeclaredType instances, and it may consist of generic types, + non-generic types, and raw types. + +

        If the inheritance path contains a raw type before the last path element, this method proceeds + by using the "prototypical" type returned by Element.asType() instead. Correspondingly, it is possible + that the returned list may contain type variables from a type declaration along the inheritance path. However, if + the last inheritance path element is a raw type, the returned list will be empty. Otherwise, if a + non-null non-empty List is returned, it is guaranteed to have the same number of elements as + typeElement.getTypeParameters().

        +
        +
        Parameters:
        +
        typeElement - type declaration
        +
        subType - potential subtype of typeElement, must be a non-generic type declaration, raw type, + generic type declaration, or parameterized type
        +
        Returns:
        +
        actual type arguments for the formal parameters of typeElement (empty list if the last + path element in the inheritance path from subType to typeElement is a raw type), or + null if subType is not a subtype of typeElement
        +
        Throws:
        +
        IllegalArgumentException - if the arguments do not satisfy the constraints mentioned above
        +
        +
      • +
      + + + +
        +
      • +

        isSubtype

        +
        public final boolean isSubtype(TypeMirror t1,
        +                               TypeMirror t2)
        +
        Returns whether the first type is a subtype of the second type, as specified by JLS §4.10. + +

        The subtype relationship is transitive and reflexive.

        +
        +
        Specified by:
        +
        isSubtype in interface Types
        +
        Parameters:
        +
        t1 - the first type
        +
        t2 - the second type
        +
        Returns:
        +
        true if and only if the first type is a subtype of the second
        +
        Throws:
        +
        NullPointerException - if an argument is null
        +
        IllegalArgumentException - if given an executable or package type
        +
        +
      • +
      + + + +
        +
      • +

        contains

        +
        public final boolean contains(TypeMirror t1,
        +                              TypeMirror t2)
        +
        Returns whether the first type argument contains the second type argument, as specified by JLS §4.5.1. + +

        Using the JLS notation, this method returns true if t2 <= t1. As JLS §4.10 states, "subtyping does not + extend through parameterized types." Hence, this method is necessarily different from + isSubtype(TypeMirror, TypeMirror). In particular, the super-type relationship does not include types + with covariant type arguments.

        +
        +
        Specified by:
        +
        contains in interface Types
        +
        Parameters:
        +
        t1 - the first type
        +
        t2 - the second type
        +
        Returns:
        +
        true if and only if the first type contains the second
        +
        Throws:
        +
        IllegalArgumentException - if given an executable or package type
        +
        +
      • +
      + + + +
        +
      • +

        erasure

        +
        public final TypeMirror erasure(TypeMirror type)
        +
        Returns the erasure of a type, as specified by JLS §4.6.
        +
        +
        Specified by:
        +
        erasure in interface Types
        +
        Parameters:
        +
        type - the type to be erased
        +
        Returns:
        +
        the erasure of the given type
        +
        Throws:
        +
        IllegalArgumentException - if given a package type
        +
        +
      • +
      + + + +
        +
      • +

        asElement

        +
        public final Element asElement(TypeMirror type)
        +
        Returns the element corresponding to a type. + +

        The type may be a DeclaredType or TypeVariable. Returns null if the type is not one + with a corresponding element.

        +
        +
        Specified by:
        +
        asElement in interface Types
        +
        Parameters:
        +
        type - the type
        +
        Returns:
        +
        the element corresponding to the given type
        +
        +
      • +
      + + + +
        +
      • +

        isSameType

        +
        public final boolean isSameType(TypeMirror t1,
        +                                TypeMirror t2)
        +
        Returns whether the two given type arguments represent the same type. + +

        If either of the arguments to this method represents a wildcard, this method will return false. As a + consequence, a wildcard is not the same type as itself.

        +
        +
        Specified by:
        +
        isSameType in interface Types
        +
        Parameters:
        +
        t1 - the first type
        +
        t2 - the second type
        +
        Returns:
        +
        true if and only if the two types are the same
        +
        +
      • +
      + + + +
        +
      • +

        capture

        +
        public final TypeMirror capture(TypeMirror type)
        +
        Returns the capture conversion of the given type, as specified by JLS §5.1.10.
        +
        +
        Specified by:
        +
        capture in interface Types
        +
        Parameters:
        +
        type - the type to be converted
        +
        Returns:
        +
        the result of applying capture conversion
        +
        Throws:
        +
        IllegalArgumentException - if given an executable or package type
        +
        +
      • +
      + + + +
        +
      • +

        getTypeVariable

        +
        protected TypeVariable getTypeVariable(TypeParameterElement typeParameter,
        +                                       TypeMirror upperBound,
        +                                       TypeMirror lowerBound,
        +                                       @Nullable
        +                                       WildcardType capturedTypeArgument)
        +
        Returns a new type variable that corresponds to the given formal type parameter and that has the given actual + upper and lower bounds. + +

        This method is primarily needed during capture conversion, in order to create a fresh type variable that + overrides the bounds of the formal type parameter it represents. This method is also called during substitution. + As an example, given a formal type parameter T extends Object and an upper bound Number, this + method returns the type variable T with upper bound Number. + +

        This method is not suited for creating type variables with recursive type bounds if these bounds override the + bounds of the formal type parameter (as only happens during capture conversion). In order to create such a type + variable, this method may be used to create an interim type variable, where the (overridden) upper and lower + bounds should only reference the type variable returned by Element.asType(). As a second + step, substitute(TypeMirror, Map) may then be used to substitute the original type variable with the + interim type variable. The result will be a fresh type variable with the overridden bounds, and these bounds + will reference the fresh type variable instead of the original type variable.

        +
        +
        Parameters:
        +
        typeParameter - the formal type parameter
        +
        upperBound - the upper bound for the new type variable, may contain recursive references to + typeParameter.asType()
        +
        lowerBound - the lower bound for the new type variable, may contain recursive references to + typeParameter.asType()
        +
        capturedTypeArgument - the wildcard type argument that new type variable captures as part of a capture + conversion (§5.1.10 JLS), or null if the new type variable is not the result of a capture conversion
        +
        Returns:
        +
        the new type variable
        +
        Throws:
        +
        NullPointerException - if any of the first three arguments is null
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        capturedTypeArgument

        +
        @Nullable
        +protected abstract WildcardType capturedTypeArgument(TypeVariable typeVariable)
        +
        Returns the captured wildcard type argument of the given type variable, or null if the given type variable is not + the result of a capture conversion. + +

        This method returns the wildcard type argument that was previously passed to + createTypeVariable(TypeParameterElement, WildcardType).

        +
        +
        Parameters:
        +
        typeVariable - the type variable that may be the result of a capture conversion
        +
        Returns:
        +
        the captured wildcard type argument, or null if not applicable
        +
        +
      • +
      + + + +
        +
      • +

        getIntersectionType

        +
        public abstract IntersectionType getIntersectionType(TypeMirror... bounds)
        +
        Returns a new intersection type. At least one bounds needs to be given.
        +
        +
        Parameters:
        +
        bounds - the bounds of the new intersection type
        +
        Returns:
        +
        the new intersection type
        +
        Throws:
        +
        IllegalArgumentException - if the given array is empty
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public final String toString(TypeMirror type)
        +
        Returns the canonical string representation of the given type.
        +
        +
        Parameters:
        +
        type - type
        +
        Returns:
        +
        canonical string representation of the given type
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/AnnotatedConstruct.html b/apidocs/net/florianschoppmann/java/type/AnnotatedConstruct.html new file mode 100644 index 0000000..9f25a9b --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/AnnotatedConstruct.html @@ -0,0 +1,296 @@ + + + + + + +AnnotatedConstruct (Java Types 1.0.1 API) + + + + + + + + + + + + +
+
net.florianschoppmann.java.type
+

Interface AnnotatedConstruct

+
+
+
+
    +
  • +
    +
    All Known Subinterfaces:
    +
    IntersectionType
    +
    +
    +
    +
    public interface AnnotatedConstruct
    +
    Represents a construct that can be annotated, equivalent to javax.lang.model.AnnotatedConstruct in JDK 8. + +

    This interface's sole purpose is to ensure source compatibility with Java 7 and 8, despite the fact that + javax.lang.model.AnnotatedConstruct was retrofitted into the Java language model hierarchy in JDK 8. See the + JDK 8 JavaDoc for + javax.lang.model.AnnotatedConstruct for more information. + +

    Implementations may implement both javax.lang.model.AnnotatedConstruct and this interface. At some time + in the future, when Java 7 compatibility is no longer required, this interface will be deprecated and eventually + removed in favor of javax.lang.model.AnnotatedConstruct.

    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getAnnotationMirrors

        +
        List<? extends AnnotationMirror> getAnnotationMirrors()
        +
        Returns the annotations that are directly present on this construct.
        +
        +
        Returns:
        +
        the annotations directly present on this construct; an empty list if there are none
        +
        +
      • +
      + + + +
        +
      • +

        getAnnotation

        +
        @Nullable
        +<A extends Annotation> A getAnnotation(Class<A> annotationType)
        +
        Returns this construct's annotation of the specified type if such an annotation is present, else + null.
        +
        +
        Type Parameters:
        +
        A - the annotation type
        +
        Parameters:
        +
        annotationType - the Class object corresponding to the annotation type
        +
        Returns:
        +
        this construct's annotation for the specified annotation type if present, else null
        +
        +
      • +
      + + + +
        +
      • +

        getAnnotationsByType

        +
        <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType)
        +
        Returns annotations that are associated with this construct.
        +
        +
        Type Parameters:
        +
        A - the annotation type
        +
        Parameters:
        +
        annotationType - the Class object corresponding to the annotation type
        +
        Returns:
        +
        this construct's annotations for the specified annotation type if present on this construct, else an + empty array
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html b/apidocs/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html new file mode 100644 index 0000000..0412a8f --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html @@ -0,0 +1,471 @@ + + + + + + +ExtendedTypeKindVisitor7 (Java Types 1.0.1 API) + + + + + + + + + + + + +
+
net.florianschoppmann.java.type
+

Class ExtendedTypeKindVisitor7<R,P>

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ExtendedTypeKindVisitor7

        +
        protected ExtendedTypeKindVisitor7()
        +
        Constructor for concrete subclasses to call; uses null for the default value.
        +
      • +
      + + + + + +
        +
      • +

        ExtendedTypeKindVisitor7

        +
        protected ExtendedTypeKindVisitor7(R defaultValue)
        +
        Constructor for concrete subclasses to call; uses the argument for the default value.
        +
        +
        Parameters:
        +
        defaultValue - the value to assign to SimpleTypeVisitor6.DEFAULT_VALUE
        +
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/IntersectionType.html b/apidocs/net/florianschoppmann/java/type/IntersectionType.html new file mode 100644 index 0000000..0313ccf --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/IntersectionType.html @@ -0,0 +1,284 @@ + + + + + + +IntersectionType (Java Types 1.0.1 API) + + + + + + + + + + + + +
+
net.florianschoppmann.java.type
+

Interface IntersectionType

+
+
+
+
    +
  • +
    +
    All Superinterfaces:
    +
    AnnotatedConstruct, TypeMirror
    +
    +
    +
    +
    public interface IntersectionType
    +extends TypeMirror, AnnotatedConstruct
    +
    Represents an intersection type, equivalent to javax.lang.model.type.IntersectionType in JDK 8. + +

    Implementations may implement both javax.lang.model.type.IntersectionType and this interface. At some time + in the future, when Java 7 compatibility is no longer required, this interface will be deprecated and eventually + removed in favor of javax.lang.model.type.IntersectionType.

    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getBounds

        +
        List<? extends TypeMirror> getBounds()
        +
        Return the bounds comprising this intersection type.
        +
        +
        Returns:
        +
        the bounds of this intersection types.
        +
        +
      • +
      + + + +
        +
      • +

        isIntersectionType

        +
        boolean isIntersectionType()
        +
        Returns whether this type mirror represents an intersection type. + +

        Since implementations may choose to implement multiple TypeMirror sub-interfaces at the same time, + this method exists so that an object can explicitly indicate whether it represents an intersection type.

        +
        +
        Returns:
        +
        whether this type mirror represents an intersection type
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/NonNullByDefault.html b/apidocs/net/florianschoppmann/java/type/NonNullByDefault.html new file mode 100644 index 0000000..ba36959 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/NonNullByDefault.html @@ -0,0 +1,172 @@ + + + + + + +NonNullByDefault (Java Types 1.0.1 API) + + + + + + + + + + + + +
+
net.florianschoppmann.java.type
+

Annotation Type NonNullByDefault

+
+
+
+ +
+
+ + + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/class-use/AbstractTypes.html b/apidocs/net/florianschoppmann/java/type/class-use/AbstractTypes.html new file mode 100644 index 0000000..b219d62 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/class-use/AbstractTypes.html @@ -0,0 +1,171 @@ + + + + + + +Uses of Class net.florianschoppmann.java.type.AbstractTypes (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Uses of Class
net.florianschoppmann.java.type.AbstractTypes

+
+
+ +
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/class-use/AnnotatedConstruct.html b/apidocs/net/florianschoppmann/java/type/class-use/AnnotatedConstruct.html new file mode 100644 index 0000000..1db23b5 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/class-use/AnnotatedConstruct.html @@ -0,0 +1,171 @@ + + + + + + +Uses of Interface net.florianschoppmann.java.type.AnnotatedConstruct (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Uses of Interface
net.florianschoppmann.java.type.AnnotatedConstruct

+
+
+ +
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/class-use/ExtendedTypeKindVisitor7.html b/apidocs/net/florianschoppmann/java/type/class-use/ExtendedTypeKindVisitor7.html new file mode 100644 index 0000000..757d67d --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/class-use/ExtendedTypeKindVisitor7.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class net.florianschoppmann.java.type.ExtendedTypeKindVisitor7 (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Uses of Class
net.florianschoppmann.java.type.ExtendedTypeKindVisitor7

+
+
No usage of net.florianschoppmann.java.type.ExtendedTypeKindVisitor7
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/class-use/IntersectionType.html b/apidocs/net/florianschoppmann/java/type/class-use/IntersectionType.html new file mode 100644 index 0000000..ff0ad95 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/class-use/IntersectionType.html @@ -0,0 +1,212 @@ + + + + + + +Uses of Interface net.florianschoppmann.java.type.IntersectionType (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Uses of Interface
net.florianschoppmann.java.type.IntersectionType

+
+
+ +
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/class-use/NonNullByDefault.html b/apidocs/net/florianschoppmann/java/type/class-use/NonNullByDefault.html new file mode 100644 index 0000000..796f3e6 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/class-use/NonNullByDefault.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class net.florianschoppmann.java.type.NonNullByDefault (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Uses of Class
net.florianschoppmann.java.type.NonNullByDefault

+
+
No usage of net.florianschoppmann.java.type.NonNullByDefault
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/package-frame.html b/apidocs/net/florianschoppmann/java/type/package-frame.html new file mode 100644 index 0000000..28ea3e7 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/package-frame.html @@ -0,0 +1,31 @@ + + + + + + +net.florianschoppmann.java.type (Java Types 1.0.1 API) + + + + + +

net.florianschoppmann.java.type

+
+

Interfaces

+ +

Classes

+ +

Annotation Types

+ +
+ + diff --git a/apidocs/net/florianschoppmann/java/type/package-summary.html b/apidocs/net/florianschoppmann/java/type/package-summary.html new file mode 100644 index 0000000..852bfc7 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/package-summary.html @@ -0,0 +1,209 @@ + + + + + + +net.florianschoppmann.java.type (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Package net.florianschoppmann.java.type

+
+
Provides an abstract skeletal implementation of class Types, together with classes and + interfaces that ensure source compatibility with both Java 7 and 8.
+
+

See: Description

+
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    AnnotatedConstruct +
    Represents a construct that can be annotated, equivalent to javax.lang.model.AnnotatedConstruct in JDK 8.
    +
    IntersectionType +
    Represents an intersection type, equivalent to javax.lang.model.type.IntersectionType in JDK 8.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    AbstractTypes +
    Abstract skeletal implementation of Types.
    +
    ExtendedTypeKindVisitor7<R,P> +
    A visitor of types that supports IntersectionType, but otherwise behaves as TypeKindVisitor7.
    +
    +
  • +
  • + + + + + + + + + + + + +
    Annotation Types Summary 
    Annotation TypeDescription
    NonNullByDefault +
    Annotation to define that all contained entities for which a null annotation is otherwise lacking should be + considered as Nonnull.
    +
    +
  • +
+ + + +

Package net.florianschoppmann.java.type Description

+
Provides an abstract skeletal implementation of class Types, together with classes and + interfaces that ensure source compatibility with both Java 7 and 8. + +

This package only provides the algorithms, relations, and properties documented in the Java Language Specification + (JLS), but no concrete Element and TypeMirror + implementations. Instead, this package supports all implementations that follow the contracts set forth in + Types and AbstractTypes.

+
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/package-tree.html b/apidocs/net/florianschoppmann/java/type/package-tree.html new file mode 100644 index 0000000..ec994d2 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/package-tree.html @@ -0,0 +1,177 @@ + + + + + + +net.florianschoppmann.java.type Class Hierarchy (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Hierarchy For Package net.florianschoppmann.java.type

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +

Annotation Type Hierarchy

+ +
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/net/florianschoppmann/java/type/package-use.html b/apidocs/net/florianschoppmann/java/type/package-use.html new file mode 100644 index 0000000..055fba0 --- /dev/null +++ b/apidocs/net/florianschoppmann/java/type/package-use.html @@ -0,0 +1,198 @@ + + + + + + +Uses of Package net.florianschoppmann.java.type (Java Types 1.0.1 API) + + + + + + + + + + + +
+

Uses of Package
net.florianschoppmann.java.type

+
+
+ +
+ + + + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/overview-frame.html b/apidocs/overview-frame.html new file mode 100644 index 0000000..c48bd47 --- /dev/null +++ b/apidocs/overview-frame.html @@ -0,0 +1,23 @@ + + + + + + +Overview List (Java Types 1.0.1 API) + + + + + + + +

 

+ + diff --git a/apidocs/overview-summary.html b/apidocs/overview-summary.html new file mode 100644 index 0000000..cd79178 --- /dev/null +++ b/apidocs/overview-summary.html @@ -0,0 +1,150 @@ + + + + + + +Overview (Java Types 1.0.1 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

Java Types 1.0.1 API

+
+
+ + + + + + + + + + + + + + + + +
Packages 
PackageDescription
net.florianschoppmann.java.reflect +
Provides a concrete implementation of AbstractTypes backed by the Java + Reflection API.
+
net.florianschoppmann.java.type +
Provides an abstract skeletal implementation of class Types, together with classes and + interfaces that ensure source compatibility with both Java 7 and 8.
+
+
+ +
+ + + + + + + +
+ + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/overview-tree.html b/apidocs/overview-tree.html new file mode 100644 index 0000000..7f8a827 --- /dev/null +++ b/apidocs/overview-tree.html @@ -0,0 +1,183 @@ + + + + + + +Class Hierarchy (Java Types 1.0.1 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +

Annotation Type Hierarchy

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2014–2015. All rights reserved.

+ + diff --git a/apidocs/package-list b/apidocs/package-list new file mode 100644 index 0000000..21c406a --- /dev/null +++ b/apidocs/package-list @@ -0,0 +1,2 @@ +net.florianschoppmann.java.reflect +net.florianschoppmann.java.type diff --git a/apidocs/script.js b/apidocs/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/apidocs/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/apidocs/stylesheet.css b/apidocs/stylesheet.css new file mode 100644 index 0000000..cebb4fd --- /dev/null +++ b/apidocs/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; + width:100%; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/checkstyle.html b/checkstyle.html new file mode 100644 index 0000000..aea94ff --- /dev/null +++ b/checkstyle.html @@ -0,0 +1,136 @@ + + + + + + Java Types - Checkstyle Results + + + + + + + + + +
+ +
+
+
+
+

Checkstyle Results

+

The following document contains the results of Checkstyle 6.1.1 with java-types/src/main/config/checkstyle.xml ruleset. rss feed

+
+

Summary

+ + + + + + + + + + +
Files Info Warnings Errors
26000
+
+

Files

+ + + + + +
File I W E
+
+

Rules

+ + + + + +
CategoryRuleViolationsSeverity
+
+

Details

+
+
+
+
+
+ + + diff --git a/checkstyle.rss b/checkstyle.rss new file mode 100644 index 0000000..ca82ad2 --- /dev/null +++ b/checkstyle.rss @@ -0,0 +1,418 @@ + + + + + Java Types - Checkstyle report + https://github.com/fschopp/java-types + Java Types - Checkstyle report + en-us + ©2014 - 2015 + + File: 26, + Errors: 0, + Warnings: 0, + Infos: 0 + + https://github.com/fschopp/java-types/checkstyle.html + +

Click here for the full Checkstyle report.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FilesIWE
+ net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/MirrorContext.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/TypeParameterElementImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/TypeVariableImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/WildcardTypeImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/PrimitiveTypeImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/DeclaredTypeImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/ArrayTypeImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/type/AnnotatedConstruct.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/type/package-info.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/ImmutableList.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/type/AbstractTypes.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/TypeElementImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/NullTypeImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/ReflectionTypes.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/package-info.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/ReflectionElement.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/IntersectionTypeImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/ElementImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/ReflectionParameterizable.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/NoTypeImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/type/IntersectionType.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/AnnotatedConstructImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/NameImpl.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/type/NonNullByDefault.java + + 0 + + 0 + + 0 +
+ net/florianschoppmann/java/reflect/ReflectionTypeMirror.java + + 0 + + 0 + + 0 +
+ +
+
+
+
+ diff --git a/css/maven-base.css b/css/maven-base.css new file mode 100644 index 0000000..53153e9 --- /dev/null +++ b/css/maven-base.css @@ -0,0 +1,155 @@ +body { + margin: 0px; + padding: 0px; +} +img { + border:none; +} +table { + padding:0px; + width: 100%; + margin-left: -2px; + margin-right: -2px; +} +acronym { + cursor: help; + border-bottom: 1px dotted #feb; +} +table.bodyTable th, table.bodyTable td { + padding: 2px 4px 2px 4px; + vertical-align: top; +} +div.clear{ + clear:both; + visibility: hidden; +} +div.clear hr{ + display: none; +} +#bannerLeft, #bannerRight { + font-size: xx-large; + font-weight: bold; +} +#bannerLeft img, #bannerRight img { + margin: 0px; +} +.xleft, #bannerLeft img { + float:left; +} +.xright, #bannerRight { + float:right; +} +#banner { + padding: 0px; +} +#banner img { + border: none; +} +#breadcrumbs { + padding: 3px 10px 3px 10px; +} +#leftColumn { + width: 170px; + float:left; + overflow: auto; +} +#bodyColumn { + margin-right: 1.5em; + margin-left: 197px; +} +#legend { + padding: 8px 0 8px 0; +} +#navcolumn { + padding: 8px 4px 0 8px; +} +#navcolumn h5 { + margin: 0; + padding: 0; + font-size: small; +} +#navcolumn ul { + margin: 0; + padding: 0; + font-size: small; +} +#navcolumn li { + list-style-type: none; + background-image: none; + background-repeat: no-repeat; + background-position: 0 0.4em; + padding-left: 16px; + list-style-position: outside; + line-height: 1.2em; + font-size: smaller; +} +#navcolumn li.expanded { + background-image: url(../images/expanded.gif); +} +#navcolumn li.collapsed { + background-image: url(../images/collapsed.gif); +} +#navcolumn li.none { + text-indent: -1em; + margin-left: 1em; +} +#poweredBy { + text-align: center; +} +#navcolumn img { + margin-top: 10px; + margin-bottom: 3px; +} +#poweredBy img { + display:block; + margin: 20px 0 20px 17px; +} +#search img { + margin: 0px; + display: block; +} +#search #q, #search #btnG { + border: 1px solid #999; + margin-bottom:10px; +} +#search form { + margin: 0px; +} +#lastPublished { + font-size: x-small; +} +.navSection { + margin-bottom: 2px; + padding: 8px; +} +.navSectionHead { + font-weight: bold; + font-size: x-small; +} +.section { + padding: 4px; +} +#footer { + padding: 3px 10px 3px 10px; + font-size: x-small; +} +#breadcrumbs { + font-size: x-small; + margin: 0pt; +} +.source { + padding: 12px; + margin: 1em 7px 1em 7px; +} +.source pre { + margin: 0px; + padding: 0px; +} +#navcolumn img.imageLink, .imageLink { + padding-left: 0px; + padding-bottom: 0px; + padding-top: 0px; + padding-right: 2px; + border: 0px; + margin: 0px; +} diff --git a/css/maven-theme.css b/css/maven-theme.css new file mode 100644 index 0000000..c982168 --- /dev/null +++ b/css/maven-theme.css @@ -0,0 +1,141 @@ +body { + padding: 0px 0px 10px 0px; +} +body, td, select, input, li{ + font-family: Verdana, Helvetica, Arial, sans-serif; + font-size: 13px; +} +code{ + font-family: Courier, monospace; + font-size: 13px; +} +a { + text-decoration: none; +} +a:link { + color:#36a; +} +a:visited { + color:#47a; +} +a:active, a:hover { + color:#69c; +} +#legend li.externalLink { + background: url(../images/external.png) left top no-repeat; + padding-left: 18px; +} +a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover { + background: url(../images/external.png) right center no-repeat; + padding-right: 18px; +} +#legend li.newWindow { + background: url(../images/newwindow.png) left top no-repeat; + padding-left: 18px; +} +a.newWindow, a.newWindow:link, a.newWindow:visited, a.newWindow:active, a.newWindow:hover { + background: url(../images/newwindow.png) right center no-repeat; + padding-right: 18px; +} +h2 { + padding: 4px 4px 4px 6px; + border: 1px solid #999; + color: #900; + background-color: #ddd; + font-weight:900; + font-size: x-large; +} +h3 { + padding: 4px 4px 4px 6px; + border: 1px solid #aaa; + color: #900; + background-color: #eee; + font-weight: normal; + font-size: large; +} +h4 { + padding: 4px 4px 4px 6px; + border: 1px solid #bbb; + color: #900; + background-color: #fff; + font-weight: normal; + font-size: large; +} +h5 { + padding: 4px 4px 4px 6px; + color: #900; + font-size: normal; +} +p { + line-height: 1.3em; + font-size: small; +} +#breadcrumbs { + border-top: 1px solid #aaa; + border-bottom: 1px solid #aaa; + background-color: #ccc; +} +#leftColumn { + margin: 10px 0 0 5px; + border: 1px solid #999; + background-color: #eee; +} +#navcolumn h5 { + font-size: smaller; + border-bottom: 1px solid #aaaaaa; + padding-top: 2px; + color: #000; +} + +table.bodyTable th { + color: white; + background-color: #bbb; + text-align: left; + font-weight: bold; +} + +table.bodyTable th, table.bodyTable td { + font-size: 1em; +} + +table.bodyTable tr.a { + background-color: #ddd; +} + +table.bodyTable tr.b { + background-color: #eee; +} + +.source { + border: 1px solid #999; +} +dl { + padding: 4px 4px 4px 6px; + border: 1px solid #aaa; + background-color: #ffc; +} +dt { + color: #900; +} +#organizationLogo img, #projectLogo img, #projectLogo span{ + margin: 8px; +} +#banner { + border-bottom: 1px solid #fff; +} +.errormark, .warningmark, .donemark, .infomark { + background: url(../images/icon_error_sml.gif) no-repeat; +} + +.warningmark { + background-image: url(../images/icon_warning_sml.gif); +} + +.donemark { + background-image: url(../images/icon_success_sml.gif); +} + +.infomark { + background-image: url(../images/icon_info_sml.gif); +} + diff --git a/css/print.css b/css/print.css new file mode 100644 index 0000000..f09d546 --- /dev/null +++ b/css/print.css @@ -0,0 +1,7 @@ +#banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks, #leftColumn, #navColumn { + display: none !important; +} +#bodyColumn, body.docs div.docs { + margin: 0 !important; + border: none !important +} diff --git a/css/site.css b/css/site.css new file mode 100644 index 0000000..055e7e2 --- /dev/null +++ b/css/site.css @@ -0,0 +1 @@ +/* You can override this file with your own styles */ \ No newline at end of file diff --git a/dependencies.html b/dependencies.html new file mode 100644 index 0000000..b7235cd --- /dev/null +++ b/dependencies.html @@ -0,0 +1,389 @@ + + + + + + Java Types - Project Dependencies + + + + + + + + + +
+ +
+
+
+ +
+

Project Dependencies

+
+

compile

+

The following is a list of compile dependencies for this project. These dependencies are required to compile and run the application:

+ + + + + + + + + + + + + + +
GroupIdArtifactIdVersionTypeLicenseOptional
com.google.code.findbugsjsr3053.0.0jarThe Apache Software License, Version 2.0Yes
+
+

test

+

The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:

+ + + + + + + + + + + + +
GroupIdArtifactIdVersionTypeLicense
org.testngtestng6.9.4jarApache License, Version 2.0
+
+

Project Transitive Dependencies

+

The following is a list of transitive dependencies for this project. Transitive dependencies are the dependencies of the project dependencies.

+
+

test

+

The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:

+ + + + + + + + + + + + + + + + + + +
GroupIdArtifactIdVersionTypeLicense
com.beustjcommander1.48jarThe Apache Software License, Version 2.0
org.beanshellbsh2.0b4jarGNU LESSER GENERAL PUBLIC LICENSE
+
+

Project Dependency Graph

+ +
+

Dependency Tree

+
    +
  • net.florianschoppmann.java:java-types:jar:1.0.1 Information +
+
+

Licenses

+

Revised BSD (3-Clause) License: Java Types

+

GNU LESSER GENERAL PUBLIC LICENSE: BeanShell

+

Apache License, Version 2.0: TestNG

+

The Apache Software License, Version 2.0: FindBugs-jsr305, JCommander

+
+

Dependency File Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FilenameSizeEntriesClassesPackagesJava VersionDebug Information
jcommander-1.48.jar63.50 kB675351.5Yes
bsh-2.0b4.jar281.69 kB23815881.2No
testng-6.9.4.jar865.81 kB596546261.6Yes
jsr305-3.0.0.jar33.03 kB723531.5Yes
TotalSizeEntriesClassesPackagesJava VersionDebug Information
41.24 MB973792421.63
compile: 1compile: 33.03 kBcompile: 72compile: 35compile: 3-compile: 1
test: 3test: 1.21 MBtest: 901test: 757test: 39-test: 2
+
+

Dependency Repository Locations

+ + + + + + + + + + + + + + + +
Repo IDURLReleaseSnapshot
centralhttp://repo.maven.apache.org/maven2YesNo
sonatype-nexus-snapshotshttp://oss.sonatype.org/content/repositories/snapshotsNoYes
+

Repository locations for each of the Dependencies.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Artifactcentralsonatype-nexus-snapshots
com.beust:jcommander:jar:1.48Found at http://repo.maven.apache.org/maven2-
org.beanshell:bsh:jar:2.0b4Found at http://repo.maven.apache.org/maven2-
org.testng:testng:jar:6.9.4Found at http://repo.maven.apache.org/maven2-
com.google.code.findbugs:jsr305:jar:3.0.0Found at http://repo.maven.apache.org/maven2-
Totalcentralsonatype-nexus-snapshots
4 (compile: 1, test: 3)40
+
+
+
+
+
+ + + diff --git a/dependency-convergence.html b/dependency-convergence.html new file mode 100644 index 0000000..a52d51f --- /dev/null +++ b/dependency-convergence.html @@ -0,0 +1,151 @@ + + + + + + Java Types - Dependency Convergence + + + + + + + + + +
+ +
+
+
+
+

Dependency Convergence

+ + + +
+ Legend: +
errorAt least one dependency has a differing version of the dependency or has SNAPSHOT dependencies.

+ + + + + + + + + + + + + + + + + + +
+ Statistics: +
Number of dependencies (NOD):4
Number of unique artifacts (NOA):4
Number of version-conflicting artifacts (NOC):0
Number of SNAPSHOT artifacts (NOS):0
Convergence (NOD/NOA):success 100 %
Ready for release (100 % convergence and no SNAPSHOTS):success Success
+
+

Dependencies used in this project

+
+
+
+
+
+ + + diff --git a/dependency-info.html b/dependency-info.html new file mode 100644 index 0000000..2fa6fb8 --- /dev/null +++ b/dependency-info.html @@ -0,0 +1,158 @@ + + + + + + Java Types - Dependency Information + + + + + + + + + +
+ +
+
+
+
+

Dependency Information

+
+

Apache Maven

+
+
<dependency>
+  <groupId>net.florianschoppmann.java</groupId>
+  <artifactId>java-types</artifactId>
+  <version>1.0.1</version>
+</dependency>
+
+

Apache Buildr

+
+
'net.florianschoppmann.java:java-types:jar:1.0.1'
+
+

Apache Ivy

+
+
<dependency org="net.florianschoppmann.java" name="java-types" rev="1.0.1">
+  <artifact name="java-types" type="jar" />
+</dependency>
+
+

Groovy Grape

+
+
@Grapes(
+@Grab(group='net.florianschoppmann.java', module='java-types', version='1.0.1')
+)
+
+

Grails

+
+
compile 'net.florianschoppmann.java:java-types:1.0.1'
+
+

Leiningen

+
+
[net.florianschoppmann.java/java-types "1.0.1"]
+
+

SBT

+
+
libraryDependencies += "net.florianschoppmann.java" % "java-types" % "1.0.1"
+
+
+
+
+
+ + + diff --git a/distribution-management.html b/distribution-management.html new file mode 100644 index 0000000..c5840af --- /dev/null +++ b/distribution-management.html @@ -0,0 +1,128 @@ + + + + + + Java Types - Project Distribution Management + + + + + + + + + +
+ +
+
+
+
+

Overview

+

The following is the distribution management information used by this project.

+ +
+

Site

+

scm:git:https://github.com/fschopp/java-types.git

+
+
+
+
+
+ + + diff --git a/findbugs.html b/findbugs.html new file mode 100644 index 0000000..7890cbf --- /dev/null +++ b/findbugs.html @@ -0,0 +1,127 @@ + + + + + + Java Types - FindBugs Bug Detector Report + + + + + + + + + +
+ +
+
+
+
+

FindBugs Bug Detector Report

+

The following document contains the results of FindBugs

+

FindBugs Version is 3.0.0

+

Threshold is medium

+

Effort is max

+
+

Summary

+ + + + + + + + + + +
ClassesBugsErrorsMissing Classes
34000
+
+

Files

+ + + +
ClassBugs
+
+
+
+
+
+ + + diff --git a/images/close.gif b/images/close.gif new file mode 100644 index 0000000..1c26bbc Binary files /dev/null and b/images/close.gif differ diff --git a/images/collapsed.gif b/images/collapsed.gif new file mode 100644 index 0000000..6e71084 Binary files /dev/null and b/images/collapsed.gif differ diff --git a/images/expanded.gif b/images/expanded.gif new file mode 100644 index 0000000..0fef3d8 Binary files /dev/null and b/images/expanded.gif differ diff --git a/images/external.png b/images/external.png new file mode 100644 index 0000000..3f999fc Binary files /dev/null and b/images/external.png differ diff --git a/images/icon_error_sml.gif b/images/icon_error_sml.gif new file mode 100644 index 0000000..61132ef Binary files /dev/null and b/images/icon_error_sml.gif differ diff --git a/images/icon_info_sml.gif b/images/icon_info_sml.gif new file mode 100644 index 0000000..c6cb9ad Binary files /dev/null and b/images/icon_info_sml.gif differ diff --git a/images/icon_success_sml.gif b/images/icon_success_sml.gif new file mode 100644 index 0000000..52e85a4 Binary files /dev/null and b/images/icon_success_sml.gif differ diff --git a/images/icon_warning_sml.gif b/images/icon_warning_sml.gif new file mode 100644 index 0000000..873bbb5 Binary files /dev/null and b/images/icon_warning_sml.gif differ diff --git a/images/logos/build-by-maven-black.png b/images/logos/build-by-maven-black.png new file mode 100644 index 0000000..919fd0f Binary files /dev/null and b/images/logos/build-by-maven-black.png differ diff --git a/images/logos/build-by-maven-white.png b/images/logos/build-by-maven-white.png new file mode 100644 index 0000000..7d44c9c Binary files /dev/null and b/images/logos/build-by-maven-white.png differ diff --git a/images/logos/maven-feather.png b/images/logos/maven-feather.png new file mode 100644 index 0000000..b5ada83 Binary files /dev/null and b/images/logos/maven-feather.png differ diff --git a/images/newwindow.png b/images/newwindow.png new file mode 100644 index 0000000..6287f72 Binary files /dev/null and b/images/newwindow.png differ diff --git a/images/rss.png b/images/rss.png new file mode 100644 index 0000000..f0796ac Binary files /dev/null and b/images/rss.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..9c8366e --- /dev/null +++ b/index.html @@ -0,0 +1,133 @@ + + + + + + Java Types - About + + + + + + + + + + +
+
+
+

About Java Types

+

Skeletal implementation of interface javax.lang.model.util.Types, plus concrete realization backed by core + Java Reflection API, akin to JEP 119. + + This module implements those methods in interface javax.lang.model.util.Types that pertain to the Java type + system, plus it provides a method for resolving formal type parameters to actual type arguments. These methods + have no equivalent in the Java Reflection API. + + The abstract skeletal implementation in this module is meant to be specialized for a particular javax.lang.model + implementation. The abstraction makes this module well-suited to be used in projects that contain + javax.lang.model as part of their domain model (for instance, implementations of alternative languages on top of + the JVM).

+
+
+
+
+
+ + + diff --git a/integration.html b/integration.html new file mode 100644 index 0000000..91613b5 --- /dev/null +++ b/integration.html @@ -0,0 +1,131 @@ + + + + + + Java Types - Continuous Integration + + + + + + + + + +
+ +
+
+
+
+

Overview

+

This project uses Travis CI.

+
+

Access

+

The following is a link to the continuous integration system used by the project:

+
+
+

Notifiers

+

No notifiers are defined. Please check back at a later date.

+
+
+
+
+
+ + + diff --git a/issue-tracking.html b/issue-tracking.html new file mode 100644 index 0000000..056329b --- /dev/null +++ b/issue-tracking.html @@ -0,0 +1,128 @@ + + + + + + Java Types - Issue Tracking + + + + + + + + + +
+ +
+
+
+
+

Overview

+

This project uses GitHub to manage its issues.

+
+

Issue Tracking

+

Issues, bugs, and feature requests should be submitted to the following issue tracking system for this project.

+
+
+
+
+
+
+ + + diff --git a/jacoco/.resources/branchfc.gif b/jacoco/.resources/branchfc.gif new file mode 100644 index 0000000..989b46d Binary files /dev/null and b/jacoco/.resources/branchfc.gif differ diff --git a/jacoco/.resources/branchnc.gif b/jacoco/.resources/branchnc.gif new file mode 100644 index 0000000..1933e07 Binary files /dev/null and b/jacoco/.resources/branchnc.gif differ diff --git a/jacoco/.resources/branchpc.gif b/jacoco/.resources/branchpc.gif new file mode 100644 index 0000000..cbf711b Binary files /dev/null and b/jacoco/.resources/branchpc.gif differ diff --git a/jacoco/.resources/bundle.gif b/jacoco/.resources/bundle.gif new file mode 100644 index 0000000..fca9c53 Binary files /dev/null and b/jacoco/.resources/bundle.gif differ diff --git a/jacoco/.resources/class.gif b/jacoco/.resources/class.gif new file mode 100644 index 0000000..eb348fb Binary files /dev/null and b/jacoco/.resources/class.gif differ diff --git a/jacoco/.resources/down.gif b/jacoco/.resources/down.gif new file mode 100644 index 0000000..440a14d Binary files /dev/null and b/jacoco/.resources/down.gif differ diff --git a/jacoco/.resources/greenbar.gif b/jacoco/.resources/greenbar.gif new file mode 100644 index 0000000..0ba6567 Binary files /dev/null and b/jacoco/.resources/greenbar.gif differ diff --git a/jacoco/.resources/group.gif b/jacoco/.resources/group.gif new file mode 100644 index 0000000..a4ea580 Binary files /dev/null and b/jacoco/.resources/group.gif differ diff --git a/jacoco/.resources/method.gif b/jacoco/.resources/method.gif new file mode 100644 index 0000000..7d24707 Binary files /dev/null and b/jacoco/.resources/method.gif differ diff --git a/jacoco/.resources/package.gif b/jacoco/.resources/package.gif new file mode 100644 index 0000000..131c28d Binary files /dev/null and b/jacoco/.resources/package.gif differ diff --git a/jacoco/.resources/prettify.css b/jacoco/.resources/prettify.css new file mode 100644 index 0000000..be5166e --- /dev/null +++ b/jacoco/.resources/prettify.css @@ -0,0 +1,13 @@ +/* Pretty printing styles. Used with prettify.js. */ + +.str { color: #2A00FF; } +.kwd { color: #7F0055; font-weight:bold; } +.com { color: #3F5FBF; } +.typ { color: #606; } +.lit { color: #066; } +.pun { color: #660; } +.pln { color: #000; } +.tag { color: #008; } +.atn { color: #606; } +.atv { color: #080; } +.dec { color: #606; } diff --git a/jacoco/.resources/prettify.js b/jacoco/.resources/prettify.js new file mode 100644 index 0000000..ab27882 --- /dev/null +++ b/jacoco/.resources/prettify.js @@ -0,0 +1,1510 @@ +// Copyright (C) 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * some functions for browser-side pretty printing of code contained in html. + *

+ * + * For a fairly comprehensive set of languages see the + * README + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + *

+ * Usage:

    + *
  1. include this source file in an html page via + * {@code } + *
  2. define style rules. See the example page for examples. + *
  3. mark the {@code
    } and {@code } tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code } tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +/** the number of characters between tab columns */
    +window['PR_TAB_WIDTH'] = 8;
    +
    +/** Walks the DOM returning a properly escaped version of innerHTML.
    +  * @param {Node} node
    +  * @param {Array.<string>} out output buffer that receives chunks of HTML.
    +  */
    +window['PR_normalizedHtml']
    +
    +/** Contains functions for creating and registering new language handlers.
    +  * @type {Object}
    +  */
    +  = window['PR']
    +
    +/** Pretty print a chunk of code.
    +  *
    +  * @param {string} sourceCodeHtml code as html
    +  * @return {string} code as html, but prettier
    +  */
    +  = window['prettyPrintOne']
    +/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +  * {@code class=prettyprint} and prettify them.
    +  * @param {Function?} opt_whenDone if specified, called when the last entry
    +  *     has been finished.
    +  */
    +  = window['prettyPrint'] = void 0;
    +
    +/** browser detection. @extern @returns false if not IE, otherwise the major version. */
    +window['_pr_isIE6'] = function () {
    +  var ieVersion = navigator && navigator.userAgent &&
    +      navigator.userAgent.match(/\bMSIE ([678])\./);
    +  ieVersion = ieVersion ? +ieVersion[1] : false;
    +  window['_pr_isIE6'] = function () { return ieVersion; };
    +  return ieVersion;
    +};
    +
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  var FLOW_CONTROL_KEYWORDS =
    +      "break continue do else for if return while ";
    +  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    +      "double enum extern float goto int long register short signed sizeof " +
    +      "static struct switch typedef union unsigned void volatile ";
    +  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    +      "new operator private protected public this throw true try typeof ";
    +  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    +      "concept concept_map const_cast constexpr decltype " +
    +      "dynamic_cast explicit export friend inline late_check " +
    +      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    +      "template typeid typename using virtual wchar_t where ";
    +  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    +      "abstract boolean byte extends final finally implements import " +
    +      "instanceof null native package strictfp super synchronized throws " +
    +      "transient ";
    +  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    +      "as base by checked decimal delegate descending event " +
    +      "fixed foreach from group implicit in interface internal into is lock " +
    +      "object out override orderby params partial readonly ref sbyte sealed " +
    +      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    +  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    +      "debugger eval export function get null set undefined var with " +
    +      "Infinity NaN ";
    +  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    +      "goto if import last local my next no our print package redo require " +
    +      "sub undef unless until use wantarray while BEGIN END ";
    +  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    +      "elif except exec finally from global import in is lambda " +
    +      "nonlocal not or pass print raise try with yield " +
    +      "False True None ";
    +  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    +      " defined elsif end ensure false in module next nil not or redo rescue " +
    +      "retry self super then true undef unless until when yield BEGIN END ";
    +  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    +      "function in local set then until ";
    +  var ALL_KEYWORDS = (
    +      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    +      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    +
    +  // token style names.  correspond to css classes
    +  /** token style for a string literal */
    +  var PR_STRING = 'str';
    +  /** token style for a keyword */
    +  var PR_KEYWORD = 'kwd';
    +  /** token style for a comment */
    +  var PR_COMMENT = 'com';
    +  /** token style for a type */
    +  var PR_TYPE = 'typ';
    +  /** token style for a literal value.  e.g. 1, null, true. */
    +  var PR_LITERAL = 'lit';
    +  /** token style for a punctuation string. */
    +  var PR_PUNCTUATION = 'pun';
    +  /** token style for a punctuation string. */
    +  var PR_PLAIN = 'pln';
    +
    +  /** token style for an sgml tag. */
    +  var PR_TAG = 'tag';
    +  /** token style for a markup declaration such as a DOCTYPE. */
    +  var PR_DECLARATION = 'dec';
    +  /** token style for embedded source. */
    +  var PR_SOURCE = 'src';
    +  /** token style for an sgml attribute name. */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /** token style for an sgml attribute value. */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +  /** A set of tokens that can precede a regular expression literal in
    +    * javascript.
    +    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    +    * list, but I've removed ones that might be problematic when seen in
    +    * languages that don't support regular expression literals.
    +    *
    +    * <p>Specifically, I've removed any keywords that can't precede a regexp
    +    * literal in a syntactically legal javascript program, and I've removed the
    +    * "in" keyword since it's not a keyword in many languages, and might be used
    +    * as a count of inches.
    +    *
    +    * <p>The link a above does not accurately describe EcmaScript rules since
    +    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    +    * very well in practice.
    +    *
    +    * @private
    +    */
    +  var REGEXP_PRECEDER_PATTERN = function () {
    +      var preceders = [
    +          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    +          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    +          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    +          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    +          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    +          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    +          "||=", "~" /* handles =~ and !~ */,
    +          "break", "case", "continue", "delete",
    +          "do", "else", "finally", "instanceof",
    +          "return", "throw", "try", "typeof"
    +          ];
    +      var pattern = '(?:^^|[+-]';
    +      for (var i = 0; i < preceders.length; ++i) {
    +        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    +      }
    +      pattern += ')\\s*';  // matches at end, and matches empty string
    +      return pattern;
    +      // CAVEAT: this does not properly handle the case where a regular
    +      // expression immediately follows another since a regular expression may
    +      // have flags for case-sensitivity and the like.  Having regexp tokens
    +      // adjacent is not valid in any language I'm aware of, so I'm punting.
    +      // TODO: maybe style special characters inside a regexp as punctuation.
    +    }();
    +
    +  // Define regexps here so that the interpreter doesn't have to create an
    +  // object each time the function containing them is called.
    +  // The language spec requires a new object created even if you don't access
    +  // the $1 members.
    +  var pr_amp = /&/g;
    +  var pr_lt = /</g;
    +  var pr_gt = />/g;
    +  var pr_quot = /\"/g;
    +  /** like textToHtml but escapes double quotes to be attribute safe. */
    +  function attribToHtml(str) {
    +    return str.replace(pr_amp, '&amp;')
    +        .replace(pr_lt, '&lt;')
    +        .replace(pr_gt, '&gt;')
    +        .replace(pr_quot, '&quot;');
    +  }
    +
    +  /** escapest html special characters to html. */
    +  function textToHtml(str) {
    +    return str.replace(pr_amp, '&amp;')
    +        .replace(pr_lt, '&lt;')
    +        .replace(pr_gt, '&gt;');
    +  }
    +
    +
    +  var pr_ltEnt = /&lt;/g;
    +  var pr_gtEnt = /&gt;/g;
    +  var pr_aposEnt = /&apos;/g;
    +  var pr_quotEnt = /&quot;/g;
    +  var pr_ampEnt = /&amp;/g;
    +  var pr_nbspEnt = /&nbsp;/g;
    +  /** unescapes html to plain text. */
    +  function htmlToText(html) {
    +    var pos = html.indexOf('&');
    +    if (pos < 0) { return html; }
    +    // Handle numeric entities specially.  We can't use functional substitution
    +    // since that doesn't work in older versions of Safari.
    +    // These should be rare since most browsers convert them to normal chars.
    +    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
    +      var end = html.indexOf(';', pos);
    +      if (end >= 0) {
    +        var num = html.substring(pos + 3, end);
    +        var radix = 10;
    +        if (num && num.charAt(0) === 'x') {
    +          num = num.substring(1);
    +          radix = 16;
    +        }
    +        var codePoint = parseInt(num, radix);
    +        if (!isNaN(codePoint)) {
    +          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
    +                  html.substring(end + 1));
    +        }
    +      }
    +    }
    +
    +    return html.replace(pr_ltEnt, '<')
    +        .replace(pr_gtEnt, '>')
    +        .replace(pr_aposEnt, "'")
    +        .replace(pr_quotEnt, '"')
    +        .replace(pr_nbspEnt, ' ')
    +        .replace(pr_ampEnt, '&');
    +  }
    +
    +  /** is the given node's innerHTML normally unescaped? */
    +  function isRawContent(node) {
    +    return 'XMP' === node.tagName;
    +  }
    +
    +  var newlineRe = /[\r\n]/g;
    +  /**
    +   * Are newlines and adjacent spaces significant in the given node's innerHTML?
    +   */
    +  function isPreformatted(node, content) {
    +    // PRE means preformatted, and is a very common case, so don't create
    +    // unnecessary computed style objects.
    +    if ('PRE' === node.tagName) { return true; }
    +    if (!newlineRe.test(content)) { return true; }  // Don't care
    +    var whitespace = '';
    +    // For disconnected nodes, IE has no currentStyle.
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      // Firefox makes a best guess if node is disconnected whereas Safari
    +      // returns the empty string.
    +      whitespace = window.getComputedStyle(node, null).whiteSpace;
    +    }
    +    return !whitespace || whitespace === 'pre';
    +  }
    +
    +  function normalizedHtml(node, out, opt_sortAttrs) {
    +    switch (node.nodeType) {
    +      case 1:  // an element
    +        var name = node.tagName.toLowerCase();
    +
    +        out.push('<', name);
    +        var attrs = node.attributes;
    +        var n = attrs.length;
    +        if (n) {
    +          if (opt_sortAttrs) {
    +            var sortedAttrs = [];
    +            for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
    +            sortedAttrs.sort(function (a, b) {
    +                return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
    +              });
    +            attrs = sortedAttrs;
    +          }
    +          for (var i = 0; i < n; ++i) {
    +            var attr = attrs[i];
    +            if (!attr.specified) { continue; }
    +            out.push(' ', attr.name.toLowerCase(),
    +                     '="', attribToHtml(attr.value), '"');
    +          }
    +        }
    +        out.push('>');
    +        for (var child = node.firstChild; child; child = child.nextSibling) {
    +          normalizedHtml(child, out, opt_sortAttrs);
    +        }
    +        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
    +          out.push('<\/', name, '>');
    +        }
    +        break;
    +      case 3: case 4: // text
    +        out.push(textToHtml(node.nodeValue));
    +        break;
    +    }
    +  }
    +
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union o the sets o strings matched d by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +
    +    function decodeEscape(charsetPart) {
    +      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    +      switch (charsetPart.charAt(1)) {
    +        case 'b': return 8;
    +        case 't': return 9;
    +        case 'n': return 0xa;
    +        case 'v': return 0xb;
    +        case 'f': return 0xc;
    +        case 'r': return 0xd;
    +        case 'u': case 'x':
    +          return parseInt(charsetPart.substring(2), 16)
    +              || charsetPart.charCodeAt(1);
    +        case '0': case '1': case '2': case '3': case '4':
    +        case '5': case '6': case '7':
    +          return parseInt(charsetPart.substring(1), 8);
    +        default: return charsetPart.charCodeAt(1);
    +      }
    +    }
    +
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        switch (p) {
    +          case '\\B': case '\\b':
    +          case '\\D': case '\\d':
    +          case '\\S': case '\\s':
    +          case '\\W': case '\\w':
    +            groups.push(p);
    +            continue;
    +        }
    +        var start = decodeEscape(p);
    +        var end;
    +        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +          end = decodeEscape(charsetParts[i + 2]);
    +          i += 2;
    +        } else {
    +          end = start;
    +        }
    +        ranges.push([start, end]);
    +        // If the range might intersect letters, then expand it.
    +        if (!(end < 65 || start > 122)) {
    +          if (!(end < 65 || start > 90)) {
    +            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +          }
    +          if (!(end < 97 || start > 122)) {
    +            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +          }
    +        }
    +      }
    +
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +
    +      // Expand letters to groupts to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +
    +      return parts.join('');
    +    }
    +
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +  var PR_innerHtmlWorks = null;
    +  function getInnerHtml(node) {
    +    // inner html is hopelessly broken in Safari 2.0.4 when the content is
    +    // an html description of well formed XML and the containing tag is a PRE
    +    // tag, so we detect that case and emulate innerHTML.
    +    if (null === PR_innerHtmlWorks) {
    +      var testNode = document.createElement('PRE');
    +      testNode.appendChild(
    +          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
    +      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
    +    }
    +
    +    if (PR_innerHtmlWorks) {
    +      var content = node.innerHTML;
    +      // XMP tags contain unescaped entities so require special handling.
    +      if (isRawContent(node)) {
    +        content = textToHtml(content);
    +      } else if (!isPreformatted(node, content)) {
    +        content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
    +            .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
    +      }
    +      return content;
    +    }
    +
    +    var out = [];
    +    for (var child = node.firstChild; child; child = child.nextSibling) {
    +      normalizedHtml(child, out);
    +    }
    +    return out.join('');
    +  }
    +
    +  /** returns a function that expand tabs to spaces.  This function can be fed
    +    * successive chunks of text, and will maintain its own internal state to
    +    * keep track of how tabs are expanded.
    +    * @return {function (string) : string} a function that takes
    +    *   plain text and return the text with tabs expanded.
    +    * @private
    +    */
    +  function makeTabExpander(tabWidth) {
    +    var SPACES = '                ';
    +    var charInLine = 0;
    +
    +    return function (plainText) {
    +      // walk over each character looking for tabs and newlines.
    +      // On tabs, expand them.  On newlines, reset charInLine.
    +      // Otherwise increment charInLine
    +      var out = null;
    +      var pos = 0;
    +      for (var i = 0, n = plainText.length; i < n; ++i) {
    +        var ch = plainText.charAt(i);
    +
    +        switch (ch) {
    +          case '\t':
    +            if (!out) { out = []; }
    +            out.push(plainText.substring(pos, i));
    +            // calculate how much space we need in front of this part
    +            // nSpaces is the amount of padding -- the number of spaces needed
    +            // to move us to the next column, where columns occur at factors of
    +            // tabWidth.
    +            var nSpaces = tabWidth - (charInLine % tabWidth);
    +            charInLine += nSpaces;
    +            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
    +              out.push(SPACES.substring(0, nSpaces));
    +            }
    +            pos = i + 1;
    +            break;
    +          case '\n':
    +            charInLine = 0;
    +            break;
    +          default:
    +            ++charInLine;
    +        }
    +      }
    +      if (!out) { return plainText; }
    +      out.push(plainText.substring(pos));
    +      return out.join('');
    +    };
    +  }
    +
    +  var pr_chunkPattern = new RegExp(
    +      '[^<]+'  // A run of characters other than '<'
    +      + '|<\!--[\\s\\S]*?--\>'  // an HTML comment
    +      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>'  // a CDATA section
    +      // a probable tag that should not be highlighted
    +      + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
    +      + '|<',  // A '<' that does not begin a larger chunk
    +      'g');
    +  var pr_commentPrefix = /^<\!--/;
    +  var pr_cdataPrefix = /^<!\[CDATA\[/;
    +  var pr_brPrefix = /^<br\b/i;
    +  var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
    +
    +  /** split markup into chunks of html tags (style null) and
    +    * plain text (style {@link #PR_PLAIN}), converting tags which are
    +    * significant for tokenization (<br>) into their textual equivalent.
    +    *
    +    * @param {string} s html where whitespace is considered significant.
    +    * @return {Object} source code and extracted tags.
    +    * @private
    +    */
    +  function extractTags(s) {
    +    // since the pattern has the 'g' modifier and defines no capturing groups,
    +    // this will return a list of all chunks which we then classify and wrap as
    +    // PR_Tokens
    +    var matches = s.match(pr_chunkPattern);
    +    var sourceBuf = [];
    +    var sourceBufLen = 0;
    +    var extractedTags = [];
    +    if (matches) {
    +      for (var i = 0, n = matches.length; i < n; ++i) {
    +        var match = matches[i];
    +        if (match.length > 1 && match.charAt(0) === '<') {
    +          if (pr_commentPrefix.test(match)) { continue; }
    +          if (pr_cdataPrefix.test(match)) {
    +            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
    +            sourceBuf.push(match.substring(9, match.length - 3));
    +            sourceBufLen += match.length - 12;
    +          } else if (pr_brPrefix.test(match)) {
    +            // <br> tags are lexically significant so convert them to text.
    +            // This is undone later.
    +            sourceBuf.push('\n');
    +            ++sourceBufLen;
    +          } else {
    +            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
    +              // A <span class="nocode"> will start a section that should be
    +              // ignored.  Continue walking the list until we see a matching end
    +              // tag.
    +              var name = match.match(pr_tagNameRe)[2];
    +              var depth = 1;
    +              var j;
    +              end_tag_loop:
    +              for (j = i + 1; j < n; ++j) {
    +                var name2 = matches[j].match(pr_tagNameRe);
    +                if (name2 && name2[2] === name) {
    +                  if (name2[1] === '/') {
    +                    if (--depth === 0) { break end_tag_loop; }
    +                  } else {
    +                    ++depth;
    +                  }
    +                }
    +              }
    +              if (j < n) {
    +                extractedTags.push(
    +                    sourceBufLen, matches.slice(i, j + 1).join(''));
    +                i = j;
    +              } else {  // Ignore unclosed sections.
    +                extractedTags.push(sourceBufLen, match);
    +              }
    +            } else {
    +              extractedTags.push(sourceBufLen, match);
    +            }
    +          }
    +        } else {
    +          var literalText = htmlToText(match);
    +          sourceBuf.push(literalText);
    +          sourceBufLen += literalText.length;
    +        }
    +      }
    +    }
    +    return { source: sourceBuf.join(''), tags: extractedTags };
    +  }
    +
    +  /** True if the given tag contains a class attribute with the nocode class. */
    +  function isNoCodeTag(tag) {
    +    return !!tag
    +        // First canonicalize the representation of attributes
    +        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
    +                 ' $1="$2$3$4"')
    +        // Then look for the attribute we want.
    +        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
    +  }
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      source: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +    var notWs = /\S/;
    +
    +    /**
    +     * Lexes job.source and produces an output array job.decorations of style
    +     * classes preceded by the position at which they start in job.source in
    +     * order.
    +     *
    +     * @param {Object} job an object like {@code
    +     *    source: {string} sourceText plain text,
    +     *    basePos: {int} position of job.source in the larger chunk of
    +     *        sourceCode.
    +     * }
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.source, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    if (options['hashComments']) {
    +      if (options['cStyleComments']) {
    +        // Stop C preprocessor declarations at an unclosed open comment
    +        shortcutStylePatterns.push(
    +            [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +             null, '#']);
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /** Breaks {@code job.source} around style boundaries in
    +    * {@code job.decorations} while re-interleaving {@code job.extractedTags},
    +    * and leaves the result in {@code job.prettyPrintedHtml}.
    +    * @param {Object} job like {
    +    *    source: {string} source as plain text,
    +    *    extractedTags: {Array.<number|string>} extractedTags chunks of raw
    +    *                   html preceded by their position in {@code job.source}
    +    *                   in order
    +    *    decorations: {Array.<number|string} an array of style classes preceded
    +    *                 by the position at which they start in job.source in order
    +    * }
    +    * @private
    +    */
    +  function recombineTagsAndDecorations(job) {
    +    var sourceText = job.source;
    +    var extractedTags = job.extractedTags;
    +    var decorations = job.decorations;
    +
    +    var html = [];
    +    // index past the last char in sourceText written to html
    +    var outputIdx = 0;
    +
    +    var openDecoration = null;
    +    var currentDecoration = null;
    +    var tagPos = 0;  // index into extractedTags
    +    var decPos = 0;  // index into decorations
    +    var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
    +
    +    var adjacentSpaceRe = /([\r\n ]) /g;
    +    var startOrSpaceRe = /(^| ) /gm;
    +    var newlineRe = /\r\n?|\n/g;
    +    var trailingSpaceRe = /[ \r\n]$/;
    +    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
    +
    +    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
    +    var isIE678 = window['_pr_isIE6']();
    +    var lineBreakHtml = (
    +        isIE678
    +        ? (job.sourceNode.tagName === 'PRE'
    +           // Use line feeds instead of <br>s so that copying and pasting works
    +           // on IE.
    +           // Doing this on other browsers breaks lots of stuff since \r\n is
    +           // treated as two newlines on Firefox.
    +           ? (isIE678 === 6 ? '&#160;\r\n' :
    +              isIE678 === 7 ? '&#160;<br>\r' : '&#160;\r')
    +           // IE collapses multiple adjacent <br>s into 1 line break.
    +           // Prefix every newline with '&#160;' to prevent such behavior.
    +           // &nbsp; is the same as &#160; but works in XML as well as HTML.
    +           : '&#160;<br />')
    +        : '<br />');
    +
    +    // Look for a class like linenums or linenums:<n> where <n> is the 1-indexed
    +    // number of the first line.
    +    var numberLines = job.sourceNode.className.match(/\blinenums\b(?::(\d+))?/);
    +    var lineBreaker;
    +    if (numberLines) {
    +      var lineBreaks = [];
    +      for (var i = 0; i < 10; ++i) {
    +        lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
    +      }
    +      var lineNum = numberLines[1] && numberLines[1].length 
    +          ? numberLines[1] - 1 : 0;  // Lines are 1-indexed
    +      html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
    +      if (lineNum) {
    +        html.push(' value="', lineNum + 1, '"');
    +      }
    +      html.push('>');
    +      lineBreaker = function () {
    +        var lb = lineBreaks[++lineNum % 10];
    +        // If a decoration is open, we need to close it before closing a list-item
    +        // and reopen it on the other side of the list item.
    +        return openDecoration
    +            ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
    +      };
    +    } else {
    +      lineBreaker = lineBreakHtml;
    +    }
    +
    +    // A helper function that is responsible for opening sections of decoration
    +    // and outputing properly escaped chunks of source
    +    function emitTextUpTo(sourceIdx) {
    +      if (sourceIdx > outputIdx) {
    +        if (openDecoration && openDecoration !== currentDecoration) {
    +          // Close the current decoration
    +          html.push('</span>');
    +          openDecoration = null;
    +        }
    +        if (!openDecoration && currentDecoration) {
    +          openDecoration = currentDecoration;
    +          html.push('<span class="', openDecoration, '">');
    +        }
    +        // This interacts badly with some wikis which introduces paragraph tags
    +        // into pre blocks for some strange reason.
    +        // It's necessary for IE though which seems to lose the preformattedness
    +        // of <pre> tags when their innerHTML is assigned.
    +        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
    +        // and it serves to undo the conversion of <br>s to newlines done in
    +        // chunkify.
    +        var htmlChunk = textToHtml(
    +            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
    +            .replace(lastWasSpace
    +                     ? startOrSpaceRe
    +                     : adjacentSpaceRe, '$1&#160;');
    +        // Keep track of whether we need to escape space at the beginning of the
    +        // next chunk.
    +        lastWasSpace = trailingSpaceRe.test(htmlChunk);
    +        html.push(htmlChunk.replace(newlineRe, lineBreaker));
    +        outputIdx = sourceIdx;
    +      }
    +    }
    +
    +    while (true) {
    +      // Determine if we're going to consume a tag this time around.  Otherwise
    +      // we consume a decoration or exit.
    +      var outputTag;
    +      if (tagPos < extractedTags.length) {
    +        if (decPos < decorations.length) {
    +          // Pick one giving preference to extractedTags since we shouldn't open
    +          // a new style that we're going to have to immediately close in order
    +          // to output a tag.
    +          outputTag = extractedTags[tagPos] <= decorations[decPos];
    +        } else {
    +          outputTag = true;
    +        }
    +      } else {
    +        outputTag = false;
    +      }
    +      // Consume either a decoration or a tag or exit.
    +      if (outputTag) {
    +        emitTextUpTo(extractedTags[tagPos]);
    +        if (openDecoration) {
    +          // Close the current decoration
    +          html.push('</span>');
    +          openDecoration = null;
    +        }
    +        html.push(extractedTags[tagPos + 1]);
    +        tagPos += 2;
    +      } else if (decPos < decorations.length) {
    +        emitTextUpTo(decorations[decPos]);
    +        currentDecoration = decorations[decPos + 1];
    +        decPos += 2;
    +      } else {
    +        break;
    +      }
    +    }
    +    emitTextUpTo(sourceText.length);
    +    if (openDecoration) {
    +      html.push('</span>');
    +    }
    +    if (numberLines) { html.push('</li></ol>'); }
    +    job.prettyPrintedHtml = html.join('');
    +  }
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        source: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.source in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if ('console' in window) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null true false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var sourceCodeHtml = job.sourceCodeHtml;
    +    var opt_langExtension = job.langExtension;
    +
    +    // Prepopulate output in case processing fails with an exception.
    +    job.prettyPrintedHtml = sourceCodeHtml;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndExtractedTags.source;
    +      job.source = source;
    +      job.basePos = 0;
    +
    +      /** Even entries are positions in source in ascending order.  Odd entries
    +        * are tags that were extracted at that position.
    +        * @type {Array.<number|string>}
    +        */
    +      job.extractedTags = sourceAndExtractedTags.tags;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +      // Integrate the decorations and tags back into the source code to produce
    +      // a decorated html string which is left in job.prettyPrintedHtml.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
    +    var job = {
    +      sourceCodeHtml: sourceCodeHtml,
    +      langExtension: opt_langExtension
    +    };
    +    applyDecorator(job);
    +    return job.prettyPrintedHtml;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return (new Date).getTime(); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock.now() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock.now() < endTime; k++) {
    +        var cs = elements[k];
    +        // [JACOCO] 'prettyprint' -> 'source' 
    +        if (cs.className && cs.className.indexOf('source') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR_registerLangHandler.
    +          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    +          if (langExtension) { langExtension = langExtension[1]; }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                // [JACOCO] 'prettyprint' -> 'source' 
    +                p.className && p.className.indexOf('source') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // fetch the content as a snippet of properly escaped HTML.
    +            // Firefox adds newlines at the end.
    +            var content = getInnerHtml(cs);
    +            content = content.replace(/(?:\r\n?|\n)$/, '');
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              sourceCodeHtml: content,
    +              langExtension: langExtension,
    +              sourceNode: cs
    +            };
    +            applyDecorator(prettyPrintingJob);
    +            replaceWithPrettyPrintedHtml();
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    function replaceWithPrettyPrintedHtml() {
    +      var newContent = prettyPrintingJob.prettyPrintedHtml;
    +      if (!newContent) { return; }
    +      var cs = prettyPrintingJob.sourceNode;
    +
    +      // push the prettified html back into the tag.
    +      if (!isRawContent(cs)) {
    +        // just replace the old html with the new
    +        cs.innerHTML = newContent;
    +      } else {
    +        // we need to change the tag to a <pre> since <xmp>s do not allow
    +        // embedded tags such as the span tags used to attach styles to
    +        // sections of source code.
    +        var pre = document.createElement('PRE');
    +        for (var i = 0; i < cs.attributes.length; ++i) {
    +          var a = cs.attributes[i];
    +          if (a.specified) {
    +            var aname = a.name.toLowerCase();
    +            if (aname === 'class') {
    +              pre.className = a.value;  // For IE 6
    +            } else {
    +              pre.setAttribute(a.name, a.value);
    +            }
    +          }
    +        }
    +        pre.innerHTML = newContent;
    +
    +        // remove the old
    +        cs.parentNode.replaceChild(pre, cs);
    +        cs = pre;
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +  window['PR_normalizedHtml'] = normalizedHtml;
    +  window['prettyPrintOne'] = prettyPrintOne;
    +  window['prettyPrint'] = prettyPrint;
    +  window['PR'] = {
    +        'combinePrefixPatterns': combinePrefixPatterns,
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff --git a/jacoco/.resources/redbar.gif b/jacoco/.resources/redbar.gif
    new file mode 100644
    index 0000000..c2f7146
    Binary files /dev/null and b/jacoco/.resources/redbar.gif differ
    diff --git a/jacoco/.resources/report.css b/jacoco/.resources/report.css
    new file mode 100644
    index 0000000..08eba79
    --- /dev/null
    +++ b/jacoco/.resources/report.css
    @@ -0,0 +1,243 @@
    +body, td {
    +  font-family:sans-serif;
    +  font-size:10pt;
    +}
    +
    +h1 {
    +  font-weight:bold;
    +  font-size:18pt;
    +}
    +
    +.breadcrumb {
    +  border:#d6d3ce 1px solid;
    +  padding:2px 4px 2px 4px;
    +}
    +
    +.breadcrumb .info {
    +  float:right;
    +}
    +
    +.breadcrumb .info a {
    +  margin-left:8px;
    +}
    +
    +.el_report {
    +  padding-left:18px;
    +  background-image:url(report.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_group {
    +  padding-left:18px;
    +  background-image:url(group.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_bundle {
    +  padding-left:18px;
    +  background-image:url(bundle.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_package {
    +  padding-left:18px;
    +  background-image:url(package.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_class {
    +  padding-left:18px;
    +  background-image:url(class.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_source {
    +  padding-left:18px;
    +  background-image:url(source.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_method {
    +  padding-left:18px;
    +  background-image:url(method.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_session {
    +  padding-left:18px;
    +  background-image:url(session.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +pre.source {
    +  border:#d6d3ce 1px solid;
    +  font-family:monospace;
    +}
    +
    +pre.source ol {
    +  margin-bottom: 0px;
    +  margin-top: 0px;
    +}
    +
    +pre.source li {
    +  border-left: 1px solid #D6D3CE;
    +  color: #A0A0A0;
    +  padding-left: 0px;
    +}
    +
    +pre.source span.fc {
    +  background-color:#ccffcc;
    +}
    +
    +pre.source span.nc {
    +  background-color:#ffaaaa;
    +}
    +
    +pre.source span.pc {
    +  background-color:#ffffcc;
    +}
    +
    +pre.source span.bfc {
    +  background-image: url(branchfc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bfc:hover {
    +  background-color:#80ff80;
    +}
    +
    +pre.source span.bnc {
    +  background-image: url(branchnc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bnc:hover {
    +  background-color:#ff8080;
    +}
    +
    +pre.source span.bpc {
    +  background-image: url(branchpc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bpc:hover {
    +  background-color:#ffff80;
    +}
    +
    +table.coverage {
    +  empty-cells:show;
    +  border-collapse:collapse; 
    +}
    +
    +table.coverage thead {
    +  background-color:#e0e0e0;
    +}
    +
    +table.coverage thead td {
    +  white-space:nowrap;
    +  padding:2px 14px 0px 6px;
    +  border-bottom:#b0b0b0 1px solid;
    +}
    +
    +table.coverage thead td.bar {
    +  border-left:#cccccc 1px solid;
    +}
    +
    +table.coverage thead td.ctr1 {
    +  text-align:right;
    +  border-left:#cccccc 1px solid;
    +}
    +
    +table.coverage thead td.ctr2 {
    +  text-align:right;
    +  padding-left:2px;
    +}
    +
    +table.coverage thead td.sortable {
    +  cursor:pointer;
    +  background-image:url(sort.gif);
    +  background-position:right center;
    +  background-repeat:no-repeat;
    +}
    +
    +table.coverage thead td.up {
    +  background-image:url(up.gif);
    +}
    +
    +table.coverage thead td.down {
    +  background-image:url(down.gif);
    +}
    +
    +table.coverage tbody td {
    +  white-space:nowrap;
    +  padding:2px 6px 2px 6px;
    +  border-bottom:#d6d3ce 1px solid;
    +}
    +
    +table.coverage tbody tr:hover { 
    +  background: #f0f0d0 !important;
    +}
    +
    +table.coverage tbody td.bar {
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tbody td.ctr1 {
    +  text-align:right;
    +  padding-right:14px;
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tbody td.ctr2 {
    +  text-align:right;
    +  padding-right:14px;
    +  padding-left:2px;
    +}
    +
    +table.coverage tfoot td {
    +  white-space:nowrap;
    +  padding:2px 6px 2px 6px;
    +}
    +
    +table.coverage tfoot td.bar {
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tfoot td.ctr1 {
    +  text-align:right;
    +  padding-right:14px;
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tfoot td.ctr2 {
    +  text-align:right;
    +  padding-right:14px;
    +  padding-left:2px;
    +}
    +
    +.footer {
    +  margin-top:20px;
    +  border-top:#d6d3ce 1px solid;
    +  padding-top:2px;
    +  font-size:8pt;
    +  color:#a0a0a0;
    +}
    +
    +.footer a {
    +  color:#a0a0a0;
    +}
    +
    +.right {
    +  float:right;
    +}
    diff --git a/jacoco/.resources/report.gif b/jacoco/.resources/report.gif
    new file mode 100644
    index 0000000..8547be5
    Binary files /dev/null and b/jacoco/.resources/report.gif differ
    diff --git a/jacoco/.resources/session.gif b/jacoco/.resources/session.gif
    new file mode 100644
    index 0000000..0151bad
    Binary files /dev/null and b/jacoco/.resources/session.gif differ
    diff --git a/jacoco/.resources/sort.gif b/jacoco/.resources/sort.gif
    new file mode 100644
    index 0000000..6757c2c
    Binary files /dev/null and b/jacoco/.resources/sort.gif differ
    diff --git a/jacoco/.resources/sort.js b/jacoco/.resources/sort.js
    new file mode 100644
    index 0000000..511e47c
    --- /dev/null
    +++ b/jacoco/.resources/sort.js
    @@ -0,0 +1,147 @@
    +/*******************************************************************************
    + * Copyright (c) 2009, 2015 Mountainminds GmbH & Co. KG and Contributors
    + * All rights reserved. This program and the accompanying materials
    + * are made available under the terms of the Eclipse Public License v1.0
    + * which accompanies this distribution, and is available at
    + * http://www.eclipse.org/legal/epl-v10.html
    + *
    + * Contributors:
    + *    Marc R. Hoffmann - initial API and implementation
    + *    
    + *******************************************************************************/
    +
    +(function () {
    +
    +  /**
    +   * Sets the initial sorting derived from the hash.
    +   *
    +   * @param linkelementids
    +   *          list of element ids to search for links to add sort inidcator
    +   *          hash links   
    +   */  
    +  function initialSort(linkelementids) {
    +    window.linkelementids = linkelementids;
    +    var hash = window.location.hash;
    +    if (hash) {
    +      var m = hash.match(/up-./);
    +      if (m) {
    +        var header = window.document.getElementById(m[0].charAt(3));
    +        if (header) {
    +          sortColumn(header, true);
    +        }
    +        return;
    +      }
    +      var m = hash.match(/dn-./);
    +      if (m) {
    +        var header = window.document.getElementById(m[0].charAt(3));
    +        if (header) {
    +          sortColumn(header, false);
    +        }
    +        return
    +      }
    +    }
    +  }
    +
    +  /**
    +   * Sorts the columns with the given header dependening on the current sort state.
    +   */  
    +  function toggleSort(header) {
    +    var sortup = header.className.indexOf('down ') == 0;
    +    sortColumn(header, sortup);
    +  }
    +
    +  /**
    +   * Sorts the columns with the given header in the given direction.
    +   */  
    +  function sortColumn(header, sortup) {
    +    var table = header.parentNode.parentNode.parentNode;
    +    var body = table.tBodies[0];
    +    var colidx = getNodePosition(header);
    +    
    +    resetSortedStyle(table);
    +    
    +    var rows = body.rows;
    +    var sortedrows = [];
    +    for (var i = 0; i < rows.length; i++) {
    +      r = rows[i];
    +      sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
    +    }
    +    
    +    var hash;
    +    
    +    if (sortup) {
    +      for (var i = sortedrows.length - 1; i >= 0; i--) {
    +        body.appendChild(sortedrows[i]);
    +      }
    +      header.className = 'up ' + header.className;
    +      hash = 'up-' + header.id;
    +    } else {
    +      for (var i = 0; i < sortedrows.length; i++) {
    +        body.appendChild(sortedrows[i]);
    +      }
    +      header.className = 'down ' + header.className;
    +      hash = 'dn-' + header.id;
    +    }
    +    
    +    setHash(hash);
    +  }
    +
    +  /**
    +   * Adds the sort indicator as a hash to the document URL and all links.
    +   */
    +  function setHash(hash) {
    +    window.document.location.hash = hash;
    +    ids = window.linkelementids;
    +    for (var i = 0; i < ids.length; i++) {
    +        setHashOnAllLinks(document.getElementById(ids[i]), hash);
    +    }
    +  }
    +
    +  /**
    +   * Extend all links within the given tag with the given hash.
    +   */
    +  function setHashOnAllLinks(tag, hash) {
    +    links = tag.getElementsByTagName("a");
    +    for (var i = 0; i < links.length; i++) {
    +        var a = links[i];
    +        var href = a.href;
    +        var hashpos = href.indexOf("#");
    +        if (hashpos != -1) {
    +            href = href.substring(0, hashpos);
    +        } 
    +        a.href = href + "#" + hash;
    +    }
    +  }
    +
    +  /**
    +   * Calculates the position of a element within its parent.
    +   */  
    +  function getNodePosition(element) {
    +    var pos = -1;
    +    while (element) {
    +      element = element.previousSibling;
    +      pos++;
    +    }
    +    return pos;
    +  }
    +
    +  /**
    +   * Remove the sorting indicator style from all headers.
    +   */
    +  function resetSortedStyle(table) {
    +    for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
    +      if (c.className) {
    +        if (c.className.indexOf('down ') == 0) {
    +          c.className = c.className.slice(5);
    +        }
    +        if (c.className.indexOf('up ') == 0) {
    +          c.className = c.className.slice(3);
    +        }
    +      }
    +    }
    +  }
    +  
    +  window['initialSort'] = initialSort;
    +  window['toggleSort'] = toggleSort;
    +
    +})();
    \ No newline at end of file
    diff --git a/jacoco/.resources/source.gif b/jacoco/.resources/source.gif
    new file mode 100644
    index 0000000..b226e41
    Binary files /dev/null and b/jacoco/.resources/source.gif differ
    diff --git a/jacoco/.resources/up.gif b/jacoco/.resources/up.gif
    new file mode 100644
    index 0000000..58ed216
    Binary files /dev/null and b/jacoco/.resources/up.gif differ
    diff --git a/jacoco/.sessions.html b/jacoco/.sessions.html
    new file mode 100644
    index 0000000..5f8ea6b
    --- /dev/null
    +++ b/jacoco/.sessions.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href=".resources/report.css" type="text/css"/><link rel="shortcut icon" href=".resources/report.gif" type="image/gif"/><title>Sessions</title></head><body><div class="breadcrumb" id="breadcrumb"><span class="info"><a href=".sessions.html" class="el_session">Sessions</a></span><a href="index.html" class="el_report">Java Types</a> &gt; <span class="el_session">Sessions</span></div><h1>Sessions</h1><p>This coverage report is based on execution data from the following sessions:</p><table class="coverage" cellspacing="0"><thead><tr><td>Session</td><td>Start Time</td><td>Dump Time</td></tr></thead><tbody><tr><td><span class="el_session">fschopp-macbook.local-e777b30e</span></td><td>May 25, 2015 5:26:24 PM</td><td>May 25, 2015 5:26:25 PM</td></tr></tbody></table><p>Execution data for the following classes is considered in this report:</p><table class="coverage" cellspacing="0"><thead><tr><td>Class</td><td>Id</td></tr></thead><tbody><tr><td><span class="el_class">bsh.Interpreter</span></td><td><code>269b39bfdc646eee</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/AnnotatedConstructImpl.html" class="el_class">net.florianschoppmann.java.reflect.AnnotatedConstructImpl</a></td><td><code>393b225e0b8865e3</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/ArrayTypeImpl.html" class="el_class">net.florianschoppmann.java.reflect.ArrayTypeImpl</a></td><td><code>068d1b786ae199c0</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/DeclaredTypeImpl.html" class="el_class">net.florianschoppmann.java.reflect.DeclaredTypeImpl</a></td><td><code>d90eaa7557730ebc</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/ElementImpl.html" class="el_class">net.florianschoppmann.java.reflect.ElementImpl</a></td><td><code>3534f70bc381eefd</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/ImmutableList.html" class="el_class">net.florianschoppmann.java.reflect.ImmutableList</a></td><td><code>fb1775b356af9a32</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.reflect.ImmutableListTest</span></td><td><code>3088e61f8967b850</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/IntersectionTypeImpl.html" class="el_class">net.florianschoppmann.java.reflect.IntersectionTypeImpl</a></td><td><code>ffcbcdd966ccd243</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/MirrorContext.html" class="el_class">net.florianschoppmann.java.reflect.MirrorContext</a></td><td><code>8cdf4f93b28a659e</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/NameImpl.html" class="el_class">net.florianschoppmann.java.reflect.NameImpl</a></td><td><code>36b927d915ed7a66</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/NoTypeImpl.html" class="el_class">net.florianschoppmann.java.reflect.NoTypeImpl</a></td><td><code>5203f309cb12103b</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/NullTypeImpl.html" class="el_class">net.florianschoppmann.java.reflect.NullTypeImpl</a></td><td><code>6ab27e53d58da379</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/PrimitiveTypeImpl.html" class="el_class">net.florianschoppmann.java.reflect.PrimitiveTypeImpl</a></td><td><code>3b4da3538ade1640</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/ReflectionTypes.html" class="el_class">net.florianschoppmann.java.reflect.ReflectionTypes</a></td><td><code>cd9c63823e6065d0</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.reflect.ReflectionTypesTest</span></td><td><code>57cdebbe55893f26</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.reflect.ReflectionTypesTest.1</span></td><td><code>8ac11fcd1f845b28</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.reflect.ReflectionTypesTest.2</span></td><td><code>d3aafc9b9113f2f1</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.reflect.ReflectionTypesTest.3</span></td><td><code>279c411f922414c9</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.reflect.ReflectionTypesTest.4</span></td><td><code>884a9b623b7103c3</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.reflect.ReflectionTypesTest.5</span></td><td><code>a3fc4133be6878ca</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.reflect.ReflectionTypesTest.ClassElementVisitor</span></td><td><code>d4fb26020828293a</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.reflect.ReflectionTypesTest.Provider</span></td><td><code>d9bfeef963ad339a</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.reflect.ReflectionTypesTest.ThrowingInvocationHandler</span></td><td><code>2e1b9614f3b4da1c</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.reflect.ReflectionTypesTest.TypeToken</span></td><td><code>38a64c12523b3566</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/TypeElementImpl.html" class="el_class">net.florianschoppmann.java.reflect.TypeElementImpl</a></td><td><code>89c0adad6a18321c</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/TypeParameterElementImpl.html" class="el_class">net.florianschoppmann.java.reflect.TypeParameterElementImpl</a></td><td><code>c057d2094d69c216</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/TypeVariableImpl.html" class="el_class">net.florianschoppmann.java.reflect.TypeVariableImpl</a></td><td><code>37a7f3bd8507aa72</code></td></tr><tr><td><a href="net.florianschoppmann.java.reflect/WildcardTypeImpl.html" class="el_class">net.florianschoppmann.java.reflect.WildcardTypeImpl</a></td><td><code>e0e67e084a1f7ca8</code></td></tr><tr><td><a href="net.florianschoppmann.java.type/AbstractTypes.html" class="el_class">net.florianschoppmann.java.type.AbstractTypes</a></td><td><code>227057bae75bfa6e</code></td></tr><tr><td><a href="net.florianschoppmann.java.type/AbstractTypes$DeclaredTypeSubtypeVisitor.html" class="el_class">net.florianschoppmann.java.type.AbstractTypes.DeclaredTypeSubtypeVisitor</a></td><td><code>7bd7fbe527fdecae</code></td></tr><tr><td><a href="net.florianschoppmann.java.type/AbstractTypes$ErasureVisitor.html" class="el_class">net.florianschoppmann.java.type.AbstractTypes.ErasureVisitor</a></td><td><code>dd88e5670b064a74</code></td></tr><tr><td><a href="net.florianschoppmann.java.type/AbstractTypes$SubstitutionVisitor.html" class="el_class">net.florianschoppmann.java.type.AbstractTypes.SubstitutionVisitor</a></td><td><code>5696233568e6592e</code></td></tr><tr><td><a href="net.florianschoppmann.java.type/AbstractTypes$Substitutions.html" class="el_class">net.florianschoppmann.java.type.AbstractTypes.Substitutions</a></td><td><code>97cdbe91d390b550</code></td></tr><tr><td><a href="net.florianschoppmann.java.type/AbstractTypes$SubtypeVisitor.html" class="el_class">net.florianschoppmann.java.type.AbstractTypes.SubtypeVisitor</a></td><td><code>7ab06fa7f617ee6c</code></td></tr><tr><td><a href="net.florianschoppmann.java.type/AbstractTypes$ToStringVisitor.html" class="el_class">net.florianschoppmann.java.type.AbstractTypes.ToStringVisitor</a></td><td><code>ac9f5ec25b067ebe</code></td></tr><tr><td><a href="net.florianschoppmann.java.type/AbstractTypes$TypeDeclarationVertexState.html" class="el_class">net.florianschoppmann.java.type.AbstractTypes.TypeDeclarationVertexState</a></td><td><code>007367caa81c8ac3</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.type.AbstractTypesContract</span></td><td><code>a2417783f15a709a</code></td></tr><tr><td><a href="net.florianschoppmann.java.type/ExtendedTypeKindVisitor7.html" class="el_class">net.florianschoppmann.java.type.ExtendedTypeKindVisitor7</a></td><td><code>9289b2ed25bc12da</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.type.ExtendedTypeKindVisitor7Test</span></td><td><code>ab8010b5254f7198</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.type.ExtendedTypeKindVisitor7Test.AnnotatedConstructImpl</span></td><td><code>47ec2f1a32685ba3</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.type.ExtendedTypeKindVisitor7Test.IntersectionTypeImpl</span></td><td><code>167566df6d28bfcd</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.type.ExtendedTypeKindVisitor7Test.OtherType</span></td><td><code>40e750eeb85fecdd</code></td></tr><tr><td><span class="el_class">net.florianschoppmann.java.type.ExtendedTypeKindVisitor7Test.SomeVisitor</span></td><td><code>4b105859634ce408</code></td></tr><tr><td><span class="el_class">org.apache.maven.artifact.versioning.DefaultArtifactVersion</span></td><td><code>42854e2d2518a85d</code></td></tr><tr><td><span class="el_class">org.apache.maven.artifact.versioning.Restriction</span></td><td><code>0ebaa76df5c88ea3</code></td></tr><tr><td><span class="el_class">org.apache.maven.artifact.versioning.VersionRange</span></td><td><code>3e1412f26402a722</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BaseProviderFactory</span></td><td><code>7ba29961dfebc4ba</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BooterDeserializer</span></td><td><code>442f429c26b69928</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClassLoaderConfiguration</span></td><td><code>6e06a3a75082a947</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Classpath</span></td><td><code>e71f884825972c25</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClasspathConfiguration</span></td><td><code>b4f746df2629957b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter</span></td><td><code>812225234cbb3325</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.1</span></td><td><code>bdfcde0181550217</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkingReporterFactory</span></td><td><code>076c5152b5fb9c11</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkingRunListener</span></td><td><code>b96d9f327ffdaaf4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.IsolatedClassLoader</span></td><td><code>ae0066301f45e487</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.JdkReflector</span></td><td><code>d6f5d6728272255a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PropertiesWrapper</span></td><td><code>e77715f3c27548eb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProviderConfiguration</span></td><td><code>d735e73a98b2dd3b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProviderFactory</span></td><td><code>10eaa6c74a289a7c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProviderFactory.ProviderProxy</span></td><td><code>7a176b1eaeb3c61e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.StartupConfiguration</span></td><td><code>b4437ea6e48d2360</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.SurefireReflector</span></td><td><code>073f35a652554917</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.SystemPropertyManager</span></td><td><code>586f8b734e8457bd</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.TypeEncodedValue</span></td><td><code>520e6294ac61be38</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.providerapi.AbstractProvider</span></td><td><code>41999770f94bdbc3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.CategorizedReportEntry</span></td><td><code>5bdaa41ea08accdd</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ConsoleOutputCapture</span></td><td><code>8698f1f1b0d3d1ac</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ConsoleOutputCapture.ForwardingPrintStream</span></td><td><code>07ce062280b3f566</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ReporterConfiguration</span></td><td><code>af3c1ea7f8012a4f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.SimpleReportEntry</span></td><td><code>c4fe7d3fd77a7f9f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.suite.RunResult</span></td><td><code>4f4ef8baf9a9eaed</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testng.ConfigurationAwareTestNGReporter</span></td><td><code>2c975f233139f05c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testng.TestNGDirectoryTestSuite</span></td><td><code>7e7fe6630626228b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testng.TestNGExecutor</span></td><td><code>a2d7382efe9db275</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testng.TestNGProvider</span></td><td><code>a2f229d2672a0cb0</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testng.TestNGReporter</span></td><td><code>cd742ec78cee511c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testng.conf.TestNG652Configurator</span></td><td><code>cd78be73bdd2485e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testng.conf.TestNGMapConfigurator</span></td><td><code>bbfce1b77918a941</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.DirectoryScannerParameters</span></td><td><code>dfed7046a1155a37</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.RunOrderParameters</span></td><td><code>0c8e07ddcfeb0d3f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.TestArtifactInfo</span></td><td><code>3385503f66e44602</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.TestRequest</span></td><td><code>c341fc8ac6d6267e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.DefaultRunOrderCalculator</span></td><td><code>6eae8682ccf1a30a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.DefaultScanResult</span></td><td><code>61b36318792d6986</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.ReflectionUtils</span></td><td><code>f3750af81644d0aa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.RunOrder</span></td><td><code>d922f6bc92e209d9</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.TestsToRun</span></td><td><code>0f98b18d5c7c18ab</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.UrlUtils</span></td><td><code>1ff98da53c689785</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.ByteBuffer</span></td><td><code>ee465046a50e3fa4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.StringUtils</span></td><td><code>517a9dd6a335139c</code></td></tr><tr><td><span class="el_class">org.testng.Assert</span></td><td><code>a84290691ca8513d</code></td></tr><tr><td><span class="el_class">org.testng.ClassMethodMap</span></td><td><code>98937b58c6d71655</code></td></tr><tr><td><span class="el_class">org.testng.CommandLineArgs</span></td><td><code>b0d0c5ed2ef60a9f</code></td></tr><tr><td><span class="el_class">org.testng.DependencyMap</span></td><td><code>16f5f488f2d8b000</code></td></tr><tr><td><span class="el_class">org.testng.InstanceOrderingMethodInterceptor</span></td><td><code>295a4d886daac3c7</code></td></tr><tr><td><span class="el_class">org.testng.Reporter</span></td><td><code>f7566098ddbb4945</code></td></tr><tr><td><span class="el_class">org.testng.SuiteResult</span></td><td><code>9116750c6ea1d625</code></td></tr><tr><td><span class="el_class">org.testng.SuiteRunState</span></td><td><code>42dee5edd7207e5d</code></td></tr><tr><td><span class="el_class">org.testng.SuiteRunner</span></td><td><code>0558bb15f854f04b</code></td></tr><tr><td><span class="el_class">org.testng.SuiteRunner.1</span></td><td><code>e9b735d5693ef567</code></td></tr><tr><td><span class="el_class">org.testng.SuiteRunner.DefaultTestRunnerFactory</span></td><td><code>69249379a7cb7167</code></td></tr><tr><td><span class="el_class">org.testng.SuiteRunnerWorker</span></td><td><code>450226c203bdd4f0</code></td></tr><tr><td><span class="el_class">org.testng.TestClass</span></td><td><code>75b0c0c618852314</code></td></tr><tr><td><span class="el_class">org.testng.TestListenerAdapter</span></td><td><code>8982a33b20e9086a</code></td></tr><tr><td><span class="el_class">org.testng.TestNG</span></td><td><code>3b761acdc8486178</code></td></tr><tr><td><span class="el_class">org.testng.TestNG.ExitCodeListener</span></td><td><code>c5b4aee985124fc3</code></td></tr><tr><td><span class="el_class">org.testng.TestRunner</span></td><td><code>e44f81fa8505c0cc</code></td></tr><tr><td><span class="el_class">org.testng.TestRunner.2</span></td><td><code>4cf14c9d5cf53bba</code></td></tr><tr><td><span class="el_class">org.testng.TestRunner.ConfigurationListener</span></td><td><code>05236681ee281f62</code></td></tr><tr><td><span class="el_class">org.testng.TestRunner.ListenerHolder</span></td><td><code>44bdf680c3e45961</code></td></tr><tr><td><span class="el_class">org.testng.collections.CollectionUtils</span></td><td><code>91d66a181fe63256</code></td></tr><tr><td><span class="el_class">org.testng.collections.ListMultiMap</span></td><td><code>ddbc21bcd046cb67</code></td></tr><tr><td><span class="el_class">org.testng.collections.Lists</span></td><td><code>4482ef31ec758eaa</code></td></tr><tr><td><span class="el_class">org.testng.collections.Maps</span></td><td><code>467d4598ebf99237</code></td></tr><tr><td><span class="el_class">org.testng.collections.MultiMap</span></td><td><code>97ea43635a8c2d0e</code></td></tr><tr><td><span class="el_class">org.testng.collections.Objects</span></td><td><code>5f7ccda2aab48a2d</code></td></tr><tr><td><span class="el_class">org.testng.collections.Objects.ToStringHelper</span></td><td><code>9ba234e63223b740</code></td></tr><tr><td><span class="el_class">org.testng.collections.Objects.ValueHolder</span></td><td><code>86d75b663412d9ba</code></td></tr><tr><td><span class="el_class">org.testng.collections.SetMultiMap</span></td><td><code>86e4feaeb03d9a56</code></td></tr><tr><td><span class="el_class">org.testng.collections.Sets</span></td><td><code>3e81872c00e1ae8d</code></td></tr><tr><td><span class="el_class">org.testng.internal.ArrayIterator</span></td><td><code>8d2bbea384f50637</code></td></tr><tr><td><span class="el_class">org.testng.internal.Attributes</span></td><td><code>9e22d109a7bca79c</code></td></tr><tr><td><span class="el_class">org.testng.internal.BaseClassFinder</span></td><td><code>bfda17d9a0cb96c0</code></td></tr><tr><td><span class="el_class">org.testng.internal.BaseTestMethod</span></td><td><code>a12ab452b4e439bd</code></td></tr><tr><td><span class="el_class">org.testng.internal.BaseTestMethod.1</span></td><td><code>e00f3014da0df1a4</code></td></tr><tr><td><span class="el_class">org.testng.internal.Bsh</span></td><td><code>228fda07e3644109</code></td></tr><tr><td><span class="el_class">org.testng.internal.ClassHelper</span></td><td><code>f0bb70c1a2bb7375</code></td></tr><tr><td><span class="el_class">org.testng.internal.ClassImpl</span></td><td><code>c081df09a819b4f9</code></td></tr><tr><td><span class="el_class">org.testng.internal.ClassInfoMap</span></td><td><code>4230b4fd104b59a3</code></td></tr><tr><td><span class="el_class">org.testng.internal.Configuration</span></td><td><code>8b940cd3f679415b</code></td></tr><tr><td><span class="el_class">org.testng.internal.ConfigurationGroupMethods</span></td><td><code>e179e5cc9c273f2f</code></td></tr><tr><td><span class="el_class">org.testng.internal.ConfigurationMethod</span></td><td><code>39ce88e0746daf15</code></td></tr><tr><td><span class="el_class">org.testng.internal.Constants</span></td><td><code>76303dccf9dc7a81</code></td></tr><tr><td><span class="el_class">org.testng.internal.ConstructorOrMethod</span></td><td><code>ecf914e89b04dbc0</code></td></tr><tr><td><span class="el_class">org.testng.internal.DefaultMethodSelectorContext</span></td><td><code>fe9715cb4b9fa768</code></td></tr><tr><td><span class="el_class">org.testng.internal.Dynamic</span></td><td><code>b05e4d7f681bbc15</code></td></tr><tr><td><span class="el_class">org.testng.internal.DynamicGraph</span></td><td><code>d0876018eb78a9fe</code></td></tr><tr><td><span class="el_class">org.testng.internal.DynamicGraph.1</span></td><td><code>97b9b038379e3fa7</code></td></tr><tr><td><span class="el_class">org.testng.internal.DynamicGraph.Status</span></td><td><code>baae8d996c8ff9c8</code></td></tr><tr><td><span class="el_class">org.testng.internal.ExpectedExceptionsHolder</span></td><td><code>f2dc3579a2b70897</code></td></tr><tr><td><span class="el_class">org.testng.internal.FactoryMethod</span></td><td><code>39361c72daf5b4bd</code></td></tr><tr><td><span class="el_class">org.testng.internal.Graph</span></td><td><code>5df8ad84e84c2759</code></td></tr><tr><td><span class="el_class">org.testng.internal.Graph.Node</span></td><td><code>5042f29fad0d3649</code></td></tr><tr><td><span class="el_class">org.testng.internal.InvokedMethod</span></td><td><code>6ac92c08764add14</code></td></tr><tr><td><span class="el_class">org.testng.internal.Invoker</span></td><td><code>a92d73be610e855a</code></td></tr><tr><td><span class="el_class">org.testng.internal.Invoker.CanRunFromClassPredicate</span></td><td><code>bdab11edf776c3d6</code></td></tr><tr><td><span class="el_class">org.testng.internal.Invoker.FailureContext</span></td><td><code>cae00b0d4852ef22</code></td></tr><tr><td><span class="el_class">org.testng.internal.Invoker.ParameterBag</span></td><td><code>bccd82905746453d</code></td></tr><tr><td><span class="el_class">org.testng.internal.Invoker.SameClassNamePredicate</span></td><td><code>612e558a306a1826</code></td></tr><tr><td><span class="el_class">org.testng.internal.MethodGroupsHelper</span></td><td><code>94f8c1c900280da8</code></td></tr><tr><td><span class="el_class">org.testng.internal.MethodHelper</span></td><td><code>42d1eb09c9e2ca42</code></td></tr><tr><td><span class="el_class">org.testng.internal.MethodInheritance</span></td><td><code>9d0583008aef42ff</code></td></tr><tr><td><span class="el_class">org.testng.internal.MethodInstance</span></td><td><code>54cf037e95f6d7aa</code></td></tr><tr><td><span class="el_class">org.testng.internal.MethodInstance.1</span></td><td><code>202399577e7182de</code></td></tr><tr><td><span class="el_class">org.testng.internal.MethodInvocationHelper</span></td><td><code>3292801fd9460eb3</code></td></tr><tr><td><span class="el_class">org.testng.internal.MethodSelectorDescriptor</span></td><td><code>e4ddacbce73e495d</code></td></tr><tr><td><span class="el_class">org.testng.internal.NoOpTestClass</span></td><td><code>0dc1679c2004e84a</code></td></tr><tr><td><span class="el_class">org.testng.internal.ObjectFactoryImpl</span></td><td><code>fd93208be7397c3f</code></td></tr><tr><td><span class="el_class">org.testng.internal.ParameterHolder</span></td><td><code>92d0e2e4e3412469</code></td></tr><tr><td><span class="el_class">org.testng.internal.ParameterHolder.ParameterOrigin</span></td><td><code>41118c972e034a42</code></td></tr><tr><td><span class="el_class">org.testng.internal.Parameters</span></td><td><code>1f2967665943b674</code></td></tr><tr><td><span class="el_class">org.testng.internal.Parameters.MethodParameters</span></td><td><code>c2a0ec1c2edf8623</code></td></tr><tr><td><span class="el_class">org.testng.internal.ResultMap</span></td><td><code>d5b60248bf292af3</code></td></tr><tr><td><span class="el_class">org.testng.internal.RunInfo</span></td><td><code>f3c3fb7c4852aa7a</code></td></tr><tr><td><span class="el_class">org.testng.internal.SuiteRunnerMap</span></td><td><code>baef0f5f757e5799</code></td></tr><tr><td><span class="el_class">org.testng.internal.TestMethodWorker</span></td><td><code>4cd99120de13f130</code></td></tr><tr><td><span class="el_class">org.testng.internal.TestNGClassFinder</span></td><td><code>1c0598b44f304e93</code></td></tr><tr><td><span class="el_class">org.testng.internal.TestNGMethod</span></td><td><code>5185b689edb1e119</code></td></tr><tr><td><span class="el_class">org.testng.internal.TestNGMethod.1</span></td><td><code>9f2bae11f2bf07ea</code></td></tr><tr><td><span class="el_class">org.testng.internal.TestNGMethodFinder</span></td><td><code>449d07bab2ceb805</code></td></tr><tr><td><span class="el_class">org.testng.internal.TestNGProperty</span></td><td><code>a897b9674a06122f</code></td></tr><tr><td><span class="el_class">org.testng.internal.TestResult</span></td><td><code>d6b3ecb20ad11ff8</code></td></tr><tr><td><span class="el_class">org.testng.internal.Utils</span></td><td><code>2234993972bc8a8d</code></td></tr><tr><td><span class="el_class">org.testng.internal.Utils.1</span></td><td><code>3d6a12f26acfa8a0</code></td></tr><tr><td><span class="el_class">org.testng.internal.XmlMethodSelector</span></td><td><code>27f801fe557767fa</code></td></tr><tr><td><span class="el_class">org.testng.internal.annotations.AnnotationHelper</span></td><td><code>1ccdb324fd91e84b</code></td></tr><tr><td><span class="el_class">org.testng.internal.annotations.BaseAnnotation</span></td><td><code>dd6e024e6c3e5d54</code></td></tr><tr><td><span class="el_class">org.testng.internal.annotations.ConfigurationAnnotation</span></td><td><code>ae7086655a395764</code></td></tr><tr><td><span class="el_class">org.testng.internal.annotations.DefaultAnnotationTransformer</span></td><td><code>c76d73c4a453707c</code></td></tr><tr><td><span class="el_class">org.testng.internal.annotations.FactoryAnnotation</span></td><td><code>678ec6800be399f1</code></td></tr><tr><td><span class="el_class">org.testng.internal.annotations.JDK15AnnotationFinder</span></td><td><code>9124245a11875231</code></td></tr><tr><td><span class="el_class">org.testng.internal.annotations.JDK15TagFactory</span></td><td><code>72d3692f0c6ee586</code></td></tr><tr><td><span class="el_class">org.testng.internal.annotations.JDK15TagFactory.1</span></td><td><code>78a8ec0bce566a82</code></td></tr><tr><td><span class="el_class">org.testng.internal.annotations.JDK15TagFactory.2</span></td><td><code>6142dfa4c41015e9</code></td></tr><tr><td><span class="el_class">org.testng.internal.annotations.TestAnnotation</span></td><td><code>6c09c247afa854e3</code></td></tr><tr><td><span class="el_class">org.testng.internal.annotations.TestOrConfiguration</span></td><td><code>3f82fdcf87817c06</code></td></tr><tr><td><span class="el_class">org.testng.internal.collections.Pair</span></td><td><code>b4ce5539970846de</code></td></tr><tr><td><span class="el_class">org.testng.internal.invokers.InvokedMethodListenerInvoker</span></td><td><code>a0267ef21223c9ac</code></td></tr><tr><td><span class="el_class">org.testng.internal.invokers.InvokedMethodListenerInvoker.InvokeAfterInvocationWithContextStrategy</span></td><td><code>4fb5527e5a8d3be4</code></td></tr><tr><td><span class="el_class">org.testng.internal.invokers.InvokedMethodListenerInvoker.InvokeAfterInvocationWithoutContextStrategy</span></td><td><code>735ff32af021c3c0</code></td></tr><tr><td><span class="el_class">org.testng.internal.invokers.InvokedMethodListenerInvoker.InvokeBeforeInvocationWithContextStrategy</span></td><td><code>3df7b024e96b94e7</code></td></tr><tr><td><span class="el_class">org.testng.internal.invokers.InvokedMethodListenerInvoker.InvokeBeforeInvocationWithoutContextStrategy</span></td><td><code>c0982d77d778b0fe</code></td></tr><tr><td><span class="el_class">org.testng.internal.invokers.InvokedMethodListenerMethod</span></td><td><code>f689bd42912ad2a0</code></td></tr><tr><td><span class="el_class">org.testng.internal.invokers.InvokedMethodListenerSubtype</span></td><td><code>33ffeef31ad86038</code></td></tr><tr><td><span class="el_class">org.testng.internal.thread.AtomicIntegerAdapter</span></td><td><code>9e09ee4ef1a03dd8</code></td></tr><tr><td><span class="el_class">org.testng.internal.thread.ThreadUtil</span></td><td><code>246d844ce9d24852</code></td></tr><tr><td><span class="el_class">org.testng.log4testng.Logger</span></td><td><code>616ffc383f826ade</code></td></tr><tr><td><span class="el_class">org.testng.reporters.Buffer</span></td><td><code>c064e73a75884453</code></td></tr><tr><td><span class="el_class">org.testng.reporters.EmailableReporter2</span></td><td><code>3495a3a193577366</code></td></tr><tr><td><span class="el_class">org.testng.reporters.EmailableReporter2.ClassResult</span></td><td><code>14ae4680491a441b</code></td></tr><tr><td><span class="el_class">org.testng.reporters.EmailableReporter2.MethodResult</span></td><td><code>0c9a80eb36b6998c</code></td></tr><tr><td><span class="el_class">org.testng.reporters.EmailableReporter2.SuiteResult</span></td><td><code>e120307ae6032b97</code></td></tr><tr><td><span class="el_class">org.testng.reporters.EmailableReporter2.TestResult</span></td><td><code>d4cf0ee93ee1ee34</code></td></tr><tr><td><span class="el_class">org.testng.reporters.EmailableReporter2.TestResult.1</span></td><td><code>7c324d8efabfa14b</code></td></tr><tr><td><span class="el_class">org.testng.reporters.FailedReporter</span></td><td><code>b7a504d8cee41238</code></td></tr><tr><td><span class="el_class">org.testng.reporters.FileStringBuffer</span></td><td><code>dec3ad4cb262da43</code></td></tr><tr><td><span class="el_class">org.testng.reporters.Files</span></td><td><code>449a09c332c97e7d</code></td></tr><tr><td><span class="el_class">org.testng.reporters.HtmlHelper</span></td><td><code>63bfd905a8be3747</code></td></tr><tr><td><span class="el_class">org.testng.reporters.JUnitReportReporter</span></td><td><code>f0ed63a823e258de</code></td></tr><tr><td><span class="el_class">org.testng.reporters.JUnitReportReporter.TestTag</span></td><td><code>5d0ffa334222b8e0</code></td></tr><tr><td><span class="el_class">org.testng.reporters.JUnitXMLReporter</span></td><td><code>b8d289401349162e</code></td></tr><tr><td><span class="el_class">org.testng.reporters.SuiteHTMLReporter</span></td><td><code>c13440ffd12ee2d3</code></td></tr><tr><td><span class="el_class">org.testng.reporters.SuiteHTMLReporter.1</span></td><td><code>7ba19c32eb8cd882</code></td></tr><tr><td><span class="el_class">org.testng.reporters.Tag</span></td><td><code>b0823005eba3b5e8</code></td></tr><tr><td><span class="el_class">org.testng.reporters.TestHTMLReporter</span></td><td><code>8cb8efcf48dcc1c8</code></td></tr><tr><td><span class="el_class">org.testng.reporters.TestHTMLReporter.ConfigurationComparator</span></td><td><code>27d7ca659b284cc9</code></td></tr><tr><td><span class="el_class">org.testng.reporters.TestHTMLReporter.NameComparator</span></td><td><code>d379ba71d8de6f7f</code></td></tr><tr><td><span class="el_class">org.testng.reporters.TextReporter</span></td><td><code>20441d618947e231</code></td></tr><tr><td><span class="el_class">org.testng.reporters.XMLReporter</span></td><td><code>960c677804cfae85</code></td></tr><tr><td><span class="el_class">org.testng.reporters.XMLReporterConfig</span></td><td><code>d5a244ed9600eca5</code></td></tr><tr><td><span class="el_class">org.testng.reporters.XMLReporterConfig.1</span></td><td><code>a0e18538aae61c2a</code></td></tr><tr><td><span class="el_class">org.testng.reporters.XMLStringBuffer</span></td><td><code>9376857bb14429ec</code></td></tr><tr><td><span class="el_class">org.testng.reporters.XMLSuiteResultWriter</span></td><td><code>3facbb809eb337a8</code></td></tr><tr><td><span class="el_class">org.testng.reporters.XMLSuiteResultWriter.1</span></td><td><code>4ac1c3c324becb5f</code></td></tr><tr><td><span class="el_class">org.testng.reporters.XMLUtils</span></td><td><code>a11f83f50e487863</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.BannerPanel</span></td><td><code>714a3def05c93c19</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.BaseMultiSuitePanel</span></td><td><code>626132161d186afe</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.BasePanel</span></td><td><code>b521595d92ed5213</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.ChronologicalPanel</span></td><td><code>2502195d98d7cae6</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.ChronologicalPanel.1</span></td><td><code>09bfadb91a9f4107</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.GroupPanel</span></td><td><code>c8d27686036ff304</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.IgnoredMethodsPanel</span></td><td><code>3e3d30335f9381c2</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.Main</span></td><td><code>8d6c61a00b28335d</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.Model</span></td><td><code>359165c4a88c023c</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.NavigatorPanel</span></td><td><code>5d05231b42f1a0b6</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.NavigatorPanel.BaseResultProvider</span></td><td><code>b80f1fcf3ce6790d</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.NavigatorPanel.ResultsByStatus</span></td><td><code>db5a6f187ba261eb</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.ReporterPanel</span></td><td><code>3911483ebd05e6d0</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.ResultsByClass</span></td><td><code>a25d77d9a2b53f57</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.ResultsByClass.1</span></td><td><code>d393a5e76a3b0f15</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.SuitePanel</span></td><td><code>83e72aade81fc7f0</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.TestNgXmlPanel</span></td><td><code>3b3d941b99546ff8</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.TestPanel</span></td><td><code>47376f2669462445</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.TimesPanel</span></td><td><code>bf95ff556dcd87f4</code></td></tr><tr><td><span class="el_class">org.testng.reporters.jq.TimesPanel.1</span></td><td><code>837e4e36983dc717</code></td></tr><tr><td><span class="el_class">org.testng.util.Strings</span></td><td><code>f39f5ee1e43c11b5</code></td></tr><tr><td><span class="el_class">org.testng.xml.XmlClass</span></td><td><code>7e801f2b861d1756</code></td></tr><tr><td><span class="el_class">org.testng.xml.XmlSuite</span></td><td><code>605417d21df61981</code></td></tr><tr><td><span class="el_class">org.testng.xml.XmlSuite.1</span></td><td><code>8768bfb08f9e7b8a</code></td></tr><tr><td><span class="el_class">org.testng.xml.XmlTest</span></td><td><code>1ca70294e99d7f63</code></td></tr><tr><td><span class="el_class">org.testng.xml.XmlUtils</span></td><td><code>a5afbcffdca415e7</code></td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/index.html b/jacoco/index.html
    new file mode 100644
    index 0000000..dd7a629
    --- /dev/null
    +++ b/jacoco/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href=".resources/report.css" type="text/css"/><link rel="shortcut icon" href=".resources/report.gif" type="image/gif"/><title>Java Types</title><script type="text/javascript" src=".resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href=".sessions.html" class="el_session">Sessions</a></span><span class="el_report">Java Types</span></div><h1>Java Types</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">263 of 4,266</td><td class="ctr2">94%</td><td class="bar">113 of 560</td><td class="ctr2">80%</td><td class="ctr1">118</td><td class="ctr2">496</td><td class="ctr1">15</td><td class="ctr2">896</td><td class="ctr1">8</td><td class="ctr2">216</td><td class="ctr1">0</td><td class="ctr2">25</td></tr></tfoot><tbody><tr><td id="a0"><a href="net.florianschoppmann.java.reflect/index.html" class="el_package">net.florianschoppmann.java.reflect</a></td><td class="bar" id="b0"><img src=".resources/redbar.gif" width="7" height="10" title="143" alt="143"/><img src=".resources/greenbar.gif" width="112" height="10" title="2,107" alt="2,107"/></td><td class="ctr2" id="c1">94%</td><td class="bar" id="d1"><img src=".resources/redbar.gif" width="18" height="10" title="49" alt="49"/><img src=".resources/greenbar.gif" width="76" height="10" title="199" alt="199"/></td><td class="ctr2" id="e0">80%</td><td class="ctr1" id="f1">54</td><td class="ctr2" id="g0">276</td><td class="ctr1" id="h0">15</td><td class="ctr2" id="i0">480</td><td class="ctr1" id="j0">8</td><td class="ctr2" id="k0">152</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">16</td></tr><tr><td id="a1"><a href="net.florianschoppmann.java.type/index.html" class="el_package">net.florianschoppmann.java.type</a></td><td class="bar" id="b1"><img src=".resources/redbar.gif" width="6" height="10" title="120" alt="120"/><img src=".resources/greenbar.gif" width="101" height="10" title="1,896" alt="1,896"/></td><td class="ctr2" id="c0">94%</td><td class="bar" id="d0"><img src=".resources/redbar.gif" width="24" height="10" title="64" alt="64"/><img src=".resources/greenbar.gif" width="95" height="10" title="248" alt="248"/></td><td class="ctr2" id="e1">79%</td><td class="ctr1" id="f0">64</td><td class="ctr2" id="g1">220</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">416</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">64</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">9</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/jacoco.csv b/jacoco/jacoco.csv
    new file mode 100644
    index 0000000..597c283
    --- /dev/null
    +++ b/jacoco/jacoco.csv
    @@ -0,0 +1,26 @@
    +GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED
    +Java Types,net.florianschoppmann.java.type,AbstractTypes.ErasureVisitor,0,58,0,2,0,9,0,7,0,6
    +Java Types,net.florianschoppmann.java.type,AbstractTypes.TypeDeclarationVertexState,0,46,0,2,0,15,0,3,0,2
    +Java Types,net.florianschoppmann.java.type,AbstractTypes.SubtypeVisitor,22,152,12,26,0,21,12,14,0,7
    +Java Types,net.florianschoppmann.java.type,AbstractTypes.Substitutions,0,9,0,0,0,4,0,1,0,1
    +Java Types,net.florianschoppmann.java.type,AbstractTypes.SubstitutionVisitor,28,184,13,23,0,38,13,14,0,9
    +Java Types,net.florianschoppmann.java.type,AbstractTypes.ToStringVisitor,38,235,19,33,0,58,19,18,0,11
    +Java Types,net.florianschoppmann.java.type,AbstractTypes.DeclaredTypeSubtypeVisitor,18,170,9,33,0,38,9,18,0,6
    +Java Types,net.florianschoppmann.java.type,ExtendedTypeKindVisitor7,0,40,0,4,0,10,0,7,0,5
    +Java Types,net.florianschoppmann.java.type,AbstractTypes,14,1002,11,125,0,224,11,74,0,17
    +Java Types,net.florianschoppmann.java.reflect,ImmutableList,0,39,0,2,0,10,0,7,0,6
    +Java Types,net.florianschoppmann.java.reflect,ReflectionTypes,25,897,15,89,1,181,16,69,1,32
    +Java Types,net.florianschoppmann.java.reflect,TypeVariableImpl,18,190,12,22,0,46,12,19,0,14
    +Java Types,net.florianschoppmann.java.reflect,TypeParameterElementImpl,7,120,3,11,0,28,3,18,0,14
    +Java Types,net.florianschoppmann.java.reflect,ElementImpl,26,32,2,2,3,9,2,4,0,4
    +Java Types,net.florianschoppmann.java.reflect,IntersectionTypeImpl,0,63,0,6,0,15,0,11,0,8
    +Java Types,net.florianschoppmann.java.reflect,MirrorContext,0,80,0,6,0,18,0,7,0,4
    +Java Types,net.florianschoppmann.java.reflect,PrimitiveTypeImpl,0,59,0,0,0,14,0,5,0,5
    +Java Types,net.florianschoppmann.java.reflect,DeclaredTypeImpl,0,100,2,10,0,23,2,13,0,9
    +Java Types,net.florianschoppmann.java.reflect,NameImpl,31,25,6,0,7,7,6,5,3,5
    +Java Types,net.florianschoppmann.java.reflect,NoTypeImpl,0,29,0,0,0,8,0,5,0,5
    +Java Types,net.florianschoppmann.java.reflect,NullTypeImpl,0,19,0,0,0,5,0,5,0,5
    +Java Types,net.florianschoppmann.java.reflect,ArrayTypeImpl,0,60,0,6,0,14,0,10,0,7
    +Java Types,net.florianschoppmann.java.reflect,AnnotatedConstructImpl,18,3,0,0,4,1,4,1,4,1
    +Java Types,net.florianschoppmann.java.reflect,WildcardTypeImpl,1,72,2,8,0,17,2,11,0,8
    +Java Types,net.florianschoppmann.java.reflect,TypeElementImpl,17,319,7,37,0,69,7,32,0,17
    diff --git a/jacoco/jacoco.xml b/jacoco/jacoco.xml
    new file mode 100644
    index 0000000..34b5477
    --- /dev/null
    +++ b/jacoco/jacoco.xml
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.0//EN" "report.dtd"><report name="Java Types"><sessioninfo id="fschopp-macbook.local-e777b30e" start="1432599984498" dump="1432599985983"/><package name="net/florianschoppmann/java/type"><class name="net/florianschoppmann/java/type/AbstractTypes$ErasureVisitor"><method name="&lt;init&gt;" desc="(Lnet/florianschoppmann/java/type/AbstractTypes;)V" line="874"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitDeclared" desc="(Ljavax/lang/model/type/DeclaredType;Ljava/lang/Void;)Ljavax/lang/model/type/TypeMirror;" line="877"><counter type="INSTRUCTION" missed="0" covered="26"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitArray" desc="(Ljavax/lang/model/type/ArrayType;Ljava/lang/Void;)Ljavax/lang/model/type/TypeMirror;" line="889"><counter type="INSTRUCTION" missed="0" covered="9"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitTypeVariable" desc="(Ljavax/lang/model/type/TypeVariable;Ljava/lang/Void;)Ljavax/lang/model/type/TypeMirror;" line="901"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitIntersection" desc="(Lnet/florianschoppmann/java/type/IntersectionType;Ljava/lang/Void;)Ljavax/lang/model/type/TypeMirror;" line="913"><counter type="INSTRUCTION" missed="0" covered="9"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="defaultAction" desc="(Ljavax/lang/model/type/TypeMirror;Ljava/lang/Void;)Ljavax/lang/model/type/TypeMirror;" line="923"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="58"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="9"/><counter type="COMPLEXITY" missed="0" covered="7"/><counter type="METHOD" missed="0" covered="6"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/type/AbstractTypes$TypeDeclarationVertexState"><method name="&lt;init&gt;" desc="(IZLjavax/lang/model/element/TypeElement;Ljavax/lang/model/type/DeclaredType;)V" line="758"><counter type="INSTRUCTION" missed="0" covered="15"/><counter type="LINE" missed="0" covered="6"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toPath" desc="(Ljavax/lang/model/type/DeclaredType;)Ljava/util/List;" line="775"><counter type="INSTRUCTION" missed="0" covered="31"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="9"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="46"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="15"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="2"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/type/AbstractTypes$SubtypeVisitor"><method name="&lt;init&gt;" desc="(Lnet/florianschoppmann/java/type/AbstractTypes;)V" line="525"><counter type="INSTRUCTION" missed="0" covered="44"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitArray" desc="(Ljavax/lang/model/type/ArrayType;Ljavax/lang/model/type/TypeMirror;)Ljava/lang/Boolean;" line="539"><counter type="INSTRUCTION" missed="4" covered="22"/><counter type="BRANCH" missed="2" covered="6"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="2" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitDeclared" desc="(Ljavax/lang/model/type/DeclaredType;Ljavax/lang/model/type/TypeMirror;)Ljava/lang/Boolean;" line="551"><counter type="INSTRUCTION" missed="4" covered="12"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitPrimitive" desc="(Ljavax/lang/model/type/PrimitiveType;Ljavax/lang/model/type/TypeMirror;)Ljava/lang/Boolean;" line="565"><counter type="INSTRUCTION" missed="4" covered="45"/><counter type="BRANCH" missed="3" covered="13"/><counter type="LINE" missed="0" covered="6"/><counter type="COMPLEXITY" missed="3" covered="6"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitTypeVariable" desc="(Ljavax/lang/model/type/TypeVariable;Ljavax/lang/model/type/TypeMirror;)Ljava/lang/Boolean;" line="583"><counter type="INSTRUCTION" missed="4" covered="12"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitIntersection" desc="(Lnet/florianschoppmann/java/type/IntersectionType;Ljavax/lang/model/type/TypeMirror;)Ljava/lang/Boolean;" line="600"><counter type="INSTRUCTION" missed="4" covered="11"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="524"><counter type="INSTRUCTION" missed="2" covered="6"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="22" covered="152"/><counter type="BRANCH" missed="12" covered="26"/><counter type="LINE" missed="0" covered="21"/><counter type="COMPLEXITY" missed="12" covered="14"/><counter type="METHOD" missed="0" covered="7"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/type/AbstractTypes$Substitutions"><method name="&lt;init&gt;" desc="(Ljava/util/Map;Ljava/util/Map;)V" line="143"><counter type="INSTRUCTION" missed="0" covered="9"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="9"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/type/AbstractTypes$SubstitutionVisitor"><method name="&lt;init&gt;" desc="(Lnet/florianschoppmann/java/type/AbstractTypes;)V" line="159"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="substituteInList" desc="(Ljava/util/List;Lnet/florianschoppmann/java/type/AbstractTypes$Substitutions;)[Ljavax/lang/model/type/TypeMirror;" line="161"><counter type="INSTRUCTION" missed="0" covered="28"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="7"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitDeclared" desc="(Ljavax/lang/model/type/DeclaredType;Lnet/florianschoppmann/java/type/AbstractTypes$Substitutions;)Ljavax/lang/model/type/TypeMirror;" line="172"><counter type="INSTRUCTION" missed="4" covered="35"/><counter type="BRANCH" missed="2" covered="4"/><counter type="LINE" missed="0" covered="7"/><counter type="COMPLEXITY" missed="2" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitArray" desc="(Ljavax/lang/model/type/ArrayType;Lnet/florianschoppmann/java/type/AbstractTypes$Substitutions;)Ljavax/lang/model/type/TypeMirror;" line="185"><counter type="INSTRUCTION" missed="4" covered="14"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitTypeVariable" desc="(Ljavax/lang/model/type/TypeVariable;Lnet/florianschoppmann/java/type/AbstractTypes$Substitutions;)Ljavax/lang/model/type/TypeMirror;" line="191"><counter type="INSTRUCTION" missed="4" covered="54"/><counter type="BRANCH" missed="3" covered="7"/><counter type="LINE" missed="0" covered="12"/><counter type="COMPLEXITY" missed="3" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitWildcard" desc="(Ljavax/lang/model/type/WildcardType;Lnet/florianschoppmann/java/type/AbstractTypes$Substitutions;)Ljavax/lang/model/type/TypeMirror;" line="213"><counter type="INSTRUCTION" missed="10" covered="26"/><counter type="BRANCH" missed="3" covered="5"/><counter type="LINE" missed="0" covered="6"/><counter type="COMPLEXITY" missed="3" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitIntersection" desc="(Lnet/florianschoppmann/java/type/IntersectionType;Lnet/florianschoppmann/java/type/AbstractTypes$Substitutions;)Ljavax/lang/model/type/TypeMirror;" line="229"><counter type="INSTRUCTION" missed="4" covered="13"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="defaultAction" desc="(Ljavax/lang/model/type/TypeMirror;Lnet/florianschoppmann/java/type/AbstractTypes$Substitutions;)Ljavax/lang/model/type/TypeMirror;" line="235"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="159"><counter type="INSTRUCTION" missed="2" covered="6"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="28" covered="184"/><counter type="BRANCH" missed="13" covered="23"/><counter type="LINE" missed="0" covered="38"/><counter type="COMPLEXITY" missed="13" covered="14"/><counter type="METHOD" missed="0" covered="9"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/type/AbstractTypes$ToStringVisitor"><method name="&lt;init&gt;" desc="(Lnet/florianschoppmann/java/type/AbstractTypes;)V" line="1254"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitPrimitive" desc="(Ljavax/lang/model/type/PrimitiveType;Ljava/lang/StringBuilder;)Ljava/lang/Void;" line="1257"><counter type="INSTRUCTION" missed="4" covered="13"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitNull" desc="(Ljavax/lang/model/type/NullType;Ljava/lang/StringBuilder;)Ljava/lang/Void;" line="1264"><counter type="INSTRUCTION" missed="4" covered="10"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitNoType" desc="(Ljavax/lang/model/type/NoType;Ljava/lang/StringBuilder;)Ljava/lang/Void;" line="1271"><counter type="INSTRUCTION" missed="4" covered="13"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitDeclared" desc="(Ljavax/lang/model/type/DeclaredType;Ljava/lang/StringBuilder;)Ljava/lang/Void;" line="1278"><counter type="INSTRUCTION" missed="4" covered="55"/><counter type="BRANCH" missed="2" covered="6"/><counter type="LINE" missed="0" covered="13"/><counter type="COMPLEXITY" missed="2" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitArray" desc="(Ljavax/lang/model/type/ArrayType;Ljava/lang/StringBuilder;)Ljava/lang/Void;" line="1299"><counter type="INSTRUCTION" missed="4" covered="16"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitTypeVariable" desc="(Ljavax/lang/model/type/TypeVariable;Ljava/lang/StringBuilder;)Ljava/lang/Void;" line="1307"><counter type="INSTRUCTION" missed="4" covered="33"/><counter type="BRANCH" missed="2" covered="4"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="2" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitWildcard" desc="(Ljavax/lang/model/type/WildcardType;Ljava/lang/StringBuilder;)Ljava/lang/Void;" line="1321"><counter type="INSTRUCTION" missed="4" covered="38"/><counter type="BRANCH" missed="2" covered="6"/><counter type="LINE" missed="0" covered="11"/><counter type="COMPLEXITY" missed="2" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitIntersection" desc="(Lnet/florianschoppmann/java/type/IntersectionType;Ljava/lang/StringBuilder;)Ljava/lang/Void;" line="1338"><counter type="INSTRUCTION" missed="4" covered="12"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="appendList" desc="(Ljava/lang/StringBuilder;Ljava/util/List;Ljava/lang/String;)V" line="1344"><counter type="INSTRUCTION" missed="4" covered="33"/><counter type="BRANCH" missed="2" covered="6"/><counter type="LINE" missed="0" covered="9"/><counter type="COMPLEXITY" missed="2" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="1254"><counter type="INSTRUCTION" missed="2" covered="6"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="38" covered="235"/><counter type="BRANCH" missed="19" covered="33"/><counter type="LINE" missed="0" covered="58"/><counter type="COMPLEXITY" missed="19" covered="18"/><counter type="METHOD" missed="0" covered="11"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/type/AbstractTypes$DeclaredTypeSubtypeVisitor"><method name="&lt;init&gt;" desc="(Lnet/florianschoppmann/java/type/AbstractTypes;)V" line="399"><counter type="INSTRUCTION" missed="0" covered="8"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitDeclared" desc="(Ljavax/lang/model/type/DeclaredType;Ljavax/lang/model/type/DeclaredType;)Ljava/lang/Boolean;" line="412"><counter type="INSTRUCTION" missed="4" covered="86"/><counter type="BRANCH" missed="2" covered="16"/><counter type="LINE" missed="0" covered="22"/><counter type="COMPLEXITY" missed="2" covered="8"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitArray" desc="(Ljavax/lang/model/type/ArrayType;Ljavax/lang/model/type/DeclaredType;)Ljava/lang/Boolean;" line="469"><counter type="INSTRUCTION" missed="4" covered="30"/><counter type="BRANCH" missed="2" covered="8"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="2" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitTypeVariable" desc="(Ljavax/lang/model/type/TypeVariable;Ljavax/lang/model/type/DeclaredType;)Ljava/lang/Boolean;" line="483"><counter type="INSTRUCTION" missed="4" covered="12"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitIntersection" desc="(Lnet/florianschoppmann/java/type/IntersectionType;Ljavax/lang/model/type/DeclaredType;)Ljava/lang/Boolean;" line="496"><counter type="INSTRUCTION" missed="4" covered="28"/><counter type="BRANCH" missed="2" covered="6"/><counter type="LINE" missed="0" covered="6"/><counter type="COMPLEXITY" missed="2" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="398"><counter type="INSTRUCTION" missed="2" covered="6"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="18" covered="170"/><counter type="BRANCH" missed="9" covered="33"/><counter type="LINE" missed="0" covered="38"/><counter type="COMPLEXITY" missed="9" covered="18"/><counter type="METHOD" missed="0" covered="6"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7"><method name="&lt;init&gt;" desc="()V" line="30"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/Object;)V" line="39"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitUnknown" desc="(Ljavax/lang/model/type/TypeMirror;Ljava/lang/Object;)Ljava/lang/Object;" line="57"><counter type="INSTRUCTION" missed="0" covered="21"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitOther" desc="(Ljavax/lang/model/type/TypeMirror;Ljava/lang/Object;)Ljava/lang/Object;" line="79"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="visitIntersection" desc="(Lnet/florianschoppmann/java/type/IntersectionType;Ljava/lang/Object;)Ljava/lang/Object;" line="91"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="40"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="10"/><counter type="COMPLEXITY" missed="0" covered="7"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/type/AbstractTypes"><method name="&lt;init&gt;" desc="()V" line="58"><counter type="INSTRUCTION" missed="0" covered="38"/><counter type="LINE" missed="0" covered="7"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="requireValidTypes" desc="([Ljavax/lang/model/type/TypeMirror;)V" line="106"><counter type="INSTRUCTION" missed="0" covered="24"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="substitute" desc="(Ljavax/lang/model/type/TypeMirror;Ljava/util/Map;)Ljavax/lang/model/type/TypeMirror;" line="265"><counter type="INSTRUCTION" missed="4" covered="133"/><counter type="BRANCH" missed="3" covered="11"/><counter type="LINE" missed="0" covered="27"/><counter type="COMPLEXITY" missed="3" covered="5"/><counter type="METHOD" missed="0" covered="1"/></method><method name="resolveActualTypeArguments" desc="(Ljavax/lang/model/element/TypeElement;Ljavax/lang/model/type/TypeMirror;)Ljava/util/List;" line="340"><counter type="INSTRUCTION" missed="0" covered="99"/><counter type="BRANCH" missed="0" covered="14"/><counter type="LINE" missed="0" covered="24"/><counter type="COMPLEXITY" missed="0" covered="8"/><counter type="METHOD" missed="0" covered="1"/></method><method name="isSubtype" desc="(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z" line="618"><counter type="INSTRUCTION" missed="0" covered="29"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="contains" desc="(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z" line="644"><counter type="INSTRUCTION" missed="0" covered="127"/><counter type="BRANCH" missed="0" covered="32"/><counter type="LINE" missed="0" covered="31"/><counter type="COMPLEXITY" missed="0" covered="17"/><counter type="METHOD" missed="0" covered="1"/></method><method name="directSupertypesOfTypeDeclaration" desc="(Ljavax/lang/model/element/TypeElement;)Ljava/util/List;" line="726"><counter type="INSTRUCTION" missed="0" covered="55"/><counter type="BRANCH" missed="0" covered="8"/><counter type="LINE" missed="0" covered="11"/><counter type="COMPLEXITY" missed="0" covered="5"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getShortestPathToSuperType" desc="(Ljavax/lang/model/element/TypeElement;Ljavax/lang/model/type/DeclaredType;)Ljava/util/List;" line="811"><counter type="INSTRUCTION" missed="4" covered="149"/><counter type="BRANCH" missed="4" covered="20"/><counter type="LINE" missed="0" covered="31"/><counter type="COMPLEXITY" missed="4" covered="9"/><counter type="METHOD" missed="0" covered="1"/></method><method name="erasure" desc="(Ljavax/lang/model/type/TypeMirror;)Ljavax/lang/model/type/TypeMirror;" line="936"><counter type="INSTRUCTION" missed="0" covered="13"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="asElement" desc="(Ljavax/lang/model/type/TypeMirror;)Ljavax/lang/model/element/Element;" line="953"><counter type="INSTRUCTION" missed="0" covered="24"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="7"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="isSameType" desc="(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z" line="977"><counter type="INSTRUCTION" missed="0" covered="22"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="greatestLowerBound" desc="(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)[Ljavax/lang/model/type/TypeMirror;" line="997"><counter type="INSTRUCTION" missed="0" covered="53"/><counter type="BRANCH" missed="1" covered="7"/><counter type="LINE" missed="0" covered="16"/><counter type="COMPLEXITY" missed="1" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="captureWildcardArgument" desc="(Ljavax/lang/model/type/WildcardType;Ljavax/lang/model/element/TypeParameterElement;)Ljavax/lang/model/type/TypeVariable;" line="1026"><counter type="INSTRUCTION" missed="4" covered="50"/><counter type="BRANCH" missed="2" covered="8"/><counter type="LINE" missed="0" covered="14"/><counter type="COMPLEXITY" missed="2" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="capture" desc="(Ljavax/lang/model/type/TypeMirror;)Ljavax/lang/model/type/TypeMirror;" line="1075"><counter type="INSTRUCTION" missed="0" covered="110"/><counter type="BRANCH" missed="0" covered="10"/><counter type="LINE" missed="0" covered="27"/><counter type="COMPLEXITY" missed="0" covered="6"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getTypeVariable" desc="(Ljavax/lang/model/element/TypeParameterElement;Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/WildcardType;)Ljavax/lang/model/type/TypeVariable;" line="1155"><counter type="INSTRUCTION" missed="0" covered="30"/><counter type="LINE" missed="0" covered="9"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="(Ljavax/lang/model/type/TypeMirror;)Ljava/lang/String;" line="1365"><counter type="INSTRUCTION" missed="0" covered="19"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="58"><counter type="INSTRUCTION" missed="2" covered="27"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="14" covered="1002"/><counter type="BRANCH" missed="11" covered="125"/><counter type="LINE" missed="0" covered="224"/><counter type="COMPLEXITY" missed="11" covered="74"/><counter type="METHOD" missed="0" covered="17"/><counter type="CLASS" missed="0" covered="1"/></class><sourcefile name="ExtendedTypeKindVisitor7.java"><line nr="30" mi="0" ci="3" mb="0" cb="0"/><line nr="31" mi="0" ci="1" mb="0" cb="0"/><line nr="39" mi="0" ci="3" mb="0" cb="0"/><line nr="40" mi="0" ci="1" mb="0" cb="0"/><line nr="57" mi="0" ci="3" mb="0" cb="0"/><line nr="58" mi="0" ci="7" mb="0" cb="4"/><line nr="59" mi="0" ci="6" mb="0" cb="0"/><line nr="61" mi="0" ci="5" mb="0" cb="0"/><line nr="79" mi="0" ci="6" mb="0" cb="0"/><line nr="91" mi="0" ci="5" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="40"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="10"/><counter type="COMPLEXITY" missed="0" covered="7"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="AbstractTypes.java"><line nr="58" mi="2" ci="7" mb="1" cb="1"/><line nr="59" mi="0" ci="22" mb="0" cb="0"/><line nr="64" mi="0" ci="7" mb="0" cb="0"/><line nr="65" mi="0" ci="7" mb="0" cb="0"/><line nr="66" mi="0" ci="7" mb="0" cb="0"/><line nr="67" mi="0" ci="7" mb="0" cb="0"/><line nr="68" mi="0" ci="7" mb="0" cb="0"/><line nr="106" mi="0" ci="16" mb="0" cb="2"/><line nr="107" mi="0" ci="4" mb="0" cb="0"/><line nr="108" mi="0" ci="3" mb="0" cb="0"/><line nr="110" mi="0" ci="1" mb="0" cb="0"/><line nr="143" mi="0" ci="2" mb="0" cb="0"/><line nr="144" mi="0" ci="3" mb="0" cb="0"/><line nr="145" mi="0" ci="3" mb="0" cb="0"/><line nr="146" mi="0" ci="1" mb="0" cb="0"/><line nr="159" mi="2" ci="12" mb="1" cb="1"/><line nr="161" mi="0" ci="4" mb="0" cb="0"/><line nr="162" mi="0" ci="2" mb="0" cb="0"/><line nr="163" mi="0" ci="10" mb="0" cb="2"/><line nr="164" mi="0" ci="8" mb="0" cb="0"/><line nr="165" mi="0" ci="1" mb="0" cb="0"/><line nr="166" mi="0" ci="1" mb="0" cb="0"/><line nr="167" mi="0" ci="2" mb="0" cb="0"/><line nr="172" mi="4" ci="4" mb="2" cb="2"/><line nr="173" mi="0" ci="3" mb="0" cb="0"/><line nr="174" mi="0" ci="4" mb="0" cb="0"/><line nr="175" mi="0" ci="6" mb="0" cb="0"/><line nr="176" mi="0" ci="4" mb="0" cb="2"/><line nr="177" mi="0" ci="8" mb="0" cb="0"/><line nr="179" mi="0" ci="6" mb="0" cb="0"/><line nr="185" mi="4" ci="4" mb="2" cb="2"/><line nr="186" mi="0" ci="10" mb="0" cb="0"/><line nr="191" mi="4" ci="4" mb="2" cb="2"/><line nr="192" mi="0" ci="4" mb="0" cb="0"/><line nr="193" mi="0" ci="6" mb="0" cb="0"/><line nr="194" mi="0" ci="7" mb="1" cb="3"/><line nr="195" mi="0" ci="2" mb="0" cb="0"/><line nr="198" mi="0" ci="6" mb="0" cb="0"/><line nr="199" mi="0" ci="2" mb="0" cb="2"/><line nr="200" mi="0" ci="2" mb="0" cb="0"/><line nr="203" mi="0" ci="6" mb="0" cb="0"/><line nr="205" mi="0" ci="6" mb="0" cb="0"/><line nr="206" mi="0" ci="8" mb="0" cb="0"/><line nr="207" mi="0" ci="1" mb="0" cb="0"/><line nr="213" mi="4" ci="4" mb="2" cb="2"/><line nr="214" mi="0" ci="3" mb="0" cb="0"/><line nr="215" mi="0" ci="3" mb="0" cb="0"/><line nr="217" mi="0" ci="9" mb="0" cb="2"/><line nr="219" mi="3" ci="6" mb="1" cb="1"/><line nr="222" mi="3" ci="1" mb="0" cb="0"/><line nr="229" mi="4" ci="4" mb="2" cb="2"/><line nr="230" mi="0" ci="9" mb="0" cb="0"/><line nr="235" mi="0" ci="2" mb="0" cb="0"/><line nr="265" mi="0" ci="3" mb="0" cb="0"/><line nr="266" mi="0" ci="3" mb="0" cb="0"/><line nr="267" mi="0" ci="3" mb="0" cb="0"/><line nr="268" mi="0" ci="11" mb="0" cb="2"/><line nr="269" mi="0" ci="4" mb="0" cb="0"/><line nr="270" mi="0" ci="3" mb="0" cb="0"/><line nr="271" mi="0" ci="1" mb="0" cb="0"/><line nr="273" mi="0" ci="4" mb="0" cb="0"/><line nr="274" mi="0" ci="11" mb="0" cb="2"/><line nr="275" mi="0" ci="4" mb="0" cb="0"/><line nr="276" mi="0" ci="4" mb="0" cb="2"/><line nr="277" mi="0" ci="4" mb="0" cb="0"/><line nr="278" mi="0" ci="3" mb="0" cb="0"/><line nr="279" mi="0" ci="7" mb="1" cb="1"/><line nr="280" mi="4" ci="6" mb="2" cb="2"/><line nr="282" mi="0" ci="8" mb="0" cb="0"/><line nr="284" mi="0" ci="2" mb="0" cb="0"/><line nr="288" mi="0" ci="1" mb="0" cb="0"/><line nr="290" mi="0" ci="7" mb="0" cb="0"/><line nr="291" mi="0" ci="11" mb="0" cb="2"/><line nr="292" mi="0" ci="6" mb="0" cb="0"/><line nr="293" mi="0" ci="3" mb="0" cb="0"/><line nr="294" mi="0" ci="3" mb="0" cb="0"/><line nr="295" mi="0" ci="7" mb="0" cb="0"/><line nr="296" mi="0" ci="6" mb="0" cb="0"/><line nr="298" mi="0" ci="1" mb="0" cb="0"/><line nr="300" mi="0" ci="7" mb="0" cb="0"/><line nr="340" mi="0" ci="5" mb="0" cb="0"/><line nr="341" mi="0" ci="5" mb="0" cb="0"/><line nr="343" mi="0" ci="4" mb="0" cb="2"/><line nr="344" mi="0" ci="2" mb="0" cb="0"/><line nr="347" mi="0" ci="3" mb="0" cb="0"/><line nr="351" mi="0" ci="5" mb="0" cb="0"/><line nr="352" mi="0" ci="2" mb="0" cb="2"/><line nr="353" mi="0" ci="2" mb="0" cb="0"/><line nr="358" mi="0" ci="4" mb="0" cb="2"/><line nr="359" mi="0" ci="2" mb="0" cb="0"/><line nr="362" mi="0" ci="3" mb="0" cb="0"/><line nr="363" mi="0" ci="4" mb="0" cb="0"/><line nr="364" mi="0" ci="3" mb="0" cb="2"/><line nr="365" mi="0" ci="4" mb="0" cb="0"/><line nr="371" mi="0" ci="8" mb="0" cb="4"/><line nr="372" mi="0" ci="4" mb="0" cb="0"/><line nr="375" mi="0" ci="3" mb="0" cb="0"/><line nr="376" mi="0" ci="3" mb="0" cb="0"/><line nr="378" mi="0" ci="4" mb="0" cb="0"/><line nr="379" mi="0" ci="8" mb="0" cb="2"/><line nr="380" mi="0" ci="9" mb="0" cb="0"/><line nr="383" mi="0" ci="8" mb="0" cb="0"/><line nr="384" mi="0" ci="1" mb="0" cb="0"/><line nr="385" mi="0" ci="3" mb="0" cb="0"/><line nr="398" mi="2" ci="6" mb="1" cb="1"/><line nr="399" mi="0" ci="3" mb="0" cb="0"/><line nr="400" mi="0" ci="4" mb="0" cb="0"/><line nr="401" mi="0" ci="1" mb="0" cb="0"/><line nr="412" mi="4" ci="4" mb="2" cb="2"/><line nr="413" mi="0" ci="2" mb="0" cb="0"/><line nr="424" mi="0" ci="11" mb="0" cb="2"/><line nr="425" mi="0" ci="4" mb="0" cb="2"/><line nr="426" mi="0" ci="6" mb="0" cb="0"/><line nr="427" mi="0" ci="1" mb="0" cb="0"/><line nr="429" mi="0" ci="1" mb="0" cb="0"/><line nr="432" mi="0" ci="4" mb="0" cb="0"/><line nr="433" mi="0" ci="4" mb="0" cb="0"/><line nr="434" mi="0" ci="2" mb="0" cb="0"/><line nr="436" mi="0" ci="2" mb="0" cb="2"/><line nr="438" mi="0" ci="3" mb="0" cb="0"/><line nr="441" mi="0" ci="3" mb="0" cb="0"/><line nr="442" mi="0" ci="6" mb="0" cb="4"/><line nr="446" mi="0" ci="3" mb="0" cb="0"/><line nr="451" mi="0" ci="3" mb="0" cb="0"/><line nr="452" mi="0" ci="10" mb="0" cb="2"/><line nr="453" mi="0" ci="4" mb="0" cb="0"/><line nr="454" mi="0" ci="6" mb="0" cb="2"/><line nr="455" mi="0" ci="3" mb="0" cb="0"/><line nr="457" mi="0" ci="1" mb="0" cb="0"/><line nr="458" mi="0" ci="3" mb="0" cb="0"/><line nr="469" mi="4" ci="4" mb="2" cb="2"/><line nr="470" mi="0" ci="12" mb="0" cb="2"/><line nr="471" mi="0" ci="7" mb="0" cb="2"/><line nr="472" mi="0" ci="7" mb="0" cb="2"/><line nr="483" mi="4" ci="4" mb="2" cb="2"/><line nr="484" mi="0" ci="8" mb="0" cb="0"/><line nr="496" mi="4" ci="4" mb="2" cb="2"/><line nr="497" mi="0" ci="11" mb="0" cb="2"/><line nr="498" mi="0" ci="6" mb="0" cb="2"/><line nr="499" mi="0" ci="3" mb="0" cb="0"/><line nr="501" mi="0" ci="1" mb="0" cb="0"/><line nr="502" mi="0" ci="3" mb="0" cb="0"/><line nr="524" mi="2" ci="6" mb="1" cb="1"/><line nr="525" mi="0" ci="3" mb="0" cb="0"/><line nr="526" mi="0" ci="4" mb="0" cb="0"/><line nr="527" mi="0" ci="1" mb="0" cb="0"/><line nr="539" mi="4" ci="4" mb="2" cb="2"/><line nr="540" mi="0" ci="10" mb="0" cb="2"/><line nr="541" mi="0" ci="8" mb="0" cb="2"/><line nr="551" mi="4" ci="4" mb="2" cb="2"/><line nr="552" mi="0" ci="8" mb="0" cb="0"/><line nr="555" mi="0" ci="30" mb="0" cb="0"/><line nr="558" mi="0" ci="6" mb="0" cb="0"/><line nr="565" mi="4" ci="4" mb="2" cb="2"/><line nr="566" mi="0" ci="4" mb="0" cb="2"/><line nr="567" mi="0" ci="3" mb="0" cb="0"/><line nr="570" mi="0" ci="6" mb="0" cb="0"/><line nr="571" mi="0" ci="6" mb="0" cb="0"/><line nr="572" mi="0" ci="22" mb="1" cb="9"/><line nr="583" mi="4" ci="4" mb="2" cb="2"/><line nr="584" mi="0" ci="8" mb="0" cb="0"/><line nr="600" mi="4" ci="4" mb="2" cb="2"/><line nr="601" mi="0" ci="7" mb="0" cb="0"/><line nr="618" mi="0" ci="5" mb="0" cb="0"/><line nr="619" mi="0" ci="5" mb="0" cb="0"/><line nr="622" mi="0" ci="9" mb="0" cb="4"/><line nr="623" mi="0" ci="2" mb="0" cb="0"/><line nr="626" mi="0" ci="8" mb="0" cb="0"/><line nr="644" mi="0" ci="3" mb="0" cb="0"/><line nr="645" mi="0" ci="3" mb="0" cb="0"/><line nr="646" mi="0" ci="3" mb="0" cb="0"/><line nr="647" mi="0" ci="3" mb="0" cb="0"/><line nr="665" mi="0" ci="4" mb="0" cb="2"/><line nr="666" mi="0" ci="4" mb="0" cb="0"/><line nr="667" mi="0" ci="4" mb="0" cb="0"/><line nr="668" mi="0" ci="6" mb="0" cb="2"/><line nr="669" mi="0" ci="6" mb="0" cb="2"/><line nr="671" mi="0" ci="4" mb="0" cb="2"/><line nr="673" mi="0" ci="4" mb="0" cb="0"/><line nr="674" mi="0" ci="4" mb="0" cb="0"/><line nr="676" mi="0" ci="2" mb="0" cb="2"/><line nr="677" mi="0" ci="2" mb="0" cb="2"/><line nr="679" mi="0" ci="5" mb="0" cb="0"/><line nr="680" mi="0" ci="2" mb="0" cb="2"/><line nr="682" mi="0" ci="2" mb="0" cb="0"/><line nr="685" mi="0" ci="2" mb="0" cb="0"/><line nr="686" mi="0" ci="2" mb="0" cb="2"/><line nr="687" mi="0" ci="2" mb="0" cb="2"/><line nr="689" mi="0" ci="5" mb="0" cb="0"/><line nr="693" mi="0" ci="6" mb="0" cb="2"/><line nr="694" mi="0" ci="7" mb="0" cb="2"/><line nr="700" mi="0" ci="8" mb="0" cb="4"/><line nr="701" mi="0" ci="7" mb="0" cb="2"/><line nr="706" mi="0" ci="2" mb="0" cb="2"/><line nr="708" mi="0" ci="8" mb="0" cb="0"/><line nr="709" mi="0" ci="2" mb="0" cb="2"/><line nr="711" mi="0" ci="8" mb="0" cb="0"/><line nr="714" mi="0" ci="2" mb="0" cb="0"/><line nr="718" mi="0" ci="5" mb="0" cb="0"/><line nr="726" mi="0" ci="3" mb="0" cb="0"/><line nr="727" mi="0" ci="3" mb="0" cb="0"/><line nr="728" mi="0" ci="8" mb="0" cb="0"/><line nr="729" mi="0" ci="4" mb="0" cb="2"/><line nr="730" mi="0" ci="5" mb="0" cb="0"/><line nr="732" mi="0" ci="10" mb="0" cb="2"/><line nr="733" mi="0" ci="5" mb="0" cb="0"/><line nr="734" mi="0" ci="1" mb="0" cb="0"/><line nr="735" mi="0" ci="7" mb="0" cb="4"/><line nr="736" mi="0" ci="7" mb="0" cb="0"/><line nr="738" mi="0" ci="2" mb="0" cb="0"/><line nr="758" mi="0" ci="2" mb="0" cb="0"/><line nr="759" mi="0" ci="3" mb="0" cb="0"/><line nr="760" mi="0" ci="3" mb="0" cb="0"/><line nr="761" mi="0" ci="3" mb="0" cb="0"/><line nr="762" mi="0" ci="3" mb="0" cb="0"/><line nr="763" mi="0" ci="1" mb="0" cb="0"/><line nr="775" mi="0" ci="6" mb="0" cb="0"/><line nr="776" mi="0" ci="3" mb="0" cb="0"/><line nr="777" mi="0" ci="2" mb="0" cb="0"/><line nr="778" mi="0" ci="3" mb="0" cb="2"/><line nr="779" mi="0" ci="1" mb="0" cb="0"/><line nr="780" mi="0" ci="5" mb="0" cb="0"/><line nr="781" mi="0" ci="4" mb="0" cb="0"/><line nr="783" mi="0" ci="4" mb="0" cb="0"/><line nr="784" mi="0" ci="3" mb="0" cb="0"/><line nr="811" mi="0" ci="4" mb="0" cb="0"/><line nr="813" mi="0" ci="4" mb="0" cb="0"/><line nr="814" mi="0" ci="4" mb="0" cb="0"/><line nr="817" mi="0" ci="12" mb="0" cb="0"/><line nr="819" mi="0" ci="4" mb="0" cb="0"/><line nr="824" mi="0" ci="3" mb="0" cb="2"/><line nr="826" mi="0" ci="2" mb="0" cb="0"/><line nr="827" mi="0" ci="10" mb="0" cb="2"/><line nr="828" mi="0" ci="5" mb="0" cb="0"/><line nr="829" mi="0" ci="7" mb="1" cb="3"/><line nr="830" mi="0" ci="2" mb="0" cb="0"/><line nr="832" mi="0" ci="1" mb="0" cb="0"/><line nr="835" mi="4" ci="7" mb="3" cb="3"/><line nr="839" mi="0" ci="5" mb="0" cb="2"/><line nr="840" mi="0" ci="4" mb="0" cb="0"/><line nr="844" mi="0" ci="5" mb="0" cb="0"/><line nr="845" mi="0" ci="4" mb="0" cb="0"/><line nr="847" mi="0" ci="13" mb="0" cb="2"/><line nr="850" mi="0" ci="4" mb="0" cb="0"/><line nr="851" mi="0" ci="5" mb="0" cb="0"/><line nr="853" mi="0" ci="2" mb="0" cb="2"/><line nr="854" mi="0" ci="9" mb="0" cb="0"/><line nr="855" mi="0" ci="5" mb="0" cb="0"/><line nr="858" mi="0" ci="5" mb="0" cb="0"/><line nr="859" mi="0" ci="7" mb="0" cb="4"/><line nr="860" mi="0" ci="4" mb="0" cb="0"/><line nr="861" mi="0" ci="4" mb="0" cb="0"/><line nr="862" mi="0" ci="4" mb="0" cb="0"/><line nr="864" mi="0" ci="1" mb="0" cb="0"/><line nr="865" mi="0" ci="1" mb="0" cb="0"/><line nr="866" mi="0" ci="2" mb="0" cb="0"/><line nr="874" mi="0" ci="6" mb="0" cb="0"/><line nr="877" mi="0" ci="3" mb="0" cb="0"/><line nr="878" mi="0" ci="9" mb="0" cb="2"/><line nr="880" mi="0" ci="4" mb="0" cb="0"/><line nr="881" mi="0" ci="10" mb="0" cb="0"/><line nr="889" mi="0" ci="9" mb="0" cb="0"/><line nr="901" mi="0" ci="6" mb="0" cb="0"/><line nr="913" mi="0" ci="9" mb="0" cb="0"/><line nr="923" mi="0" ci="2" mb="0" cb="0"/><line nr="936" mi="0" ci="3" mb="0" cb="0"/><line nr="937" mi="0" ci="3" mb="0" cb="0"/><line nr="939" mi="0" ci="7" mb="0" cb="0"/><line nr="953" mi="0" ci="3" mb="0" cb="0"/><line nr="954" mi="0" ci="3" mb="0" cb="0"/><line nr="956" mi="0" ci="4" mb="0" cb="2"/><line nr="957" mi="0" ci="4" mb="0" cb="0"/><line nr="958" mi="0" ci="4" mb="0" cb="2"/><line nr="959" mi="0" ci="4" mb="0" cb="0"/><line nr="961" mi="0" ci="2" mb="0" cb="0"/><line nr="977" mi="0" ci="5" mb="0" cb="0"/><line nr="978" mi="0" ci="5" mb="0" cb="0"/><line nr="980" mi="0" ci="12" mb="0" cb="4"/><line nr="997" mi="0" ci="2" mb="0" cb="0"/><line nr="998" mi="0" ci="3" mb="0" cb="2"/><line nr="999" mi="0" ci="3" mb="0" cb="0"/><line nr="1000" mi="0" ci="3" mb="1" cb="1"/><line nr="1001" mi="0" ci="3" mb="0" cb="0"/><line nr="1002" mi="0" ci="6" mb="0" cb="0"/><line nr="1003" mi="0" ci="2" mb="0" cb="0"/><line nr="1004" mi="0" ci="10" mb="0" cb="2"/><line nr="1005" mi="0" ci="1" mb="0" cb="0"/><line nr="1006" mi="0" ci="4" mb="0" cb="0"/><line nr="1007" mi="0" ci="1" mb="0" cb="0"/><line nr="1011" mi="0" ci="2" mb="0" cb="2"/><line nr="1012" mi="0" ci="3" mb="0" cb="0"/><line nr="1013" mi="0" ci="4" mb="0" cb="0"/><line nr="1016" mi="0" ci="4" mb="0" cb="0"/><line nr="1017" mi="0" ci="2" mb="0" cb="0"/><line nr="1026" mi="0" ci="4" mb="0" cb="0"/><line nr="1029" mi="0" ci="3" mb="0" cb="0"/><line nr="1032" mi="0" ci="3" mb="0" cb="0"/><line nr="1033" mi="0" ci="3" mb="0" cb="0"/><line nr="1040" mi="0" ci="4" mb="0" cb="4"/><line nr="1043" mi="0" ci="2" mb="0" cb="0"/><line nr="1044" mi="0" ci="4" mb="0" cb="0"/><line nr="1045" mi="0" ci="2" mb="0" cb="2"/><line nr="1052" mi="0" ci="6" mb="0" cb="0"/><line nr="1053" mi="0" ci="4" mb="0" cb="0"/><line nr="1057" mi="4" ci="4" mb="2" cb="2"/><line nr="1059" mi="0" ci="2" mb="0" cb="0"/><line nr="1060" mi="0" ci="2" mb="0" cb="0"/><line nr="1063" mi="0" ci="7" mb="0" cb="0"/><line nr="1075" mi="0" ci="3" mb="0" cb="0"/><line nr="1076" mi="0" ci="3" mb="0" cb="0"/><line nr="1080" mi="0" ci="4" mb="0" cb="2"/><line nr="1081" mi="0" ci="2" mb="0" cb="0"/><line nr="1084" mi="0" ci="3" mb="0" cb="0"/><line nr="1085" mi="0" ci="3" mb="0" cb="0"/><line nr="1086" mi="0" ci="3" mb="0" cb="2"/><line nr="1087" mi="0" ci="2" mb="0" cb="0"/><line nr="1090" mi="0" ci="4" mb="0" cb="0"/><line nr="1091" mi="0" ci="3" mb="0" cb="0"/><line nr="1092" mi="0" ci="4" mb="0" cb="0"/><line nr="1093" mi="0" ci="4" mb="0" cb="0"/><line nr="1094" mi="0" ci="4" mb="0" cb="0"/><line nr="1095" mi="0" ci="8" mb="0" cb="2"/><line nr="1096" mi="0" ci="4" mb="0" cb="0"/><line nr="1097" mi="0" ci="4" mb="0" cb="0"/><line nr="1100" mi="0" ci="4" mb="0" cb="2"/><line nr="1101" mi="0" ci="4" mb="0" cb="0"/><line nr="1102" mi="0" ci="3" mb="0" cb="0"/><line nr="1106" mi="0" ci="5" mb="0" cb="0"/><line nr="1107" mi="0" ci="6" mb="0" cb="0"/><line nr="1109" mi="0" ci="5" mb="0" cb="0"/><line nr="1112" mi="0" ci="3" mb="0" cb="0"/><line nr="1117" mi="0" ci="4" mb="0" cb="2"/><line nr="1118" mi="0" ci="8" mb="0" cb="0"/><line nr="1120" mi="0" ci="5" mb="0" cb="0"/><line nr="1123" mi="0" ci="5" mb="0" cb="0"/><line nr="1155" mi="0" ci="3" mb="0" cb="0"/><line nr="1156" mi="0" ci="3" mb="0" cb="0"/><line nr="1157" mi="0" ci="3" mb="0" cb="0"/><line nr="1158" mi="0" ci="3" mb="0" cb="0"/><line nr="1159" mi="0" ci="3" mb="0" cb="0"/><line nr="1160" mi="0" ci="3" mb="0" cb="0"/><line nr="1162" mi="0" ci="5" mb="0" cb="0"/><line nr="1163" mi="0" ci="5" mb="0" cb="0"/><line nr="1164" mi="0" ci="2" mb="0" cb="0"/><line nr="1254" mi="2" ci="13" mb="1" cb="1"/><line nr="1257" mi="4" ci="4" mb="2" cb="2"/><line nr="1258" mi="0" ci="7" mb="0" cb="0"/><line nr="1259" mi="0" ci="2" mb="0" cb="0"/><line nr="1264" mi="4" ci="4" mb="2" cb="2"/><line nr="1265" mi="0" ci="4" mb="0" cb="0"/><line nr="1266" mi="0" ci="2" mb="0" cb="0"/><line nr="1271" mi="4" ci="4" mb="2" cb="2"/><line nr="1272" mi="0" ci="7" mb="0" cb="0"/><line nr="1273" mi="0" ci="2" mb="0" cb="0"/><line nr="1278" mi="4" ci="4" mb="2" cb="2"/><line nr="1279" mi="0" ci="3" mb="0" cb="0"/><line nr="1280" mi="0" ci="4" mb="0" cb="0"/><line nr="1281" mi="0" ci="4" mb="0" cb="2"/><line nr="1282" mi="0" ci="6" mb="0" cb="0"/><line nr="1283" mi="0" ci="8" mb="0" cb="0"/><line nr="1285" mi="0" ci="5" mb="0" cb="0"/><line nr="1288" mi="0" ci="3" mb="0" cb="0"/><line nr="1289" mi="0" ci="3" mb="0" cb="2"/><line nr="1290" mi="0" ci="4" mb="0" cb="0"/><line nr="1291" mi="0" ci="5" mb="0" cb="0"/><line nr="1292" mi="0" ci="4" mb="0" cb="0"/><line nr="1294" mi="0" ci="2" mb="0" cb="0"/><line nr="1299" mi="4" ci="4" mb="2" cb="2"/><line nr="1300" mi="0" ci="6" mb="0" cb="0"/><line nr="1301" mi="0" ci="4" mb="0" cb="0"/><line nr="1302" mi="0" ci="2" mb="0" cb="0"/><line nr="1307" mi="4" ci="4" mb="2" cb="2"/><line nr="1308" mi="0" ci="5" mb="0" cb="0"/><line nr="1309" mi="0" ci="2" mb="0" cb="2"/><line nr="1310" mi="0" ci="4" mb="0" cb="0"/><line nr="1311" mi="0" ci="5" mb="0" cb="0"/><line nr="1312" mi="0" ci="5" mb="0" cb="0"/><line nr="1314" mi="0" ci="6" mb="0" cb="0"/><line nr="1316" mi="0" ci="2" mb="0" cb="0"/><line nr="1321" mi="4" ci="4" mb="2" cb="2"/><line nr="1322" mi="0" ci="4" mb="0" cb="0"/><line nr="1323" mi="0" ci="3" mb="0" cb="0"/><line nr="1324" mi="0" ci="2" mb="0" cb="2"/><line nr="1325" mi="0" ci="4" mb="0" cb="0"/><line nr="1326" mi="0" ci="5" mb="0" cb="0"/><line nr="1328" mi="0" ci="3" mb="0" cb="0"/><line nr="1329" mi="0" ci="2" mb="0" cb="2"/><line nr="1330" mi="0" ci="4" mb="0" cb="0"/><line nr="1331" mi="0" ci="5" mb="0" cb="0"/><line nr="1333" mi="0" ci="2" mb="0" cb="0"/><line nr="1338" mi="4" ci="4" mb="2" cb="2"/><line nr="1339" mi="0" ci="6" mb="0" cb="0"/><line nr="1340" mi="0" ci="2" mb="0" cb="0"/><line nr="1344" mi="4" ci="5" mb="2" cb="2"/><line nr="1346" mi="0" ci="2" mb="0" cb="0"/><line nr="1347" mi="0" ci="10" mb="0" cb="2"/><line nr="1348" mi="0" ci="2" mb="0" cb="2"/><line nr="1349" mi="0" ci="3" mb="0" cb="0"/><line nr="1351" mi="0" ci="4" mb="0" cb="0"/><line nr="1353" mi="0" ci="5" mb="0" cb="0"/><line nr="1354" mi="0" ci="1" mb="0" cb="0"/><line nr="1355" mi="0" ci="1" mb="0" cb="0"/><line nr="1365" mi="0" ci="5" mb="0" cb="0"/><line nr="1367" mi="0" ci="5" mb="0" cb="0"/><line nr="1368" mi="0" ci="6" mb="0" cb="0"/><line nr="1369" mi="0" ci="3" mb="0" cb="0"/><counter type="INSTRUCTION" missed="120" covered="1856"/><counter type="BRANCH" missed="64" covered="244"/><counter type="LINE" missed="0" covered="406"/><counter type="COMPLEXITY" missed="64" covered="149"/><counter type="METHOD" missed="0" covered="59"/><counter type="CLASS" missed="0" covered="8"/></sourcefile><counter type="INSTRUCTION" missed="120" covered="1896"/><counter type="BRANCH" missed="64" covered="248"/><counter type="LINE" missed="0" covered="416"/><counter type="COMPLEXITY" missed="64" covered="156"/><counter type="METHOD" missed="0" covered="64"/><counter type="CLASS" missed="0" covered="9"/></package><package name="net/florianschoppmann/java/reflect"><class name="net/florianschoppmann/java/reflect/ImmutableList"><method name="&lt;init&gt;" desc="([Ljava/lang/Object;)V" line="12"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="copyOf" desc="(Ljava/util/List;)Lnet/florianschoppmann/java/reflect/ImmutableList;" line="17"><counter type="INSTRUCTION" missed="0" covered="15"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="emptyList" desc="()Lnet/florianschoppmann/java/reflect/ImmutableList;" line="26"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="get" desc="(I)Ljava/lang/Object;" line="33"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="size" desc="()I" line="38"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="8"><counter type="INSTRUCTION" missed="0" covered="7"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="39"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="10"/><counter type="COMPLEXITY" missed="0" covered="7"/><counter type="METHOD" missed="0" covered="6"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/ReflectionTypes"><method name="&lt;init&gt;" desc="()V" line="59"><counter type="INSTRUCTION" missed="0" covered="93"/><counter type="LINE" missed="0" covered="15"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getInstance" desc="()Lnet/florianschoppmann/java/reflect/ReflectionTypes;" line="88"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="requireValidElement" desc="(Ljavax/lang/model/element/Element;)V" line="93"><counter type="INSTRUCTION" missed="0" covered="29"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="requireValidType" desc="(Ljavax/lang/model/type/TypeMirror;)V" line="104"><counter type="INSTRUCTION" missed="0" covered="28"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="addPrimitive" desc="(Ljava/util/List;Ljava/util/List;Ljavax/lang/model/type/TypeKind;Lnet/florianschoppmann/java/reflect/PrimitiveTypeImpl;Ljava/lang/Class;)V" line="114"><counter type="INSTRUCTION" missed="0" covered="17"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="boxedClass" desc="(Ljavax/lang/model/type/PrimitiveType;)Ljavax/lang/model/element/TypeElement;" line="120"><counter type="INSTRUCTION" missed="5" covered="19"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="unboxedType" desc="(Ljavax/lang/model/type/TypeMirror;)Ljavax/lang/model/type/PrimitiveType;" line="128"><counter type="INSTRUCTION" missed="0" covered="98"/><counter type="BRANCH" missed="0" covered="18"/><counter type="LINE" missed="0" covered="21"/><counter type="COMPLEXITY" missed="0" covered="10"/><counter type="METHOD" missed="0" covered="1"/></method><method name="mirrorClass" desc="(Ljava/lang/Class;Lnet/florianschoppmann/java/reflect/MirrorContext;)Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;" line="162"><counter type="INSTRUCTION" missed="0" covered="42"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="9"/><counter type="COMPLEXITY" missed="0" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="mirrorParameterizedType" desc="(Ljava/lang/reflect/ParameterizedType;Lnet/florianschoppmann/java/reflect/MirrorContext;)Lnet/florianschoppmann/java/reflect/DeclaredTypeImpl;" line="182"><counter type="INSTRUCTION" missed="0" covered="29"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="7"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="mirrorWildcardType" desc="(Ljava/lang/reflect/WildcardType;Lnet/florianschoppmann/java/reflect/MirrorContext;)Lnet/florianschoppmann/java/reflect/WildcardTypeImpl;" line="206"><counter type="INSTRUCTION" missed="4" covered="58"/><counter type="BRANCH" missed="4" covered="10"/><counter type="LINE" missed="0" covered="11"/><counter type="COMPLEXITY" missed="4" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="requireCondition" desc="(ZLjava/lang/String;Ljava/lang/Object;)V" line="230"><counter type="INSTRUCTION" missed="0" covered="15"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="mirrorTypeVariable" desc="(Ljava/lang/reflect/TypeVariable;Lnet/florianschoppmann/java/reflect/MirrorContext;)Lnet/florianschoppmann/java/reflect/TypeVariableImpl;" line="236"><counter type="INSTRUCTION" missed="6" covered="53"/><counter type="BRANCH" missed="4" covered="8"/><counter type="LINE" missed="0" covered="13"/><counter type="COMPLEXITY" missed="4" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="mirrorInternal" desc="(Ljava/lang/reflect/Type;Lnet/florianschoppmann/java/reflect/MirrorContext;)Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;" line="256"><counter type="INSTRUCTION" missed="6" covered="64"/><counter type="BRANCH" missed="4" covered="12"/><counter type="LINE" missed="0" covered="15"/><counter type="COMPLEXITY" missed="4" covered="5"/><counter type="METHOD" missed="0" covered="1"/></method><method name="typeElement" desc="(Ljava/lang/Class;)Ljavax/lang/model/element/TypeElement;" line="287"><counter type="INSTRUCTION" missed="0" covered="24"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="typeMirror" desc="(Ljava/lang/reflect/Type;)Ljavax/lang/model/type/TypeMirror;" line="308"><counter type="INSTRUCTION" missed="0" covered="51"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="13"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toList" desc="([Ljavax/lang/model/type/TypeMirror;)Lnet/florianschoppmann/java/reflect/ImmutableList;" line="325"><counter type="INSTRUCTION" missed="0" covered="30"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getDeclaredType" desc="(Ljavax/lang/model/type/DeclaredType;Ljavax/lang/model/element/TypeElement;[Ljavax/lang/model/type/TypeMirror;)Ljavax/lang/model/type/DeclaredType;" line="335"><counter type="INSTRUCTION" missed="0" covered="25"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getDeclaredType" desc="(Ljavax/lang/model/element/TypeElement;[Ljavax/lang/model/type/TypeMirror;)Ljavax/lang/model/type/DeclaredType;" line="347"><counter type="INSTRUCTION" missed="0" covered="15"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getNoType" desc="(Ljavax/lang/model/type/TypeKind;)Ljavax/lang/model/type/NoType;" line="355"><counter type="INSTRUCTION" missed="0" covered="39"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="7"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getNullType" desc="()Ljavax/lang/model/type/NullType;" line="368"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getArrayType" desc="(Ljavax/lang/model/type/TypeMirror;)Ljavax/lang/model/type/ArrayType;" line="373"><counter type="INSTRUCTION" missed="0" covered="12"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="createTypeVariable" desc="(Ljavax/lang/model/element/TypeParameterElement;Ljavax/lang/model/type/WildcardType;)Ljavax/lang/model/type/TypeVariable;" line="382"><counter type="INSTRUCTION" missed="0" covered="16"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="capturedTypeArgument" desc="(Ljavax/lang/model/type/TypeVariable;)Ljavax/lang/model/type/WildcardType;" line="390"><counter type="INSTRUCTION" missed="0" covered="9"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getIntersectionType" desc="([Ljavax/lang/model/type/TypeMirror;)Lnet/florianschoppmann/java/type/IntersectionType;" line="397"><counter type="INSTRUCTION" missed="0" covered="46"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="setTypeVariableBounds" desc="(Ljavax/lang/model/type/TypeVariable;Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)V" line="414"><counter type="INSTRUCTION" missed="0" covered="23"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getPrimitiveType" desc="(Ljavax/lang/model/type/TypeKind;)Ljavax/lang/model/type/PrimitiveType;" line="426"><counter type="INSTRUCTION" missed="0" covered="23"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getWildcardType" desc="(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Ljavax/lang/model/type/WildcardType;" line="436"><counter type="INSTRUCTION" missed="0" covered="14"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="unsupportedException" desc="()Ljava/lang/UnsupportedOperationException;" line="443"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="isAssignable" desc="(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z" line="450"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="isSubsignature" desc="(Ljavax/lang/model/type/ExecutableType;Ljavax/lang/model/type/ExecutableType;)Z" line="455"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="asMemberOf" desc="(Ljavax/lang/model/type/DeclaredType;Ljavax/lang/model/element/Element;)Ljavax/lang/model/type/TypeMirror;" line="460"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="directSupertypes" desc="(Ljavax/lang/model/type/TypeMirror;)Ljava/util/List;" line="468"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="53"><counter type="INSTRUCTION" missed="2" covered="10"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="25" covered="897"/><counter type="BRANCH" missed="15" covered="89"/><counter type="LINE" missed="1" covered="181"/><counter type="COMPLEXITY" missed="16" covered="69"/><counter type="METHOD" missed="1" covered="32"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/TypeVariableImpl"><method name="&lt;init&gt;" desc="(Lnet/florianschoppmann/java/reflect/TypeParameterElementImpl;Lnet/florianschoppmann/java/reflect/WildcardTypeImpl;)V" line="10"><counter type="INSTRUCTION" missed="0" covered="15"/><counter type="LINE" missed="0" covered="6"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="26"><counter type="INSTRUCTION" missed="6" covered="54"/><counter type="BRANCH" missed="7" covered="13"/><counter type="LINE" missed="0" covered="11"/><counter type="COMPLEXITY" missed="7" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="hashCode" desc="()I" line="44"><counter type="INSTRUCTION" missed="0" covered="26"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="accept" desc="(Ljavax/lang/model/type/TypeVisitor;Ljava/lang/Object;)Ljava/lang/Object;" line="51"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="()Ljava/lang/String;" line="56"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="requireUnfrozen" desc="()V" line="60"><counter type="INSTRUCTION" missed="0" covered="17"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="requireFrozen" desc="()V" line="68"><counter type="INSTRUCTION" missed="0" covered="17"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="asElement" desc="()Lnet/florianschoppmann/java/reflect/TypeParameterElementImpl;" line="77"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getUpperBound" desc="()Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;" line="82"><counter type="INSTRUCTION" missed="5" covered="10"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getLowerBound" desc="()Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;" line="89"><counter type="INSTRUCTION" missed="5" covered="10"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="setUpperAndLowerBounds" desc="(Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;)V" line="95"><counter type="INSTRUCTION" missed="0" covered="18"/><counter type="LINE" missed="0" covered="7"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getKind" desc="()Ljavax/lang/model/type/TypeKind;" line="106"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getCapturedTypeArgument" desc="()Lnet/florianschoppmann/java/reflect/WildcardTypeImpl;" line="111"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="9"><counter type="INSTRUCTION" missed="2" covered="6"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="18" covered="190"/><counter type="BRANCH" missed="12" covered="22"/><counter type="LINE" missed="0" covered="46"/><counter type="COMPLEXITY" missed="12" covered="19"/><counter type="METHOD" missed="0" covered="14"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/TypeParameterElementImpl"><method name="&lt;init&gt;" desc="(Ljava/lang/reflect/TypeVariable;Lnet/florianschoppmann/java/reflect/ElementImpl;)V" line="18"><counter type="INSTRUCTION" missed="0" covered="20"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="26"><counter type="INSTRUCTION" missed="0" covered="21"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="hashCode" desc="()I" line="37"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="()Ljava/lang/String;" line="42"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="accept" desc="(Ljavax/lang/model/element/ElementVisitor;Ljava/lang/Object;)Ljava/lang/Object;" line="47"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getGenericElement" desc="()Lnet/florianschoppmann/java/reflect/ElementImpl;" line="52"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getBounds" desc="()Ljava/util/List;" line="57"><counter type="INSTRUCTION" missed="5" covered="10"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getEnclosingElement" desc="()Lnet/florianschoppmann/java/reflect/ElementImpl;" line="64"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="asType" desc="()Lnet/florianschoppmann/java/reflect/TypeVariableImpl;" line="69"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getKind" desc="()Ljavax/lang/model/element/ElementKind;" line="74"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getSimpleName" desc="()Ljavax/lang/model/element/Name;" line="79"><counter type="INSTRUCTION" missed="0" covered="7"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getEnclosedElements" desc="()Lnet/florianschoppmann/java/reflect/ImmutableList;" line="84"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="finishDerivedFromElement" desc="(Lnet/florianschoppmann/java/reflect/MirrorContext;)V" line="89"><counter type="INSTRUCTION" missed="0" covered="30"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="12"><counter type="INSTRUCTION" missed="2" covered="6"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="7" covered="120"/><counter type="BRANCH" missed="3" covered="11"/><counter type="LINE" missed="0" covered="28"/><counter type="COMPLEXITY" missed="3" covered="18"/><counter type="METHOD" missed="0" covered="14"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/ElementImpl"><method name="&lt;init&gt;" desc="()V" line="6"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getModifiers" desc="()Ljava/util/Set;" line="11"><counter type="INSTRUCTION" missed="0" covered="12"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="requireFinished" desc="()V" line="17"><counter type="INSTRUCTION" missed="13" covered="4"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="1" covered="2"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="finish" desc="(Lnet/florianschoppmann/java/reflect/MirrorContext;)V" line="25"><counter type="INSTRUCTION" missed="13" covered="10"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="2" covered="4"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="26" covered="32"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="3" covered="9"/><counter type="COMPLEXITY" missed="2" covered="4"/><counter type="METHOD" missed="0" covered="4"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/IntersectionTypeImpl"><method name="&lt;init&gt;" desc="(Ljava/util/List;)V" line="15"><counter type="INSTRUCTION" missed="0" covered="10"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="23"><counter type="INSTRUCTION" missed="0" covered="21"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="hashCode" desc="()I" line="36"><counter type="INSTRUCTION" missed="0" covered="16"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="()Ljava/lang/String;" line="41"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="accept" desc="(Ljavax/lang/model/type/TypeVisitor;Ljava/lang/Object;)Ljava/lang/Object;" line="46"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getBounds" desc="()Ljava/util/List;" line="51"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getKind" desc="()Ljavax/lang/model/type/TypeKind;" line="56"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="isIntersectionType" desc="()Z" line="61"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="63"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="15"/><counter type="COMPLEXITY" missed="0" covered="11"/><counter type="METHOD" missed="0" covered="8"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/MirrorContext"><method name="&lt;init&gt;" desc="(Lnet/florianschoppmann/java/reflect/ReflectionTypes;Ljava/util/Map;Ljava/util/Map;)V" line="15"><counter type="INSTRUCTION" missed="0" covered="12"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="mirror" desc="([Ljava/lang/reflect/Type;)Lnet/florianschoppmann/java/reflect/ImmutableList;" line="22"><counter type="INSTRUCTION" missed="0" covered="31"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="mirror" desc="(Ljava/lang/reflect/Type;)Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;" line="39"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="typeDeclaration" desc="(Ljava/lang/Class;)Lnet/florianschoppmann/java/reflect/TypeElementImpl;" line="53"><counter type="INSTRUCTION" missed="0" covered="31"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="80"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="18"/><counter type="COMPLEXITY" missed="0" covered="7"/><counter type="METHOD" missed="0" covered="4"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/PrimitiveTypeImpl"><method name="&lt;init&gt;" desc="(Ljavax/lang/model/type/TypeKind;)V" line="20"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="()Ljava/lang/String;" line="26"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="accept" desc="(Ljavax/lang/model/type/TypeVisitor;Ljava/lang/Object;)Ljava/lang/Object;" line="31"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getKind" desc="()Ljavax/lang/model/type/TypeKind;" line="36"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="9"><counter type="INSTRUCTION" missed="0" covered="41"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="59"/><counter type="LINE" missed="0" covered="14"/><counter type="COMPLEXITY" missed="0" covered="5"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/DeclaredTypeImpl"><method name="&lt;init&gt;" desc="(Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;Lnet/florianschoppmann/java/reflect/TypeElementImpl;Ljava/util/List;)V" line="16"><counter type="INSTRUCTION" missed="0" covered="22"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="28"><counter type="INSTRUCTION" missed="0" covered="39"/><counter type="BRANCH" missed="2" covered="10"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="2" covered="5"/><counter type="METHOD" missed="0" covered="1"/></method><method name="hashCode" desc="()I" line="42"><counter type="INSTRUCTION" missed="0" covered="19"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="()Ljava/lang/String;" line="47"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="accept" desc="(Ljavax/lang/model/type/TypeVisitor;Ljava/lang/Object;)Ljava/lang/Object;" line="52"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="asElement" desc="()Lnet/florianschoppmann/java/reflect/TypeElementImpl;" line="57"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getEnclosingType" desc="()Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;" line="62"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getTypeArguments" desc="()Ljava/util/List;" line="67"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getKind" desc="()Ljavax/lang/model/type/TypeKind;" line="72"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="100"/><counter type="BRANCH" missed="2" covered="10"/><counter type="LINE" missed="0" covered="23"/><counter type="COMPLEXITY" missed="2" covered="13"/><counter type="METHOD" missed="0" covered="9"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/NameImpl"><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="10"><counter type="INSTRUCTION" missed="0" covered="8"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="16"><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="27"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="contentEquals" desc="(Ljava/lang/CharSequence;)Z" line="32"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="length" desc="()I" line="37"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="charAt" desc="(I)C" line="42"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="subSequence" desc="(II)Ljava/lang/CharSequence;" line="47"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="52"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="31" covered="25"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="7" covered="7"/><counter type="COMPLEXITY" missed="6" covered="5"/><counter type="METHOD" missed="3" covered="5"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/NoTypeImpl"><method name="&lt;init&gt;" desc="(Ljavax/lang/model/type/TypeKind;)V" line="14"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="()Ljava/lang/String;" line="20"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="accept" desc="(Ljavax/lang/model/type/TypeVisitor;Ljava/lang/Object;)Ljava/lang/Object;" line="25"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getKind" desc="()Ljavax/lang/model/type/TypeKind;" line="30"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="9"><counter type="INSTRUCTION" missed="0" covered="11"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="29"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="0" covered="5"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/NullTypeImpl"><method name="&lt;init&gt;" desc="()V" line="8"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="()Ljava/lang/String;" line="13"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="accept" desc="(Ljavax/lang/model/type/TypeVisitor;Ljava/lang/Object;)Ljava/lang/Object;" line="18"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getKind" desc="()Ljavax/lang/model/type/TypeKind;" line="23"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="9"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="19"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="5"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/ArrayTypeImpl"><method name="&lt;init&gt;" desc="(Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;)V" line="12"><counter type="INSTRUCTION" missed="0" covered="9"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="20"><counter type="INSTRUCTION" missed="0" covered="21"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="hashCode" desc="()I" line="33"><counter type="INSTRUCTION" missed="0" covered="16"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="()Ljava/lang/String;" line="38"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="accept" desc="(Ljavax/lang/model/type/TypeVisitor;Ljava/lang/Object;)Ljava/lang/Object;" line="43"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getComponentType" desc="()Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;" line="48"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getKind" desc="()Ljavax/lang/model/type/TypeKind;" line="53"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="60"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="14"/><counter type="COMPLEXITY" missed="0" covered="10"/><counter type="METHOD" missed="0" covered="7"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/AnnotatedConstructImpl"><method name="&lt;init&gt;" desc="()V" line="9"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="unsupportedException" desc="()Ljava/lang/UnsupportedOperationException;" line="11"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAnnotationMirrors" desc="()Ljava/util/List;" line="18"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAnnotation" desc="(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" line="23"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAnnotationsByType" desc="(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;" line="28"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="18" covered="3"/><counter type="LINE" missed="4" covered="1"/><counter type="COMPLEXITY" missed="4" covered="1"/><counter type="METHOD" missed="4" covered="1"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/WildcardTypeImpl"><method name="&lt;init&gt;" desc="(Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;)V" line="20"><counter type="INSTRUCTION" missed="0" covered="9"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="27"><counter type="INSTRUCTION" missed="1" covered="32"/><counter type="BRANCH" missed="2" covered="8"/><counter type="LINE" missed="0" covered="7"/><counter type="COMPLEXITY" missed="2" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="hashCode" desc="()I" line="40"><counter type="INSTRUCTION" missed="0" covered="14"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="()Ljava/lang/String;" line="45"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="accept" desc="(Ljavax/lang/model/type/TypeVisitor;Ljava/lang/Object;)Ljava/lang/Object;" line="50"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getExtendsBound" desc="()Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;" line="56"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getSuperBound" desc="()Lnet/florianschoppmann/java/reflect/ReflectionTypeMirror;" line="62"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getKind" desc="()Ljavax/lang/model/type/TypeKind;" line="67"><counter type="INSTRUCTION" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="1" covered="72"/><counter type="BRANCH" missed="2" covered="8"/><counter type="LINE" missed="0" covered="17"/><counter type="COMPLEXITY" missed="2" covered="11"/><counter type="METHOD" missed="0" covered="8"/><counter type="CLASS" missed="0" covered="1"/></class><class name="net/florianschoppmann/java/reflect/TypeElementImpl"><method name="&lt;init&gt;" desc="(Ljava/lang/Class;)V" line="35"><counter type="INSTRUCTION" missed="0" covered="41"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="7"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="47"><counter type="INSTRUCTION" missed="0" covered="21"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="hashCode" desc="()I" line="58"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="()Ljava/lang/String;" line="63"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="accept" desc="(Ljavax/lang/model/element/ElementVisitor;Ljava/lang/Object;)Ljava/lang/Object;" line="68"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getEnclosedElements" desc="()Ljava/util/List;" line="73"><counter type="INSTRUCTION" missed="5" covered="10"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getNestingKind" desc="()Ljavax/lang/model/element/NestingKind;" line="80"><counter type="INSTRUCTION" missed="0" covered="12"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getQualifiedName" desc="()Lnet/florianschoppmann/java/reflect/NameImpl;" line="87"><counter type="INSTRUCTION" missed="0" covered="7"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getSimpleName" desc="()Ljavax/lang/model/element/Name;" line="92"><counter type="INSTRUCTION" missed="0" covered="7"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getSuperclass" desc="()Ljavax/lang/model/type/TypeMirror;" line="97"><counter type="INSTRUCTION" missed="5" covered="10"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getInterfaces" desc="()Ljava/util/List;" line="104"><counter type="INSTRUCTION" missed="5" covered="10"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getTypeParameters" desc="()Ljava/util/List;" line="111"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getEnclosingElement" desc="()Lnet/florianschoppmann/java/reflect/ReflectionElement;" line="116"><counter type="INSTRUCTION" missed="0" covered="13"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="asType" desc="()Lnet/florianschoppmann/java/reflect/DeclaredTypeImpl;" line="127"><counter type="INSTRUCTION" missed="0" covered="52"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="12"/><counter type="COMPLEXITY" missed="0" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getKind" desc="()Ljavax/lang/model/element/ElementKind;" line="147"><counter type="INSTRUCTION" missed="0" covered="20"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="7"/><counter type="COMPLEXITY" missed="0" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="finishDerivedFromElement" desc="(Lnet/florianschoppmann/java/reflect/MirrorContext;)V" line="160"><counter type="INSTRUCTION" missed="0" covered="94"/><counter type="BRANCH" missed="0" covered="8"/><counter type="LINE" missed="0" covered="17"/><counter type="COMPLEXITY" missed="0" covered="5"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="16"><counter type="INSTRUCTION" missed="2" covered="6"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="17" covered="319"/><counter type="BRANCH" missed="7" covered="37"/><counter type="LINE" missed="0" covered="69"/><counter type="COMPLEXITY" missed="7" covered="32"/><counter type="METHOD" missed="0" covered="17"/><counter type="CLASS" missed="0" covered="1"/></class><sourcefile name="NullTypeImpl.java"><line nr="8" mi="0" ci="3" mb="0" cb="0"/><line nr="9" mi="0" ci="5" mb="0" cb="0"/><line nr="13" mi="0" ci="4" mb="0" cb="0"/><line nr="18" mi="0" ci="5" mb="0" cb="0"/><line nr="23" mi="0" ci="2" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="19"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="5"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="ReflectionTypes.java"><line nr="53" mi="2" ci="5" mb="1" cb="1"/><line nr="54" mi="0" ci="5" mb="0" cb="0"/><line nr="59" mi="0" ci="6" mb="0" cb="0"/><line nr="60" mi="0" ci="6" mb="0" cb="0"/><line nr="62" mi="0" ci="7" mb="0" cb="0"/><line nr="63" mi="0" ci="7" mb="0" cb="0"/><line nr="65" mi="0" ci="7" mb="0" cb="0"/><line nr="66" mi="0" ci="7" mb="0" cb="0"/><line nr="67" mi="0" ci="7" mb="0" cb="0"/><line nr="68" mi="0" ci="7" mb="0" cb="0"/><line nr="69" mi="0" ci="7" mb="0" cb="0"/><line nr="70" mi="0" ci="7" mb="0" cb="0"/><line nr="71" mi="0" ci="7" mb="0" cb="0"/><line nr="72" mi="0" ci="7" mb="0" cb="0"/><line nr="74" mi="0" ci="4" mb="0" cb="0"/><line nr="75" mi="0" ci="4" mb="0" cb="0"/><line nr="78" mi="0" ci="3" mb="0" cb="0"/><line nr="88" mi="0" ci="2" mb="0" cb="0"/><line nr="93" mi="0" ci="3" mb="0" cb="0"/><line nr="94" mi="0" ci="3" mb="0" cb="2"/><line nr="95" mi="0" ci="11" mb="0" cb="0"/><line nr="97" mi="0" ci="11" mb="0" cb="0"/><line nr="100" mi="0" ci="1" mb="0" cb="0"/><line nr="104" mi="0" ci="5" mb="0" cb="4"/><line nr="105" mi="0" ci="11" mb="0" cb="0"/><line nr="107" mi="0" ci="11" mb="0" cb="0"/><line nr="110" mi="0" ci="1" mb="0" cb="0"/><line nr="114" mi="0" ci="6" mb="0" cb="0"/><line nr="115" mi="0" ci="10" mb="0" cb="0"/><line nr="116" mi="0" ci="1" mb="0" cb="0"/><line nr="120" mi="0" ci="5" mb="0" cb="0"/><line nr="121" mi="0" ci="8" mb="0" cb="0"/><line nr="122" mi="5" ci="4" mb="2" cb="2"/><line nr="123" mi="0" ci="2" mb="0" cb="0"/><line nr="128" mi="0" ci="5" mb="0" cb="0"/><line nr="130" mi="0" ci="4" mb="0" cb="2"/><line nr="131" mi="0" ci="16" mb="0" cb="0"/><line nr="136" mi="0" ci="5" mb="0" cb="0"/><line nr="137" mi="0" ci="5" mb="0" cb="2"/><line nr="138" mi="0" ci="2" mb="0" cb="0"/><line nr="139" mi="0" ci="5" mb="0" cb="2"/><line nr="140" mi="0" ci="2" mb="0" cb="0"/><line nr="141" mi="0" ci="5" mb="0" cb="2"/><line nr="142" mi="0" ci="2" mb="0" cb="0"/><line nr="143" mi="0" ci="5" mb="0" cb="2"/><line nr="144" mi="0" ci="2" mb="0" cb="0"/><line nr="145" mi="0" ci="5" mb="0" cb="2"/><line nr="146" mi="0" ci="2" mb="0" cb="0"/><line nr="147" mi="0" ci="5" mb="0" cb="2"/><line nr="148" mi="0" ci="2" mb="0" cb="0"/><line nr="149" mi="0" ci="5" mb="0" cb="2"/><line nr="150" mi="0" ci="2" mb="0" cb="0"/><line nr="151" mi="0" ci="5" mb="0" cb="2"/><line nr="152" mi="0" ci="2" mb="0" cb="0"/><line nr="154" mi="0" ci="12" mb="0" cb="0"/><line nr="162" mi="0" ci="3" mb="0" cb="2"/><line nr="163" mi="0" ci="8" mb="0" cb="0"/><line nr="164" mi="0" ci="3" mb="0" cb="2"/><line nr="165" mi="0" ci="8" mb="0" cb="0"/><line nr="168" mi="0" ci="3" mb="0" cb="0"/><line nr="169" mi="0" ci="6" mb="0" cb="2"/><line nr="171" mi="0" ci="2" mb="0" cb="0"/><line nr="172" mi="0" ci="6" mb="0" cb="0"/><line nr="173" mi="0" ci="3" mb="0" cb="0"/><line nr="182" mi="0" ci="4" mb="0" cb="0"/><line nr="183" mi="0" ci="4" mb="0" cb="0"/><line nr="184" mi="0" ci="3" mb="0" cb="0"/><line nr="185" mi="0" ci="6" mb="0" cb="2"/><line nr="187" mi="0" ci="2" mb="0" cb="0"/><line nr="188" mi="0" ci="6" mb="0" cb="0"/><line nr="189" mi="0" ci="4" mb="0" cb="0"/><line nr="206" mi="0" ci="3" mb="0" cb="0"/><line nr="207" mi="0" ci="3" mb="0" cb="0"/><line nr="210" mi="4" ci="17" mb="3" cb="5"/><line nr="211" mi="0" ci="2" mb="1" cb="1"/><line nr="214" mi="0" ci="6" mb="0" cb="2"/><line nr="215" mi="0" ci="3" mb="0" cb="0"/><line nr="217" mi="0" ci="6" mb="0" cb="0"/><line nr="221" mi="0" ci="3" mb="0" cb="2"/><line nr="222" mi="0" ci="3" mb="0" cb="0"/><line nr="224" mi="0" ci="6" mb="0" cb="0"/><line nr="226" mi="0" ci="6" mb="0" cb="0"/><line nr="230" mi="0" ci="2" mb="0" cb="2"/><line nr="231" mi="0" ci="12" mb="0" cb="0"/><line nr="233" mi="0" ci="1" mb="0" cb="0"/><line nr="236" mi="0" ci="3" mb="0" cb="0"/><line nr="237" mi="0" ci="3" mb="0" cb="2"/><line nr="238" mi="0" ci="5" mb="0" cb="0"/><line nr="239" mi="0" ci="2" mb="0" cb="0"/><line nr="240" mi="0" ci="11" mb="1" cb="1"/><line nr="241" mi="0" ci="6" mb="0" cb="2"/><line nr="242" mi="0" ci="2" mb="0" cb="0"/><line nr="243" mi="0" ci="1" mb="0" cb="0"/><line nr="245" mi="0" ci="1" mb="0" cb="0"/><line nr="246" mi="1" ci="7" mb="1" cb="1"/><line nr="248" mi="5" ci="4" mb="2" cb="2"/><line nr="249" mi="0" ci="3" mb="0" cb="0"/><line nr="251" mi="0" ci="5" mb="0" cb="0"/><line nr="256" mi="0" ci="2" mb="0" cb="0"/><line nr="257" mi="0" ci="3" mb="0" cb="2"/><line nr="258" mi="0" ci="7" mb="0" cb="0"/><line nr="259" mi="0" ci="3" mb="0" cb="2"/><line nr="260" mi="0" ci="6" mb="0" cb="0"/><line nr="261" mi="0" ci="3" mb="0" cb="2"/><line nr="262" mi="0" ci="5" mb="0" cb="0"/><line nr="263" mi="0" ci="5" mb="0" cb="0"/><line nr="265" mi="0" ci="3" mb="0" cb="2"/><line nr="266" mi="0" ci="6" mb="0" cb="0"/><line nr="267" mi="0" ci="3" mb="1" cb="1"/><line nr="268" mi="0" ci="5" mb="0" cb="0"/><line nr="270" mi="1" ci="7" mb="1" cb="1"/><line nr="273" mi="5" ci="4" mb="2" cb="2"/><line nr="274" mi="0" ci="2" mb="0" cb="0"/><line nr="287" mi="0" ci="6" mb="0" cb="4"/><line nr="288" mi="0" ci="12" mb="0" cb="0"/><line nr="291" mi="0" ci="6" mb="0" cb="0"/><line nr="308" mi="0" ci="4" mb="0" cb="0"/><line nr="309" mi="0" ci="4" mb="0" cb="0"/><line nr="310" mi="0" ci="7" mb="0" cb="0"/><line nr="312" mi="0" ci="5" mb="0" cb="0"/><line nr="313" mi="0" ci="3" mb="0" cb="2"/><line nr="314" mi="0" ci="6" mb="0" cb="0"/><line nr="315" mi="0" ci="3" mb="0" cb="0"/><line nr="316" mi="0" ci="2" mb="0" cb="0"/><line nr="317" mi="0" ci="10" mb="0" cb="2"/><line nr="318" mi="0" ci="3" mb="0" cb="0"/><line nr="319" mi="0" ci="1" mb="0" cb="0"/><line nr="320" mi="0" ci="1" mb="0" cb="0"/><line nr="321" mi="0" ci="2" mb="0" cb="0"/><line nr="325" mi="0" ci="6" mb="0" cb="0"/><line nr="326" mi="0" ci="16" mb="0" cb="2"/><line nr="327" mi="0" ci="5" mb="0" cb="0"/><line nr="329" mi="0" ci="3" mb="0" cb="0"/><line nr="335" mi="0" ci="3" mb="0" cb="0"/><line nr="336" mi="0" ci="3" mb="0" cb="0"/><line nr="337" mi="0" ci="3" mb="0" cb="0"/><line nr="339" mi="0" ci="7" mb="0" cb="2"/><line nr="342" mi="0" ci="9" mb="0" cb="0"/><line nr="347" mi="0" ci="3" mb="0" cb="0"/><line nr="348" mi="0" ci="3" mb="0" cb="0"/><line nr="350" mi="0" ci="9" mb="0" cb="0"/><line nr="355" mi="0" ci="3" mb="0" cb="0"/><line nr="356" mi="0" ci="3" mb="0" cb="2"/><line nr="357" mi="0" ci="2" mb="0" cb="0"/><line nr="358" mi="0" ci="3" mb="0" cb="2"/><line nr="359" mi="0" ci="2" mb="0" cb="0"/><line nr="361" mi="0" ci="20" mb="0" cb="0"/><line nr="362" mi="0" ci="6" mb="0" cb="0"/><line nr="368" mi="0" ci="2" mb="0" cb="0"/><line nr="373" mi="0" ci="3" mb="0" cb="0"/><line nr="374" mi="0" ci="3" mb="0" cb="0"/><line nr="376" mi="0" ci="6" mb="0" cb="0"/><line nr="382" mi="0" ci="5" mb="0" cb="0"/><line nr="383" mi="0" ci="3" mb="0" cb="0"/><line nr="385" mi="0" ci="8" mb="0" cb="0"/><line nr="390" mi="0" ci="5" mb="0" cb="0"/><line nr="392" mi="0" ci="4" mb="0" cb="0"/><line nr="397" mi="0" ci="3" mb="0" cb="0"/><line nr="398" mi="0" ci="3" mb="0" cb="2"/><line nr="399" mi="0" ci="5" mb="0" cb="0"/><line nr="401" mi="0" ci="3" mb="0" cb="0"/><line nr="403" mi="0" ci="6" mb="0" cb="0"/><line nr="404" mi="0" ci="16" mb="0" cb="2"/><line nr="405" mi="0" ci="5" mb="0" cb="0"/><line nr="408" mi="0" ci="5" mb="0" cb="0"/><line nr="414" mi="0" ci="5" mb="0" cb="0"/><line nr="415" mi="0" ci="5" mb="0" cb="0"/><line nr="416" mi="0" ci="5" mb="0" cb="0"/><line nr="418" mi="0" ci="7" mb="0" cb="0"/><line nr="422" mi="0" ci="1" mb="0" cb="0"/><line nr="426" mi="0" ci="7" mb="0" cb="0"/><line nr="427" mi="0" ci="2" mb="0" cb="2"/><line nr="428" mi="0" ci="12" mb="0" cb="0"/><line nr="430" mi="0" ci="2" mb="0" cb="0"/><line nr="436" mi="0" ci="3" mb="0" cb="0"/><line nr="437" mi="0" ci="3" mb="0" cb="0"/><line nr="439" mi="0" ci="8" mb="0" cb="0"/><line nr="443" mi="0" ci="5" mb="0" cb="0"/><line nr="450" mi="0" ci="2" mb="0" cb="0"/><line nr="455" mi="2" ci="0" mb="0" cb="0"/><line nr="460" mi="0" ci="2" mb="0" cb="0"/><line nr="468" mi="0" ci="2" mb="0" cb="0"/><counter type="INSTRUCTION" missed="25" covered="897"/><counter type="BRANCH" missed="15" covered="89"/><counter type="LINE" missed="1" covered="181"/><counter type="COMPLEXITY" missed="16" covered="69"/><counter type="METHOD" missed="1" covered="32"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="MirrorContext.java"><line nr="15" mi="0" ci="2" mb="0" cb="0"/><line nr="16" mi="0" ci="3" mb="0" cb="0"/><line nr="17" mi="0" ci="3" mb="0" cb="0"/><line nr="18" mi="0" ci="3" mb="0" cb="0"/><line nr="19" mi="0" ci="1" mb="0" cb="0"/><line nr="22" mi="0" ci="4" mb="0" cb="0"/><line nr="23" mi="0" ci="16" mb="0" cb="2"/><line nr="24" mi="0" ci="8" mb="0" cb="0"/><line nr="26" mi="0" ci="3" mb="0" cb="0"/><line nr="39" mi="0" ci="6" mb="0" cb="0"/><line nr="53" mi="0" ci="6" mb="0" cb="0"/><line nr="54" mi="0" ci="2" mb="0" cb="2"/><line nr="55" mi="0" ci="2" mb="0" cb="0"/><line nr="58" mi="0" ci="6" mb="0" cb="0"/><line nr="59" mi="0" ci="2" mb="0" cb="2"/><line nr="60" mi="0" ci="5" mb="0" cb="0"/><line nr="61" mi="0" ci="6" mb="0" cb="0"/><line nr="63" mi="0" ci="2" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="80"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="18"/><counter type="COMPLEXITY" missed="0" covered="7"/><counter type="METHOD" missed="0" covered="4"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="TypeParameterElementImpl.java"><line nr="12" mi="2" ci="6" mb="1" cb="1"/><line nr="18" mi="0" ci="2" mb="0" cb="0"/><line nr="19" mi="0" ci="5" mb="0" cb="0"/><line nr="20" mi="0" ci="5" mb="0" cb="0"/><line nr="21" mi="0" ci="7" mb="0" cb="0"/><line nr="22" mi="0" ci="1" mb="0" cb="0"/><line nr="26" mi="0" ci="3" mb="0" cb="2"/><line nr="27" mi="0" ci="2" mb="0" cb="0"/><line nr="28" mi="0" ci="7" mb="0" cb="4"/><line nr="29" mi="0" ci="2" mb="0" cb="0"/><line nr="32" mi="0" ci="7" mb="0" cb="0"/><line nr="37" mi="0" ci="4" mb="0" cb="0"/><line nr="42" mi="0" ci="4" mb="0" cb="0"/><line nr="47" mi="0" ci="5" mb="0" cb="0"/><line nr="52" mi="0" ci="3" mb="0" cb="0"/><line nr="57" mi="0" ci="2" mb="0" cb="0"/><line nr="58" mi="5" ci="5" mb="2" cb="2"/><line nr="59" mi="0" ci="3" mb="0" cb="0"/><line nr="64" mi="0" ci="3" mb="0" cb="0"/><line nr="69" mi="0" ci="3" mb="0" cb="0"/><line nr="74" mi="0" ci="2" mb="0" cb="0"/><line nr="79" mi="0" ci="7" mb="0" cb="0"/><line nr="84" mi="0" ci="2" mb="0" cb="0"/><line nr="89" mi="0" ci="7" mb="0" cb="0"/><line nr="90" mi="0" ci="8" mb="0" cb="2"/><line nr="91" mi="0" ci="9" mb="0" cb="0"/><line nr="93" mi="0" ci="5" mb="0" cb="0"/><line nr="94" mi="0" ci="1" mb="0" cb="0"/><counter type="INSTRUCTION" missed="7" covered="120"/><counter type="BRANCH" missed="3" covered="11"/><counter type="LINE" missed="0" covered="28"/><counter type="COMPLEXITY" missed="3" covered="18"/><counter type="METHOD" missed="0" covered="14"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="IntersectionTypeImpl.java"><line nr="15" mi="0" ci="2" mb="0" cb="0"/><line nr="16" mi="0" ci="3" mb="0" cb="0"/><line nr="18" mi="0" ci="4" mb="0" cb="0"/><line nr="19" mi="0" ci="1" mb="0" cb="0"/><line nr="23" mi="0" ci="3" mb="0" cb="2"/><line nr="24" mi="0" ci="2" mb="0" cb="0"/><line nr="25" mi="0" ci="7" mb="0" cb="4"/><line nr="26" mi="0" ci="2" mb="0" cb="0"/><line nr="29" mi="0" ci="7" mb="0" cb="0"/><line nr="36" mi="0" ci="16" mb="0" cb="0"/><line nr="41" mi="0" ci="4" mb="0" cb="0"/><line nr="46" mi="0" ci="5" mb="0" cb="0"/><line nr="51" mi="0" ci="3" mb="0" cb="0"/><line nr="56" mi="0" ci="2" mb="0" cb="0"/><line nr="61" mi="0" ci="2" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="63"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="15"/><counter type="COMPLEXITY" missed="0" covered="11"/><counter type="METHOD" missed="0" covered="8"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="ElementImpl.java"><line nr="6" mi="0" ci="2" mb="0" cb="0"/><line nr="7" mi="0" ci="4" mb="0" cb="0"/><line nr="11" mi="0" ci="12" mb="0" cb="0"/><line nr="17" mi="0" ci="3" mb="1" cb="1"/><line nr="18" mi="13" ci="0" mb="0" cb="0"/><line nr="20" mi="0" ci="1" mb="0" cb="0"/><line nr="25" mi="0" ci="3" mb="1" cb="1"/><line nr="26" mi="11" ci="0" mb="0" cb="0"/><line nr="27" mi="2" ci="0" mb="0" cb="0"/><line nr="31" mi="0" ci="3" mb="0" cb="0"/><line nr="32" mi="0" ci="3" mb="0" cb="0"/><line nr="33" mi="0" ci="1" mb="0" cb="0"/><counter type="INSTRUCTION" missed="26" covered="32"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="3" covered="9"/><counter type="COMPLEXITY" missed="2" covered="4"/><counter type="METHOD" missed="0" covered="4"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="NoTypeImpl.java"><line nr="9" mi="0" ci="5" mb="0" cb="0"/><line nr="10" mi="0" ci="6" mb="0" cb="0"/><line nr="14" mi="0" ci="2" mb="0" cb="0"/><line nr="15" mi="0" ci="3" mb="0" cb="0"/><line nr="16" mi="0" ci="1" mb="0" cb="0"/><line nr="20" mi="0" ci="4" mb="0" cb="0"/><line nr="25" mi="0" ci="5" mb="0" cb="0"/><line nr="30" mi="0" ci="3" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="29"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="0" covered="5"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="TypeVariableImpl.java"><line nr="9" mi="2" ci="6" mb="1" cb="1"/><line nr="10" mi="0" ci="3" mb="0" cb="0"/><line nr="17" mi="0" ci="2" mb="0" cb="0"/><line nr="18" mi="0" ci="3" mb="0" cb="0"/><line nr="20" mi="0" ci="3" mb="0" cb="0"/><line nr="21" mi="0" ci="3" mb="0" cb="0"/><line nr="22" mi="0" ci="1" mb="0" cb="0"/><line nr="26" mi="0" ci="3" mb="0" cb="2"/><line nr="27" mi="0" ci="2" mb="0" cb="0"/><line nr="28" mi="0" ci="7" mb="0" cb="4"/><line nr="29" mi="0" ci="2" mb="0" cb="0"/><line nr="32" mi="0" ci="2" mb="0" cb="0"/><line nr="33" mi="5" ci="8" mb="3" cb="3"/><line nr="35" mi="0" ci="3" mb="0" cb="0"/><line nr="36" mi="0" ci="10" mb="1" cb="1"/><line nr="37" mi="0" ci="6" mb="1" cb="1"/><line nr="38" mi="0" ci="6" mb="1" cb="1"/><line nr="39" mi="1" ci="5" mb="1" cb="1"/><line nr="44" mi="0" ci="2" mb="0" cb="0"/><line nr="46" mi="0" ci="24" mb="0" cb="0"/><line nr="51" mi="0" ci="5" mb="0" cb="0"/><line nr="56" mi="0" ci="4" mb="0" cb="0"/><line nr="60" mi="0" ci="3" mb="0" cb="2"/><line nr="61" mi="0" ci="11" mb="0" cb="0"/><line nr="62" mi="0" ci="2" mb="0" cb="0"/><line nr="65" mi="0" ci="1" mb="0" cb="0"/><line nr="68" mi="0" ci="3" mb="0" cb="2"/><line nr="69" mi="0" ci="11" mb="0" cb="0"/><line nr="70" mi="0" ci="2" mb="0" cb="0"/><line nr="73" mi="0" ci="1" mb="0" cb="0"/><line nr="77" mi="0" ci="3" mb="0" cb="0"/><line nr="82" mi="0" ci="2" mb="0" cb="0"/><line nr="83" mi="5" ci="5" mb="2" cb="2"/><line nr="84" mi="0" ci="3" mb="0" cb="0"/><line nr="89" mi="0" ci="2" mb="0" cb="0"/><line nr="90" mi="5" ci="5" mb="2" cb="2"/><line nr="91" mi="0" ci="3" mb="0" cb="0"/><line nr="95" mi="0" ci="2" mb="0" cb="0"/><line nr="96" mi="0" ci="3" mb="0" cb="0"/><line nr="97" mi="0" ci="3" mb="0" cb="0"/><line nr="99" mi="0" ci="3" mb="0" cb="0"/><line nr="100" mi="0" ci="3" mb="0" cb="0"/><line nr="101" mi="0" ci="3" mb="0" cb="0"/><line nr="102" mi="0" ci="1" mb="0" cb="0"/><line nr="106" mi="0" ci="2" mb="0" cb="0"/><line nr="111" mi="0" ci="3" mb="0" cb="0"/><counter type="INSTRUCTION" missed="18" covered="190"/><counter type="BRANCH" missed="12" covered="22"/><counter type="LINE" missed="0" covered="46"/><counter type="COMPLEXITY" missed="12" covered="19"/><counter type="METHOD" missed="0" covered="14"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="WildcardTypeImpl.java"><line nr="20" mi="0" ci="2" mb="0" cb="0"/><line nr="21" mi="0" ci="3" mb="0" cb="0"/><line nr="22" mi="0" ci="3" mb="0" cb="0"/><line nr="23" mi="0" ci="1" mb="0" cb="0"/><line nr="27" mi="0" ci="3" mb="0" cb="2"/><line nr="28" mi="0" ci="2" mb="0" cb="0"/><line nr="29" mi="0" ci="7" mb="0" cb="4"/><line nr="30" mi="0" ci="2" mb="0" cb="0"/><line nr="33" mi="0" ci="3" mb="0" cb="0"/><line nr="34" mi="0" ci="10" mb="1" cb="1"/><line nr="35" mi="1" ci="5" mb="1" cb="1"/><line nr="40" mi="0" ci="14" mb="0" cb="0"/><line nr="45" mi="0" ci="4" mb="0" cb="0"/><line nr="50" mi="0" ci="5" mb="0" cb="0"/><line nr="56" mi="0" ci="3" mb="0" cb="0"/><line nr="62" mi="0" ci="3" mb="0" cb="0"/><line nr="67" mi="0" ci="2" mb="0" cb="0"/><counter type="INSTRUCTION" missed="1" covered="72"/><counter type="BRANCH" missed="2" covered="8"/><counter type="LINE" missed="0" covered="17"/><counter type="COMPLEXITY" missed="2" covered="11"/><counter type="METHOD" missed="0" covered="8"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="PrimitiveTypeImpl.java"><line nr="9" mi="0" ci="5" mb="0" cb="0"/><line nr="10" mi="0" ci="5" mb="0" cb="0"/><line nr="11" mi="0" ci="5" mb="0" cb="0"/><line nr="12" mi="0" ci="5" mb="0" cb="0"/><line nr="13" mi="0" ci="5" mb="0" cb="0"/><line nr="14" mi="0" ci="5" mb="0" cb="0"/><line nr="15" mi="0" ci="5" mb="0" cb="0"/><line nr="16" mi="0" ci="6" mb="0" cb="0"/><line nr="20" mi="0" ci="2" mb="0" cb="0"/><line nr="21" mi="0" ci="3" mb="0" cb="0"/><line nr="22" mi="0" ci="1" mb="0" cb="0"/><line nr="26" mi="0" ci="4" mb="0" cb="0"/><line nr="31" mi="0" ci="5" mb="0" cb="0"/><line nr="36" mi="0" ci="3" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="59"/><counter type="LINE" missed="0" covered="14"/><counter type="COMPLEXITY" missed="0" covered="5"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="AnnotatedConstructImpl.java"><line nr="9" mi="0" ci="3" mb="0" cb="0"/><line nr="11" mi="12" ci="0" mb="0" cb="0"/><line nr="18" mi="2" ci="0" mb="0" cb="0"/><line nr="23" mi="2" ci="0" mb="0" cb="0"/><line nr="28" mi="2" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="18" covered="3"/><counter type="LINE" missed="4" covered="1"/><counter type="COMPLEXITY" missed="4" covered="1"/><counter type="METHOD" missed="4" covered="1"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="NameImpl.java"><line nr="10" mi="0" ci="2" mb="0" cb="0"/><line nr="11" mi="0" ci="5" mb="0" cb="0"/><line nr="12" mi="0" ci="1" mb="0" cb="0"/><line nr="16" mi="3" ci="0" mb="2" cb="0"/><line nr="17" mi="2" ci="0" mb="0" cb="0"/><line nr="18" mi="7" ci="0" mb="4" cb="0"/><line nr="19" mi="2" ci="0" mb="0" cb="0"/><line nr="22" mi="7" ci="0" mb="0" cb="0"/><line nr="27" mi="4" ci="0" mb="0" cb="0"/><line nr="32" mi="0" ci="5" mb="0" cb="0"/><line nr="37" mi="0" ci="4" mb="0" cb="0"/><line nr="42" mi="0" ci="5" mb="0" cb="0"/><line nr="47" mi="6" ci="0" mb="0" cb="0"/><line nr="52" mi="0" ci="3" mb="0" cb="0"/><counter type="INSTRUCTION" missed="31" covered="25"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="7" covered="7"/><counter type="COMPLEXITY" missed="6" covered="5"/><counter type="METHOD" missed="3" covered="5"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="DeclaredTypeImpl.java"><line nr="16" mi="0" ci="2" mb="0" cb="0"/><line nr="17" mi="0" ci="3" mb="0" cb="0"/><line nr="18" mi="0" ci="3" mb="0" cb="0"/><line nr="19" mi="0" ci="3" mb="0" cb="0"/><line nr="21" mi="0" ci="3" mb="0" cb="0"/><line nr="22" mi="0" ci="3" mb="0" cb="0"/><line nr="23" mi="0" ci="4" mb="0" cb="0"/><line nr="24" mi="0" ci="1" mb="0" cb="0"/><line nr="28" mi="0" ci="3" mb="0" cb="2"/><line nr="29" mi="0" ci="2" mb="0" cb="0"/><line nr="30" mi="0" ci="7" mb="0" cb="4"/><line nr="31" mi="0" ci="2" mb="0" cb="0"/><line nr="34" mi="0" ci="3" mb="0" cb="0"/><line nr="35" mi="0" ci="10" mb="1" cb="1"/><line nr="36" mi="0" ci="6" mb="0" cb="2"/><line nr="37" mi="0" ci="6" mb="1" cb="1"/><line nr="42" mi="0" ci="19" mb="0" cb="0"/><line nr="47" mi="0" ci="4" mb="0" cb="0"/><line nr="52" mi="0" ci="5" mb="0" cb="0"/><line nr="57" mi="0" ci="3" mb="0" cb="0"/><line nr="62" mi="0" ci="3" mb="0" cb="0"/><line nr="67" mi="0" ci="3" mb="0" cb="0"/><line nr="72" mi="0" ci="2" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="100"/><counter type="BRANCH" missed="2" covered="10"/><counter type="LINE" missed="0" covered="23"/><counter type="COMPLEXITY" missed="2" covered="13"/><counter type="METHOD" missed="0" covered="9"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="ArrayTypeImpl.java"><line nr="12" mi="0" ci="2" mb="0" cb="0"/><line nr="13" mi="0" ci="3" mb="0" cb="0"/><line nr="15" mi="0" ci="3" mb="0" cb="0"/><line nr="16" mi="0" ci="1" mb="0" cb="0"/><line nr="20" mi="0" ci="3" mb="0" cb="2"/><line nr="21" mi="0" ci="2" mb="0" cb="0"/><line nr="22" mi="0" ci="7" mb="0" cb="4"/><line nr="23" mi="0" ci="2" mb="0" cb="0"/><line nr="26" mi="0" ci="7" mb="0" cb="0"/><line nr="33" mi="0" ci="16" mb="0" cb="0"/><line nr="38" mi="0" ci="4" mb="0" cb="0"/><line nr="43" mi="0" ci="5" mb="0" cb="0"/><line nr="48" mi="0" ci="3" mb="0" cb="0"/><line nr="53" mi="0" ci="2" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="60"/><counter type="BRANCH" missed="0" covered="6"/><counter type="LINE" missed="0" covered="14"/><counter type="COMPLEXITY" missed="0" covered="10"/><counter type="METHOD" missed="0" covered="7"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="ImmutableList.java"><line nr="8" mi="0" ci="7" mb="0" cb="0"/><line nr="12" mi="0" ci="2" mb="0" cb="0"/><line nr="13" mi="0" ci="3" mb="0" cb="0"/><line nr="14" mi="0" ci="1" mb="0" cb="0"/><line nr="17" mi="0" ci="3" mb="0" cb="2"/><line nr="18" mi="0" ci="3" mb="0" cb="0"/><line nr="20" mi="0" ci="9" mb="0" cb="0"/><line nr="26" mi="0" ci="2" mb="0" cb="0"/><line nr="33" mi="0" ci="5" mb="0" cb="0"/><line nr="38" mi="0" ci="4" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="39"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="10"/><counter type="COMPLEXITY" missed="0" covered="7"/><counter type="METHOD" missed="0" covered="6"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="TypeElementImpl.java"><line nr="16" mi="2" ci="6" mb="1" cb="1"/><line nr="35" mi="0" ci="2" mb="0" cb="0"/><line nr="36" mi="0" ci="5" mb="0" cb="0"/><line nr="38" mi="0" ci="4" mb="0" cb="0"/><line nr="39" mi="0" ci="17" mb="0" cb="2"/><line nr="40" mi="0" ci="8" mb="0" cb="0"/><line nr="42" mi="0" ci="4" mb="0" cb="0"/><line nr="43" mi="0" ci="1" mb="0" cb="0"/><line nr="47" mi="0" ci="3" mb="0" cb="2"/><line nr="48" mi="0" ci="2" mb="0" cb="0"/><line nr="49" mi="0" ci="7" mb="0" cb="4"/><line nr="50" mi="0" ci="2" mb="0" cb="0"/><line nr="53" mi="0" ci="7" mb="0" cb="0"/><line nr="58" mi="0" ci="4" mb="0" cb="0"/><line nr="63" mi="0" ci="4" mb="0" cb="0"/><line nr="68" mi="0" ci="5" mb="0" cb="0"/><line nr="73" mi="0" ci="2" mb="0" cb="0"/><line nr="74" mi="5" ci="5" mb="2" cb="2"/><line nr="75" mi="0" ci="3" mb="0" cb="0"/><line nr="80" mi="0" ci="12" mb="0" cb="0"/><line nr="87" mi="0" ci="7" mb="0" cb="0"/><line nr="92" mi="0" ci="7" mb="0" cb="0"/><line nr="97" mi="0" ci="2" mb="0" cb="0"/><line nr="98" mi="5" ci="5" mb="2" cb="2"/><line nr="99" mi="0" ci="3" mb="0" cb="0"/><line nr="104" mi="0" ci="2" mb="0" cb="0"/><line nr="105" mi="5" ci="5" mb="2" cb="2"/><line nr="106" mi="0" ci="3" mb="0" cb="0"/><line nr="111" mi="0" ci="3" mb="0" cb="0"/><line nr="116" mi="0" ci="2" mb="0" cb="0"/><line nr="118" mi="0" ci="3" mb="0" cb="2"/><line nr="119" mi="0" ci="5" mb="0" cb="0"/><line nr="121" mi="0" ci="3" mb="0" cb="0"/><line nr="127" mi="0" ci="2" mb="0" cb="0"/><line nr="129" mi="0" ci="3" mb="0" cb="0"/><line nr="130" mi="0" ci="2" mb="0" cb="2"/><line nr="131" mi="0" ci="7" mb="0" cb="0"/><line nr="132" mi="0" ci="11" mb="0" cb="2"/><line nr="133" mi="0" ci="5" mb="0" cb="0"/><line nr="134" mi="0" ci="1" mb="0" cb="0"/><line nr="136" mi="0" ci="7" mb="0" cb="2"/><line nr="138" mi="0" ci="2" mb="0" cb="0"/><line nr="139" mi="0" ci="7" mb="0" cb="0"/><line nr="140" mi="0" ci="3" mb="0" cb="0"/><line nr="142" mi="0" ci="2" mb="0" cb="0"/><line nr="147" mi="0" ci="4" mb="0" cb="2"/><line nr="148" mi="0" ci="2" mb="0" cb="0"/><line nr="149" mi="0" ci="4" mb="0" cb="2"/><line nr="150" mi="0" ci="2" mb="0" cb="0"/><line nr="151" mi="0" ci="4" mb="0" cb="2"/><line nr="152" mi="0" ci="2" mb="0" cb="0"/><line nr="154" mi="0" ci="2" mb="0" cb="0"/><line nr="160" mi="0" ci="4" mb="0" cb="0"/><line nr="161" mi="0" ci="7" mb="0" cb="2"/><line nr="163" mi="0" ci="2" mb="0" cb="0"/><line nr="165" mi="0" ci="4" mb="0" cb="0"/><line nr="166" mi="0" ci="10" mb="0" cb="0"/><line nr="167" mi="0" ci="5" mb="0" cb="0"/><line nr="168" mi="0" ci="16" mb="0" cb="2"/><line nr="169" mi="0" ci="6" mb="0" cb="0"/><line nr="171" mi="0" ci="4" mb="0" cb="0"/><line nr="173" mi="0" ci="4" mb="0" cb="0"/><line nr="174" mi="0" ci="7" mb="0" cb="2"/><line nr="176" mi="0" ci="2" mb="0" cb="0"/><line nr="177" mi="0" ci="7" mb="0" cb="0"/><line nr="178" mi="0" ci="11" mb="0" cb="2"/><line nr="179" mi="0" ci="3" mb="0" cb="0"/><line nr="180" mi="0" ci="1" mb="0" cb="0"/><line nr="184" mi="0" ci="1" mb="0" cb="0"/><counter type="INSTRUCTION" missed="17" covered="319"/><counter type="BRANCH" missed="7" covered="37"/><counter type="LINE" missed="0" covered="69"/><counter type="COMPLEXITY" missed="7" covered="32"/><counter type="METHOD" missed="0" covered="17"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><counter type="INSTRUCTION" missed="143" covered="2107"/><counter type="BRANCH" missed="49" covered="199"/><counter type="LINE" missed="15" covered="465"/><counter type="COMPLEXITY" missed="54" covered="222"/><counter type="METHOD" missed="8" covered="144"/><counter type="CLASS" missed="0" covered="16"/></package><counter type="INSTRUCTION" missed="263" covered="4003"/><counter type="BRANCH" missed="113" covered="447"/><counter type="LINE" missed="15" covered="881"/><counter type="COMPLEXITY" missed="118" covered="378"/><counter type="METHOD" missed="8" covered="208"/><counter type="CLASS" missed="0" covered="25"/></report>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/AnnotatedConstructImpl.html b/jacoco/net.florianschoppmann.java.reflect/AnnotatedConstructImpl.html
    new file mode 100644
    index 0000000..48efba8
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/AnnotatedConstructImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>AnnotatedConstructImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">AnnotatedConstructImpl</span></div><h1>AnnotatedConstructImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">18 of 21</td><td class="ctr2">14%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">5</td><td class="ctr1">4</td><td class="ctr2">5</td><td class="ctr1">4</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a4"><a href="AnnotatedConstructImpl.java.html#L11" class="el_method">unsupportedException()</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="AnnotatedConstructImpl.java.html#L18" class="el_method">getAnnotationMirrors()</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="AnnotatedConstructImpl.java.html#L23" class="el_method">getAnnotation(Class)</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="AnnotatedConstructImpl.java.html#L28" class="el_method">getAnnotationsByType(Class)</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="AnnotatedConstructImpl.java.html#L9" class="el_method">AnnotatedConstructImpl()</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="30" height="10" title="3" alt="3"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/AnnotatedConstructImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/AnnotatedConstructImpl.java.html
    new file mode 100644
    index 0000000..3aa80bd
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/AnnotatedConstructImpl.java.html
    @@ -0,0 +1,31 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>AnnotatedConstructImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">AnnotatedConstructImpl.java</span></div><h1>AnnotatedConstructImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import net.florianschoppmann.java.type.AnnotatedConstruct;
    +
    +import javax.lang.model.element.AnnotationMirror;
    +import java.lang.annotation.Annotation;
    +import java.util.List;
    +
    +<span class="fc" id="L9">abstract class AnnotatedConstructImpl implements AnnotatedConstruct {</span>
    +    static UnsupportedOperationException unsupportedException() {
    +<span class="nc" id="L11">        return new UnsupportedOperationException(String.format(</span>
    +            &quot;Annotations not currently supported by %s.&quot;, ReflectionTypes.class
    +        ));
    +    }
    +
    +    @Override
    +    public final List&lt;? extends AnnotationMirror&gt; getAnnotationMirrors() {
    +<span class="nc" id="L18">        throw unsupportedException();</span>
    +    }
    +
    +    @Override
    +    public final &lt;A extends Annotation&gt; A getAnnotation(Class&lt;A&gt; annotationType) {
    +<span class="nc" id="L23">        throw unsupportedException();</span>
    +    }
    +
    +    @Override
    +    public final &lt;A extends Annotation&gt; A[] getAnnotationsByType(Class&lt;A&gt; annotationType) {
    +<span class="nc" id="L28">        throw unsupportedException();</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/ArrayTypeImpl.html b/jacoco/net.florianschoppmann.java.reflect/ArrayTypeImpl.html
    new file mode 100644
    index 0000000..38c1bd1
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/ArrayTypeImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>ArrayTypeImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">ArrayTypeImpl</span></div><h1>ArrayTypeImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 60</td><td class="ctr2">100%</td><td class="bar">0 of 6</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">10</td><td class="ctr1">0</td><td class="ctr2">14</td><td class="ctr1">0</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a2"><a href="ArrayTypeImpl.java.html#L20" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../.resources/greenbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="ArrayTypeImpl.java.html#L33" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="91" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="ArrayTypeImpl.java.html#L12" class="el_method">ArrayTypeImpl(ReflectionTypeMirror)</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="51" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="ArrayTypeImpl.java.html#L43" class="el_method">accept(TypeVisitor, Object)</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="28" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="ArrayTypeImpl.java.html#L38" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="22" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a3"><a href="ArrayTypeImpl.java.html#L48" class="el_method">getComponentType()</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a4"><a href="ArrayTypeImpl.java.html#L53" class="el_method">getKind()</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="11" height="10" title="2" alt="2"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/ArrayTypeImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/ArrayTypeImpl.java.html
    new file mode 100644
    index 0000000..a21018f
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/ArrayTypeImpl.java.html
    @@ -0,0 +1,56 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>ArrayTypeImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">ArrayTypeImpl.java</span></div><h1>ArrayTypeImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.type.ArrayType;
    +import javax.lang.model.type.TypeKind;
    +import javax.lang.model.type.TypeVisitor;
    +import java.util.Objects;
    +
    +final class ArrayTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, ArrayType {
    +    private final ReflectionTypeMirror componentType;
    +
    +<span class="fc" id="L12">    ArrayTypeImpl(ReflectionTypeMirror componentType) {</span>
    +<span class="fc" id="L13">        Objects.requireNonNull(componentType);</span>
    +
    +<span class="fc" id="L15">        this.componentType = componentType;</span>
    +<span class="fc" id="L16">    }</span>
    +
    +    @Override
    +    public boolean equals(@Nullable Object otherObject) {
    +<span class="fc bfc" id="L20" title="All 2 branches covered.">        if (this == otherObject) {</span>
    +<span class="fc" id="L21">            return true;</span>
    +<span class="fc bfc" id="L22" title="All 4 branches covered.">        } else if (otherObject == null || getClass() != otherObject.getClass()) {</span>
    +<span class="fc" id="L23">            return false;</span>
    +        }
    +
    +<span class="fc" id="L26">        return componentType.equals(((ArrayTypeImpl) otherObject).componentType);</span>
    +    }
    +
    +    @Override
    +    public int hashCode() {
    +        // Do not return just componentType.hashCode() because both this instance and componentType are of type
    +        // ReflectionTypeMirror.
    +<span class="fc" id="L33">        return Objects.hash(getClass(), componentType.hashCode());</span>
    +    }
    +
    +    @Override
    +    public String toString() {
    +<span class="fc" id="L38">        return ReflectionTypes.getInstance().toString(this);</span>
    +    }
    +
    +    @Override
    +    public &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<span class="fc" id="L43">        return visitor.visitArray(this, parameter);</span>
    +    }
    +
    +    @Override
    +    public ReflectionTypeMirror getComponentType() {
    +<span class="fc" id="L48">        return componentType;</span>
    +    }
    +
    +    @Override
    +    public TypeKind getKind() {
    +<span class="fc" id="L53">        return TypeKind.ARRAY;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/DeclaredTypeImpl.html b/jacoco/net.florianschoppmann.java.reflect/DeclaredTypeImpl.html
    new file mode 100644
    index 0000000..92f3673
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/DeclaredTypeImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>DeclaredTypeImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">DeclaredTypeImpl</span></div><h1>DeclaredTypeImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 100</td><td class="ctr2">100%</td><td class="bar">2 of 12</td><td class="ctr2">83%</td><td class="ctr1">2</td><td class="ctr2">15</td><td class="ctr1">0</td><td class="ctr2">23</td><td class="ctr1">0</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a3"><a href="DeclaredTypeImpl.java.html#L28" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="39" alt="39"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="100" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">83%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">8</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="DeclaredTypeImpl.java.html#L16" class="el_method">DeclaredTypeImpl(ReflectionTypeMirror, TypeElementImpl, List)</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="67" height="10" title="22" alt="22"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">8</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a7"><a href="DeclaredTypeImpl.java.html#L42" class="el_method">hashCode()</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="58" height="10" title="19" alt="19"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="DeclaredTypeImpl.java.html#L52" class="el_method">accept(TypeVisitor, Object)</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="15" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a8"><a href="DeclaredTypeImpl.java.html#L47" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="DeclaredTypeImpl.java.html#L57" class="el_method">asElement()</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a4"><a href="DeclaredTypeImpl.java.html#L62" class="el_method">getEnclosingType()</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a6"><a href="DeclaredTypeImpl.java.html#L67" class="el_method">getTypeArguments()</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a5"><a href="DeclaredTypeImpl.java.html#L72" class="el_method">getKind()</a></td><td class="bar" id="b8"><img src="../.resources/greenbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/DeclaredTypeImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/DeclaredTypeImpl.java.html
    new file mode 100644
    index 0000000..28425f4
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/DeclaredTypeImpl.java.html
    @@ -0,0 +1,75 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>DeclaredTypeImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">DeclaredTypeImpl.java</span></div><h1>DeclaredTypeImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.type.DeclaredType;
    +import javax.lang.model.type.TypeKind;
    +import javax.lang.model.type.TypeVisitor;
    +import java.util.List;
    +import java.util.Objects;
    +
    +final class DeclaredTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, DeclaredType {
    +    private final ReflectionTypeMirror enclosingType;
    +    private final TypeElementImpl typeElement;
    +    private final ImmutableList&lt;? extends ReflectionTypeMirror&gt; typeArguments;
    +
    +    DeclaredTypeImpl(ReflectionTypeMirror enclosingType, TypeElementImpl typeElement,
    +<span class="fc" id="L16">            List&lt;? extends ReflectionTypeMirror&gt; typeArguments) {</span>
    +<span class="fc" id="L17">        Objects.requireNonNull(enclosingType);</span>
    +<span class="fc" id="L18">        Objects.requireNonNull(typeElement);</span>
    +<span class="fc" id="L19">        Objects.requireNonNull(typeArguments);</span>
    +
    +<span class="fc" id="L21">        this.enclosingType = enclosingType;</span>
    +<span class="fc" id="L22">        this.typeElement = typeElement;</span>
    +<span class="fc" id="L23">        this.typeArguments = ImmutableList.copyOf(typeArguments);</span>
    +<span class="fc" id="L24">    }</span>
    +
    +    @Override
    +    public boolean equals(@Nullable Object otherObject) {
    +<span class="fc bfc" id="L28" title="All 2 branches covered.">        if (this == otherObject) {</span>
    +<span class="fc" id="L29">            return true;</span>
    +<span class="fc bfc" id="L30" title="All 4 branches covered.">        } else if (otherObject == null || getClass() != otherObject.getClass()) {</span>
    +<span class="fc" id="L31">            return false;</span>
    +        }
    +
    +<span class="fc" id="L34">        DeclaredTypeImpl other = (DeclaredTypeImpl) otherObject;</span>
    +<span class="pc bpc" id="L35" title="1 of 2 branches missed.">        return enclosingType.equals(other.enclosingType)</span>
    +<span class="fc bfc" id="L36" title="All 2 branches covered.">            &amp;&amp; typeElement.equals(other.typeElement)</span>
    +<span class="pc bpc" id="L37" title="1 of 2 branches missed.">            &amp;&amp; typeArguments.equals(other.typeArguments);</span>
    +    }
    +
    +    @Override
    +    public int hashCode() {
    +<span class="fc" id="L42">        return Objects.hash(enclosingType, typeElement, typeArguments);</span>
    +    }
    +
    +    @Override
    +    public String toString() {
    +<span class="fc" id="L47">        return ReflectionTypes.getInstance().toString(this);</span>
    +    }
    +
    +    @Override
    +    public &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<span class="fc" id="L52">        return visitor.visitDeclared(this, parameter);</span>
    +    }
    +
    +    @Override
    +    public TypeElementImpl asElement() {
    +<span class="fc" id="L57">        return typeElement;</span>
    +    }
    +
    +    @Override
    +    public ReflectionTypeMirror getEnclosingType() {
    +<span class="fc" id="L62">        return enclosingType;</span>
    +    }
    +
    +    @Override
    +    public List&lt;? extends ReflectionTypeMirror&gt; getTypeArguments() {
    +<span class="fc" id="L67">        return typeArguments;</span>
    +    }
    +
    +    @Override
    +    public TypeKind getKind() {
    +<span class="fc" id="L72">        return TypeKind.DECLARED;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/ElementImpl.html b/jacoco/net.florianschoppmann.java.reflect/ElementImpl.html
    new file mode 100644
    index 0000000..66d9858
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/ElementImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>ElementImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">ElementImpl</span></div><h1>ElementImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">26 of 58</td><td class="ctr2">55%</td><td class="bar">2 of 4</td><td class="ctr2">50%</td><td class="ctr1">2</td><td class="ctr2">6</td><td class="ctr1">3</td><td class="ctr2">12</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="ElementImpl.java.html#L25" class="el_method">finish(MirrorContext)</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="67" height="10" title="13" alt="13"/><img src="../.resources/greenbar.gif" width="52" height="10" title="10" alt="10"/></td><td class="ctr2" id="c2">43%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="60" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="60" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="ElementImpl.java.html#L17" class="el_method">requireFinished()</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="67" height="10" title="13" alt="13"/><img src="../.resources/greenbar.gif" width="20" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">24%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="60" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="60" height="10" title="1" alt="1"/></td><td class="ctr2" id="e1">50%</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="ElementImpl.java.html#L11" class="el_method">getModifiers()</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="62" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="ElementImpl.java.html#L6" class="el_method">ElementImpl()</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="31" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/ElementImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/ElementImpl.java.html
    new file mode 100644
    index 0000000..863d0e9
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/ElementImpl.java.html
    @@ -0,0 +1,35 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>ElementImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">ElementImpl.java</span></div><h1>ElementImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.lang.model.element.Modifier;
    +import java.util.Set;
    +
    +<span class="fc" id="L6">abstract class ElementImpl extends AnnotatedConstructImpl implements ReflectionElement {</span>
    +<span class="fc" id="L7">    private boolean finished = false;</span>
    +
    +    @Override
    +    public final Set&lt;Modifier&gt; getModifiers() {
    +<span class="fc" id="L11">        throw new UnsupportedOperationException(String.format(</span>
    +            &quot;Modifiers not currently supported by %s.&quot;, ReflectionTypes.class
    +        ));
    +    }
    +
    +    final void requireFinished() {
    +<span class="pc bpc" id="L17" title="1 of 2 branches missed.">        if (!finished) {</span>
    +<span class="nc" id="L18">            throw new IllegalStateException(String.format(&quot;Instance of %s used before it was ready.&quot;, getClass()));</span>
    +        }
    +<span class="fc" id="L20">    }</span>
    +
    +    abstract void finishDerivedFromElement(MirrorContext mirrorContext);
    +
    +    final void finish(MirrorContext mirrorContext) {
    +<span class="pc bpc" id="L25" title="1 of 2 branches missed.">        if (finished) {</span>
    +<span class="nc" id="L26">            throw new IllegalStateException(String.format(</span>
    +<span class="nc" id="L27">                &quot;Attempt to finish instance of %s more than once.&quot;, getClass()</span>
    +            ));
    +        }
    +
    +<span class="fc" id="L31">        finished = true;</span>
    +<span class="fc" id="L32">        finishDerivedFromElement(mirrorContext);</span>
    +<span class="fc" id="L33">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/ImmutableList.html b/jacoco/net.florianschoppmann.java.reflect/ImmutableList.html
    new file mode 100644
    index 0000000..1984672
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/ImmutableList.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>ImmutableList</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">ImmutableList</span></div><h1>ImmutableList</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 39</td><td class="ctr2">100%</td><td class="bar">0 of 2</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">7</td><td class="ctr1">0</td><td class="ctr2">10</td><td class="ctr1">0</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a0"><a href="ImmutableList.java.html#L17" class="el_method">copyOf(List)</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="15" alt="15"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../.resources/greenbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="ImmutableList.java.html#L8" class="el_method">static {...}</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="56" height="10" title="7" alt="7"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="ImmutableList.java.html#L12" class="el_method">ImmutableList(Object[])</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="48" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="ImmutableList.java.html#L33" class="el_method">get(int)</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="40" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="ImmutableList.java.html#L38" class="el_method">size()</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="32" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="ImmutableList.java.html#L26" class="el_method">emptyList()</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="16" height="10" title="2" alt="2"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/ImmutableList.java.html b/jacoco/net.florianschoppmann.java.reflect/ImmutableList.java.html
    new file mode 100644
    index 0000000..f5f8953
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/ImmutableList.java.html
    @@ -0,0 +1,41 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>ImmutableList.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">ImmutableList.java</span></div><h1>ImmutableList.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import java.util.AbstractList;
    +import java.util.List;
    +
    +final class ImmutableList&lt;E&gt; extends AbstractList&lt;E&gt; {
    +<span class="fc" id="L8">    private static final ImmutableList&lt;?&gt; EMPTY_LIST = new ImmutableList&lt;&gt;(new Object[0]);</span>
    +
    +    private final Object[] array;
    +
    +<span class="fc" id="L12">    private ImmutableList(Object[] array) {</span>
    +<span class="fc" id="L13">        this.array = array;</span>
    +<span class="fc" id="L14">    }</span>
    +
    +    static &lt;E&gt; ImmutableList&lt;E&gt; copyOf(List&lt;E&gt; original) {
    +<span class="fc bfc" id="L17" title="All 2 branches covered.">        if (original instanceof ImmutableList&lt;?&gt;) {</span>
    +<span class="fc" id="L18">            return (ImmutableList&lt;E&gt;) original;</span>
    +        } else {
    +<span class="fc" id="L20">            return new ImmutableList&lt;&gt;(original.toArray(new Object[original.size()]));</span>
    +        }
    +    }
    +
    +    @SuppressWarnings(&quot;unchecked&quot;)
    +    static &lt;E&gt; ImmutableList&lt;E&gt; emptyList() {
    +<span class="fc" id="L26">        return (ImmutableList&lt;E&gt;) EMPTY_LIST;</span>
    +    }
    +
    +    @Override
    +    @Nullable
    +    @SuppressWarnings(&quot;unchecked&quot;)
    +    public E get(int index) {
    +<span class="fc" id="L33">        return (E) array[index];</span>
    +    }
    +
    +    @Override
    +    public int size() {
    +<span class="fc" id="L38">        return array.length;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/IntersectionTypeImpl.html b/jacoco/net.florianschoppmann.java.reflect/IntersectionTypeImpl.html
    new file mode 100644
    index 0000000..e31f63a
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/IntersectionTypeImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>IntersectionTypeImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">IntersectionTypeImpl</span></div><h1>IntersectionTypeImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 63</td><td class="ctr2">100%</td><td class="bar">0 of 6</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">11</td><td class="ctr1">0</td><td class="ctr2">15</td><td class="ctr1">0</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a1"><a href="IntersectionTypeImpl.java.html#L23" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../.resources/greenbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a4"><a href="IntersectionTypeImpl.java.html#L36" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="91" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a5"><a href="IntersectionTypeImpl.java.html#L15" class="el_method">IntersectionTypeImpl(List)</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="57" height="10" title="10" alt="10"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="IntersectionTypeImpl.java.html#L46" class="el_method">accept(TypeVisitor, Object)</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="28" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="IntersectionTypeImpl.java.html#L41" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="22" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="IntersectionTypeImpl.java.html#L51" class="el_method">getBounds()</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="IntersectionTypeImpl.java.html#L56" class="el_method">getKind()</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="11" height="10" title="2" alt="2"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a6"><a href="IntersectionTypeImpl.java.html#L61" class="el_method">isIntersectionType()</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="11" height="10" title="2" alt="2"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/IntersectionTypeImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/IntersectionTypeImpl.java.html
    new file mode 100644
    index 0000000..bd05f29
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/IntersectionTypeImpl.java.html
    @@ -0,0 +1,64 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>IntersectionTypeImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">IntersectionTypeImpl.java</span></div><h1>IntersectionTypeImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import net.florianschoppmann.java.type.IntersectionType;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.type.TypeKind;
    +import javax.lang.model.type.TypeMirror;
    +import javax.lang.model.type.TypeVisitor;
    +import java.util.List;
    +import java.util.Objects;
    +
    +final class IntersectionTypeImpl extends AnnotatedConstructImpl implements IntersectionType, ReflectionTypeMirror {
    +    private final ImmutableList&lt;ReflectionTypeMirror&gt; bounds;
    +
    +<span class="fc" id="L15">    IntersectionTypeImpl(List&lt;ReflectionTypeMirror&gt; bounds) {</span>
    +<span class="fc" id="L16">        Objects.requireNonNull(bounds);</span>
    +
    +<span class="fc" id="L18">        this.bounds = ImmutableList.copyOf(bounds);</span>
    +<span class="fc" id="L19">    }</span>
    +
    +    @Override
    +    public boolean equals(@Nullable Object otherObject) {
    +<span class="fc bfc" id="L23" title="All 2 branches covered.">        if (this == otherObject) {</span>
    +<span class="fc" id="L24">            return true;</span>
    +<span class="fc bfc" id="L25" title="All 4 branches covered.">        } else if (otherObject == null || getClass() != otherObject.getClass()) {</span>
    +<span class="fc" id="L26">            return false;</span>
    +        }
    +
    +<span class="fc" id="L29">        return bounds.equals(((IntersectionTypeImpl) otherObject).bounds);</span>
    +    }
    +
    +    @Override
    +    public int hashCode() {
    +        // Do not return just bounds.hashCode() because both this instance and componentType are of type
    +        // ReflectionTypeMirror.
    +<span class="fc" id="L36">        return Objects.hash(getClass(), bounds.hashCode());</span>
    +    }
    +
    +    @Override
    +    public String toString() {
    +<span class="fc" id="L41">        return ReflectionTypes.getInstance().toString(this);</span>
    +    }
    +
    +    @Override
    +    public &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<span class="fc" id="L46">        return visitor.visitUnknown(this, parameter);</span>
    +    }
    +
    +    @Override
    +    public List&lt;? extends TypeMirror&gt; getBounds() {
    +<span class="fc" id="L51">        return bounds;</span>
    +    }
    +
    +    @Override
    +    public TypeKind getKind() {
    +<span class="fc" id="L56">        return TypeKind.OTHER;</span>
    +    }
    +
    +    @Override
    +    public boolean isIntersectionType() {
    +<span class="fc" id="L61">        return true;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/MirrorContext.html b/jacoco/net.florianschoppmann.java.reflect/MirrorContext.html
    new file mode 100644
    index 0000000..fb530f4
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/MirrorContext.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>MirrorContext</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">MirrorContext</span></div><h1>MirrorContext</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 80</td><td class="ctr2">100%</td><td class="bar">0 of 6</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">7</td><td class="ctr1">0</td><td class="ctr2">18</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="MirrorContext.java.html#L22" class="el_method">mirror(Type[])</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="31" alt="31"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"><img src="../.resources/greenbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="MirrorContext.java.html#L53" class="el_method">typeDeclaration(Class)</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="120" height="10" title="31" alt="31"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d0"><img src="../.resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">8</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="MirrorContext.java.html#L15" class="el_method">MirrorContext(ReflectionTypes, Map, Map)</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="46" height="10" title="12" alt="12"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="MirrorContext.java.html#L39" class="el_method">mirror(Type)</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="23" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/MirrorContext.java.html b/jacoco/net.florianschoppmann.java.reflect/MirrorContext.java.html
    new file mode 100644
    index 0000000..a1ee89c
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/MirrorContext.java.html
    @@ -0,0 +1,66 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>MirrorContext.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">MirrorContext.java</span></div><h1>MirrorContext.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import java.lang.reflect.Type;
    +import java.util.ArrayList;
    +import java.util.List;
    +import java.util.Map;
    +
    +final class MirrorContext {
    +    private final ReflectionTypes reflectionTypes;
    +    private final Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; typeDeclarations;
    +    private final Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; newTypeDeclarations;
    +
    +    MirrorContext(ReflectionTypes reflectionTypes, Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; typeDeclarations,
    +<span class="fc" id="L15">            Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; newTypeDeclarations) {</span>
    +<span class="fc" id="L16">        this.reflectionTypes = reflectionTypes;</span>
    +<span class="fc" id="L17">        this.typeDeclarations = typeDeclarations;</span>
    +<span class="fc" id="L18">        this.newTypeDeclarations = newTypeDeclarations;</span>
    +<span class="fc" id="L19">    }</span>
    +
    +    ImmutableList&lt;ReflectionTypeMirror&gt; mirror(Type[] types) {
    +<span class="fc" id="L22">        List&lt;ReflectionTypeMirror&gt; typeMirrors = new ArrayList&lt;&gt;();</span>
    +<span class="fc bfc" id="L23" title="All 2 branches covered.">        for (Type type: types) {</span>
    +<span class="fc" id="L24">            typeMirrors.add(reflectionTypes.mirrorInternal(type, this));</span>
    +        }
    +<span class="fc" id="L26">        return ImmutableList.copyOf(typeMirrors);</span>
    +    }
    +
    +    /**
    +     * Returns a type mirror for the given {@link Type} object.
    +     *
    +     * &lt;p&gt;This method creates a type mirror within this mirror context. This is similar, but different, to
    +     * {@link ReflectionTypes#typeMirror(Type)}, which starts a &lt;em&gt;new&lt;/em&gt; mirror context.
    +     *
    +     * @param type type as represented by Java Reflection API
    +     * @return type mirror for the given reflection type
    +     */
    +    ReflectionTypeMirror mirror(Type type) {
    +<span class="fc" id="L39">        return reflectionTypes.mirrorInternal(type, this);</span>
    +    }
    +
    +    /**
    +     * Returns a type element for the given {@link Class} object.
    +     *
    +     * &lt;p&gt;This methods provides a type element that has been created within this mirror context. Within a mirror
    +     * context, type elements are always reused. This method is similar, but different, to
    +     * {@link ReflectionTypes#typeElement(Class)}, which starts a &lt;em&gt;new&lt;/em&gt; mirror context.
    +     *
    +     * @param clazz class object
    +     * @return type element for the given class
    +     */
    +    TypeElementImpl typeDeclaration(Class&lt;?&gt; clazz) {
    +<span class="fc" id="L53">        @Nullable TypeElementImpl typeDeclaration = typeDeclarations.get(clazz);</span>
    +<span class="fc bfc" id="L54" title="All 2 branches covered.">        if (typeDeclaration != null) {</span>
    +<span class="fc" id="L55">            return typeDeclaration;</span>
    +        }
    +
    +<span class="fc" id="L58">        @Nullable TypeElementImpl newTypeDeclaration = newTypeDeclarations.get(clazz);</span>
    +<span class="fc bfc" id="L59" title="All 2 branches covered.">        if (newTypeDeclaration == null) {</span>
    +<span class="fc" id="L60">            newTypeDeclaration = new TypeElementImpl(clazz);</span>
    +<span class="fc" id="L61">            newTypeDeclarations.put(clazz, newTypeDeclaration);</span>
    +        }
    +<span class="fc" id="L63">        return newTypeDeclaration;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/NameImpl.html b/jacoco/net.florianschoppmann.java.reflect/NameImpl.html
    new file mode 100644
    index 0000000..4b25fd2
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/NameImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>NameImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">NameImpl</span></div><h1>NameImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">31 of 56</td><td class="ctr2">45%</td><td class="bar">6 of 6</td><td class="ctr2">0%</td><td class="ctr1">6</td><td class="ctr2">11</td><td class="ctr1">7</td><td class="ctr2">14</td><td class="ctr1">3</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a2"><a href="NameImpl.java.html#L16" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">5</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="NameImpl.java.html#L47" class="el_method">subSequence(int, int)</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="34" height="10" title="6" alt="6"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="NameImpl.java.html#L27" class="el_method">hashCode()</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="22" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="NameImpl.java.html#L10" class="el_method">NameImpl(String)</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="45" height="10" title="8" alt="8"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="NameImpl.java.html#L32" class="el_method">contentEquals(CharSequence)</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="28" height="10" title="5" alt="5"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a0"><a href="NameImpl.java.html#L42" class="el_method">charAt(int)</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="28" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a4"><a href="NameImpl.java.html#L37" class="el_method">length()</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="22" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a7"><a href="NameImpl.java.html#L52" class="el_method">toString()</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/NameImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/NameImpl.java.html
    new file mode 100644
    index 0000000..590ebf1
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/NameImpl.java.html
    @@ -0,0 +1,55 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>NameImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">NameImpl.java</span></div><h1>NameImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.element.Name;
    +import java.util.Objects;
    +
    +final class NameImpl implements Name {
    +    private final String name;
    +
    +<span class="fc" id="L10">    NameImpl(String name) {</span>
    +<span class="fc" id="L11">        this.name = Objects.requireNonNull(name);</span>
    +<span class="fc" id="L12">    }</span>
    +
    +    @Override
    +    public boolean equals(@Nullable Object otherObject) {
    +<span class="nc bnc" id="L16" title="All 2 branches missed.">        if (this == otherObject) {</span>
    +<span class="nc" id="L17">            return true;</span>
    +<span class="nc bnc" id="L18" title="All 4 branches missed.">        } else if (otherObject == null || getClass() != otherObject.getClass()) {</span>
    +<span class="nc" id="L19">            return false;</span>
    +        }
    +
    +<span class="nc" id="L22">        return name.equals(((NameImpl) otherObject).name);</span>
    +    }
    +
    +    @Override
    +    public int hashCode() {
    +<span class="nc" id="L27">        return name.hashCode();</span>
    +    }
    +
    +    @Override
    +    public boolean contentEquals(CharSequence charSequence) {
    +<span class="fc" id="L32">        return name.contentEquals(charSequence);</span>
    +    }
    +
    +    @Override
    +    public int length() {
    +<span class="fc" id="L37">        return name.length();</span>
    +    }
    +
    +    @Override
    +    public char charAt(int index) {
    +<span class="fc" id="L42">        return name.charAt(index);</span>
    +    }
    +
    +    @Override
    +    public CharSequence subSequence(int start, int end) {
    +<span class="nc" id="L47">        return name.subSequence(start, end);</span>
    +    }
    +
    +    @Override
    +    public String toString() {
    +<span class="fc" id="L52">        return name;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/NoTypeImpl.html b/jacoco/net.florianschoppmann.java.reflect/NoTypeImpl.html
    new file mode 100644
    index 0000000..7147279
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/NoTypeImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>NoTypeImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">NoTypeImpl</span></div><h1>NoTypeImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 29</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">5</td><td class="ctr1">0</td><td class="ctr2">8</td><td class="ctr1">0</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a3"><a href="NoTypeImpl.java.html#L9" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="11" alt="11"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="NoTypeImpl.java.html#L14" class="el_method">NoTypeImpl(TypeKind)</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="65" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="NoTypeImpl.java.html#L25" class="el_method">accept(TypeVisitor, Object)</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="54" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="NoTypeImpl.java.html#L20" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="43" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="NoTypeImpl.java.html#L30" class="el_method">getKind()</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="32" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/NoTypeImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/NoTypeImpl.java.html
    new file mode 100644
    index 0000000..1dd1395
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/NoTypeImpl.java.html
    @@ -0,0 +1,33 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>NoTypeImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">NoTypeImpl.java</span></div><h1>NoTypeImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.type.NoType;
    +import javax.lang.model.type.TypeKind;
    +import javax.lang.model.type.TypeVisitor;
    +
    +final class NoTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, NoType {
    +<span class="fc" id="L9">    static final NoTypeImpl VOID = new NoTypeImpl(TypeKind.VOID);</span>
    +<span class="fc" id="L10">    static final NoTypeImpl NONE = new NoTypeImpl(TypeKind.NONE);</span>
    +
    +    private final TypeKind typeKind;
    +
    +<span class="fc" id="L14">    NoTypeImpl(TypeKind typeKind) {</span>
    +<span class="fc" id="L15">        this.typeKind = typeKind;</span>
    +<span class="fc" id="L16">    }</span>
    +
    +    @Override
    +    public String toString() {
    +<span class="fc" id="L20">        return ReflectionTypes.getInstance().toString(this);</span>
    +    }
    +
    +    @Override
    +    public &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<span class="fc" id="L25">        return visitor.visitNoType(this, parameter);</span>
    +    }
    +
    +    @Override
    +    public TypeKind getKind() {
    +<span class="fc" id="L30">        return typeKind;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/NullTypeImpl.html b/jacoco/net.florianschoppmann.java.reflect/NullTypeImpl.html
    new file mode 100644
    index 0000000..76ca25c
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/NullTypeImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>NullTypeImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">NullTypeImpl</span></div><h1>NullTypeImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 19</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">5</td><td class="ctr1">0</td><td class="ctr2">5</td><td class="ctr1">0</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a0"><a href="NullTypeImpl.java.html#L18" class="el_method">accept(TypeVisitor, Object)</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="NullTypeImpl.java.html#L9" class="el_method">static {...}</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="NullTypeImpl.java.html#L13" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="96" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="NullTypeImpl.java.html#L8" class="el_method">NullTypeImpl()</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="72" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="NullTypeImpl.java.html#L23" class="el_method">getKind()</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/NullTypeImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/NullTypeImpl.java.html
    new file mode 100644
    index 0000000..bf62e3b
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/NullTypeImpl.java.html
    @@ -0,0 +1,26 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>NullTypeImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">NullTypeImpl.java</span></div><h1>NullTypeImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.type.NullType;
    +import javax.lang.model.type.TypeKind;
    +import javax.lang.model.type.TypeVisitor;
    +
    +<span class="fc" id="L8">final class NullTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, NullType {</span>
    +<span class="fc" id="L9">    static final NullTypeImpl INSTANCE = new NullTypeImpl();</span>
    +
    +    @Override
    +    public String toString() {
    +<span class="fc" id="L13">        return ReflectionTypes.getInstance().toString(this);</span>
    +    }
    +
    +    @Override
    +    public &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<span class="fc" id="L18">        return visitor.visitNull(this, parameter);</span>
    +    }
    +
    +    @Override
    +    public TypeKind getKind() {
    +<span class="fc" id="L23">        return TypeKind.NULL;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/PrimitiveTypeImpl.html b/jacoco/net.florianschoppmann.java.reflect/PrimitiveTypeImpl.html
    new file mode 100644
    index 0000000..e15eb7b
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/PrimitiveTypeImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>PrimitiveTypeImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">PrimitiveTypeImpl</span></div><h1>PrimitiveTypeImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 59</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">5</td><td class="ctr1">0</td><td class="ctr2">14</td><td class="ctr1">0</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a3"><a href="PrimitiveTypeImpl.java.html#L9" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="41" alt="41"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">8</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="PrimitiveTypeImpl.java.html#L20" class="el_method">PrimitiveTypeImpl(TypeKind)</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="17" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="PrimitiveTypeImpl.java.html#L31" class="el_method">accept(TypeVisitor, Object)</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="14" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="PrimitiveTypeImpl.java.html#L26" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="PrimitiveTypeImpl.java.html#L36" class="el_method">getKind()</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/PrimitiveTypeImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/PrimitiveTypeImpl.java.html
    new file mode 100644
    index 0000000..3f18147
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/PrimitiveTypeImpl.java.html
    @@ -0,0 +1,39 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>PrimitiveTypeImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">PrimitiveTypeImpl.java</span></div><h1>PrimitiveTypeImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.type.PrimitiveType;
    +import javax.lang.model.type.TypeKind;
    +import javax.lang.model.type.TypeVisitor;
    +
    +final class PrimitiveTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, PrimitiveType {
    +<span class="fc" id="L9">    static final PrimitiveTypeImpl DOUBLE = new PrimitiveTypeImpl(TypeKind.DOUBLE);</span>
    +<span class="fc" id="L10">    static final PrimitiveTypeImpl FLOAT = new PrimitiveTypeImpl(TypeKind.FLOAT);</span>
    +<span class="fc" id="L11">    static final PrimitiveTypeImpl LONG = new PrimitiveTypeImpl(TypeKind.LONG);</span>
    +<span class="fc" id="L12">    static final PrimitiveTypeImpl INT = new PrimitiveTypeImpl(TypeKind.INT);</span>
    +<span class="fc" id="L13">    static final PrimitiveTypeImpl SHORT = new PrimitiveTypeImpl(TypeKind.SHORT);</span>
    +<span class="fc" id="L14">    static final PrimitiveTypeImpl BYTE = new PrimitiveTypeImpl(TypeKind.BYTE);</span>
    +<span class="fc" id="L15">    static final PrimitiveTypeImpl CHAR = new PrimitiveTypeImpl(TypeKind.CHAR);</span>
    +<span class="fc" id="L16">    static final PrimitiveTypeImpl BOOLEAN = new PrimitiveTypeImpl(TypeKind.BOOLEAN);</span>
    +
    +    private final TypeKind typeKind;
    +
    +<span class="fc" id="L20">    PrimitiveTypeImpl(TypeKind typeKind) {</span>
    +<span class="fc" id="L21">        this.typeKind = typeKind;</span>
    +<span class="fc" id="L22">    }</span>
    +
    +    @Override
    +    public String toString() {
    +<span class="fc" id="L26">        return ReflectionTypes.getInstance().toString(this);</span>
    +    }
    +
    +    @Override
    +    public &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<span class="fc" id="L31">        return visitor.visitPrimitive(this, parameter);</span>
    +    }
    +
    +    @Override
    +    public TypeKind getKind() {
    +<span class="fc" id="L36">        return typeKind;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/ReflectionTypes.html b/jacoco/net.florianschoppmann.java.reflect/ReflectionTypes.html
    new file mode 100644
    index 0000000..f5af375
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/ReflectionTypes.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>ReflectionTypes</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">ReflectionTypes</span></div><h1>ReflectionTypes</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">25 of 922</td><td class="ctr2">97%</td><td class="bar">15 of 104</td><td class="ctr2">86%</td><td class="ctr1">16</td><td class="ctr2">85</td><td class="ctr1">1</td><td class="ctr2">182</td><td class="ctr1">1</td><td class="ctr2">33</td></tr></tfoot><tbody><tr><td id="a18"><a href="ReflectionTypes.java.html#L256" class="el_method">mirrorInternal(Type, MirrorContext)</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="7" height="10" title="6" alt="6"/><img src="../.resources/greenbar.gif" width="78" height="10" title="64" alt="64"/></td><td class="ctr2" id="c28">91%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="26" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="80" height="10" title="12" alt="12"/></td><td class="ctr2" id="e13">75%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g1">9</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">15</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a20"><a href="ReflectionTypes.java.html#L236" class="el_method">mirrorTypeVariable(TypeVariable, MirrorContext)</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="7" height="10" title="6" alt="6"/><img src="../.resources/greenbar.gif" width="64" height="10" title="53" alt="53"/></td><td class="ctr2" id="c29">90%</td><td class="bar" id="d2"><img src="../.resources/redbar.gif" width="26" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="53" height="10" title="8" alt="8"/></td><td class="ctr2" id="e15">67%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g3">7</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i3">13</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="ReflectionTypes.java.html#L120" class="el_method">boxedClass(PrimitiveType)</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="6" height="10" title="5" alt="5"/><img src="../.resources/greenbar.gif" width="23" height="10" title="19" alt="19"/></td><td class="ctr2" id="c31">79%</td><td class="bar" id="d3"><img src="../.resources/redbar.gif" width="13" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="13" height="10" title="2" alt="2"/></td><td class="ctr2" id="e16">50%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g5">3</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i13">4</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a21"><a href="ReflectionTypes.java.html#L206" class="el_method">mirrorWildcardType(WildcardType, MirrorContext)</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="4" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="71" height="10" title="58" alt="58"/></td><td class="ctr2" id="c27">94%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="26" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="66" height="10" title="10" alt="10"/></td><td class="ctr2" id="e14">71%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">8</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i5">11</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a27"><a href="ReflectionTypes.java.html#L53" class="el_method">static {...}</a></td><td class="bar" id="b4"><img src="../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="12" height="10" title="10" alt="10"/></td><td class="ctr2" id="c30">83%</td><td class="bar" id="d4"><img src="../.resources/redbar.gif" width="6" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="6" height="10" title="1" alt="1"/></td><td class="ctr2" id="e17">50%</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g11">2</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i24">2</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a16"><a href="ReflectionTypes.java.html#L455" class="el_method">isSubsignature(ExecutableType, ExecutableType)</a></td><td class="bar" id="b5"><img src="../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c32">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i26">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a31"><a href="ReflectionTypes.java.html#L128" class="el_method">unboxedType(TypeMirror)</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="120" height="10" title="98" alt="98"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d5"><img src="../.resources/greenbar.gif" width="120" height="10" title="18" alt="18"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g0">10</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i0">21</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a22"><a href="ReflectionTypes.java.html#L59" class="el_method">ReflectionTypes()</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="113" height="10" title="93" alt="93"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i2">15</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a30"><a href="ReflectionTypes.java.html#L308" class="el_method">typeMirror(Type)</a></td><td class="bar" id="b8"><img src="../.resources/greenbar.gif" width="62" height="10" title="51" alt="51"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d7"><img src="../.resources/greenbar.gif" width="26" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i4">13</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a10"><a href="ReflectionTypes.java.html#L397" class="el_method">getIntersectionType(TypeMirror[])</a></td><td class="bar" id="b9"><img src="../.resources/greenbar.gif" width="56" height="10" title="46" alt="46"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d8"><img src="../.resources/greenbar.gif" width="26" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i7">8</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a17"><a href="ReflectionTypes.java.html#L162" class="el_method">mirrorClass(Class, MirrorContext)</a></td><td class="bar" id="b10"><img src="../.resources/greenbar.gif" width="51" height="10" title="42" alt="42"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d6"><img src="../.resources/greenbar.gif" width="40" height="10" title="6" alt="6"/></td><td class="ctr2" id="e3">100%</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g4">4</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i6">9</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a11"><a href="ReflectionTypes.java.html#L355" class="el_method">getNoType(TypeKind)</a></td><td class="bar" id="b11"><img src="../.resources/greenbar.gif" width="47" height="10" title="39" alt="39"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d9"><img src="../.resources/greenbar.gif" width="26" height="10" title="4" alt="4"/></td><td class="ctr2" id="e4">100%</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i8">7</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a28"><a href="ReflectionTypes.java.html#L325" class="el_method">toList(TypeMirror[])</a></td><td class="bar" id="b12"><img src="../.resources/greenbar.gif" width="36" height="10" title="30" alt="30"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d12"><img src="../.resources/greenbar.gif" width="13" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">100%</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g12">2</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i14">4</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a24"><a href="ReflectionTypes.java.html#L93" class="el_method">requireValidElement(Element)</a></td><td class="bar" id="b13"><img src="../.resources/greenbar.gif" width="35" height="10" title="29" alt="29"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d13"><img src="../.resources/greenbar.gif" width="13" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">100%</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g13">2</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i10">5</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a19"><a href="ReflectionTypes.java.html#L182" class="el_method">mirrorParameterizedType(ParameterizedType, MirrorContext)</a></td><td class="bar" id="b14"><img src="../.resources/greenbar.gif" width="35" height="10" title="29" alt="29"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d14"><img src="../.resources/greenbar.gif" width="13" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">100%</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g14">2</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i9">7</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a25"><a href="ReflectionTypes.java.html#L104" class="el_method">requireValidType(TypeMirror)</a></td><td class="bar" id="b15"><img src="../.resources/greenbar.gif" width="34" height="10" title="28" alt="28"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d10"><img src="../.resources/greenbar.gif" width="26" height="10" title="4" alt="4"/></td><td class="ctr2" id="e8">100%</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g9">3</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i15">4</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a7"><a href="ReflectionTypes.java.html#L335" class="el_method">getDeclaredType(DeclaredType, TypeElement, TypeMirror[])</a></td><td class="bar" id="b16"><img src="../.resources/greenbar.gif" width="30" height="10" title="25" alt="25"/></td><td class="ctr2" id="c10">100%</td><td class="bar" id="d15"><img src="../.resources/greenbar.gif" width="13" height="10" title="2" alt="2"/></td><td class="ctr2" id="e9">100%</td><td class="ctr1" id="f16">0</td><td class="ctr2" id="g15">2</td><td class="ctr1" id="h16">0</td><td class="ctr2" id="i11">5</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a29"><a href="ReflectionTypes.java.html#L287" class="el_method">typeElement(Class)</a></td><td class="bar" id="b17"><img src="../.resources/greenbar.gif" width="29" height="10" title="24" alt="24"/></td><td class="ctr2" id="c11">100%</td><td class="bar" id="d11"><img src="../.resources/greenbar.gif" width="26" height="10" title="4" alt="4"/></td><td class="ctr2" id="e10">100%</td><td class="ctr1" id="f17">0</td><td class="ctr2" id="g10">3</td><td class="ctr1" id="h17">0</td><td class="ctr2" id="i17">3</td><td class="ctr1" id="j17">0</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a26"><a href="ReflectionTypes.java.html#L414" class="el_method">setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)</a></td><td class="bar" id="b18"><img src="../.resources/greenbar.gif" width="28" height="10" title="23" alt="23"/></td><td class="ctr2" id="c12">100%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f18">0</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h18">0</td><td class="ctr2" id="i12">5</td><td class="ctr1" id="j18">0</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a13"><a href="ReflectionTypes.java.html#L426" class="el_method">getPrimitiveType(TypeKind)</a></td><td class="bar" id="b19"><img src="../.resources/greenbar.gif" width="28" height="10" title="23" alt="23"/></td><td class="ctr2" id="c13">100%</td><td class="bar" id="d16"><img src="../.resources/greenbar.gif" width="13" height="10" title="2" alt="2"/></td><td class="ctr2" id="e11">100%</td><td class="ctr1" id="f19">0</td><td class="ctr2" id="g16">2</td><td class="ctr1" id="h19">0</td><td class="ctr2" id="i16">4</td><td class="ctr1" id="j19">0</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a0"><a href="ReflectionTypes.java.html#L114" class="el_method">addPrimitive(List, List, TypeKind, PrimitiveTypeImpl, Class)</a></td><td class="bar" id="b20"><img src="../.resources/greenbar.gif" width="20" height="10" title="17" alt="17"/></td><td class="ctr2" id="c14">100%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f20">0</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h20">0</td><td class="ctr2" id="i18">3</td><td class="ctr1" id="j20">0</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a4"><a href="ReflectionTypes.java.html#L382" class="el_method">createTypeVariable(TypeParameterElement, WildcardType)</a></td><td class="bar" id="b21"><img src="../.resources/greenbar.gif" width="19" height="10" title="16" alt="16"/></td><td class="ctr2" id="c15">100%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f21">0</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h21">0</td><td class="ctr2" id="i19">3</td><td class="ctr1" id="j21">0</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a23"><a href="ReflectionTypes.java.html#L230" class="el_method">requireCondition(boolean, String, Object)</a></td><td class="bar" id="b22"><img src="../.resources/greenbar.gif" width="18" height="10" title="15" alt="15"/></td><td class="ctr2" id="c16">100%</td><td class="bar" id="d17"><img src="../.resources/greenbar.gif" width="13" height="10" title="2" alt="2"/></td><td class="ctr2" id="e12">100%</td><td class="ctr1" id="f22">0</td><td class="ctr2" id="g17">2</td><td class="ctr1" id="h22">0</td><td class="ctr2" id="i20">3</td><td class="ctr1" id="j22">0</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a8"><a href="ReflectionTypes.java.html#L347" class="el_method">getDeclaredType(TypeElement, TypeMirror[])</a></td><td class="bar" id="b23"><img src="../.resources/greenbar.gif" width="18" height="10" title="15" alt="15"/></td><td class="ctr2" id="c17">100%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f23">0</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h23">0</td><td class="ctr2" id="i21">3</td><td class="ctr1" id="j23">0</td><td class="ctr2" id="k23">1</td></tr><tr><td id="a14"><a href="ReflectionTypes.java.html#L436" class="el_method">getWildcardType(TypeMirror, TypeMirror)</a></td><td class="bar" id="b24"><img src="../.resources/greenbar.gif" width="17" height="10" title="14" alt="14"/></td><td class="ctr2" id="c18">100%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f24">0</td><td class="ctr2" id="g24">1</td><td class="ctr1" id="h24">0</td><td class="ctr2" id="i22">3</td><td class="ctr1" id="j24">0</td><td class="ctr2" id="k24">1</td></tr><tr><td id="a6"><a href="ReflectionTypes.java.html#L373" class="el_method">getArrayType(TypeMirror)</a></td><td class="bar" id="b25"><img src="../.resources/greenbar.gif" width="14" height="10" title="12" alt="12"/></td><td class="ctr2" id="c19">100%</td><td class="bar" id="d25"/><td class="ctr2" id="e25">n/a</td><td class="ctr1" id="f25">0</td><td class="ctr2" id="g25">1</td><td class="ctr1" id="h25">0</td><td class="ctr2" id="i23">3</td><td class="ctr1" id="j25">0</td><td class="ctr2" id="k25">1</td></tr><tr><td id="a3"><a href="ReflectionTypes.java.html#L390" class="el_method">capturedTypeArgument(TypeVariable)</a></td><td class="bar" id="b26"><img src="../.resources/greenbar.gif" width="11" height="10" title="9" alt="9"/></td><td class="ctr2" id="c20">100%</td><td class="bar" id="d26"/><td class="ctr2" id="e26">n/a</td><td class="ctr1" id="f26">0</td><td class="ctr2" id="g26">1</td><td class="ctr1" id="h26">0</td><td class="ctr2" id="i25">2</td><td class="ctr1" id="j26">0</td><td class="ctr2" id="k26">1</td></tr><tr><td id="a32"><a href="ReflectionTypes.java.html#L443" class="el_method">unsupportedException()</a></td><td class="bar" id="b27"><img src="../.resources/greenbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="c21">100%</td><td class="bar" id="d27"/><td class="ctr2" id="e27">n/a</td><td class="ctr1" id="f27">0</td><td class="ctr2" id="g27">1</td><td class="ctr1" id="h27">0</td><td class="ctr2" id="i27">1</td><td class="ctr1" id="j27">0</td><td class="ctr2" id="k27">1</td></tr><tr><td id="a9"><a href="ReflectionTypes.java.html#L88" class="el_method">getInstance()</a></td><td class="bar" id="b28"><img src="../.resources/greenbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c22">100%</td><td class="bar" id="d28"/><td class="ctr2" id="e28">n/a</td><td class="ctr1" id="f28">0</td><td class="ctr2" id="g28">1</td><td class="ctr1" id="h28">0</td><td class="ctr2" id="i28">1</td><td class="ctr1" id="j28">0</td><td class="ctr2" id="k28">1</td></tr><tr><td id="a12"><a href="ReflectionTypes.java.html#L368" class="el_method">getNullType()</a></td><td class="bar" id="b29"><img src="../.resources/greenbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c23">100%</td><td class="bar" id="d29"/><td class="ctr2" id="e29">n/a</td><td class="ctr1" id="f29">0</td><td class="ctr2" id="g29">1</td><td class="ctr1" id="h29">0</td><td class="ctr2" id="i29">1</td><td class="ctr1" id="j29">0</td><td class="ctr2" id="k29">1</td></tr><tr><td id="a15"><a href="ReflectionTypes.java.html#L450" class="el_method">isAssignable(TypeMirror, TypeMirror)</a></td><td class="bar" id="b30"><img src="../.resources/greenbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c24">100%</td><td class="bar" id="d30"/><td class="ctr2" id="e30">n/a</td><td class="ctr1" id="f30">0</td><td class="ctr2" id="g30">1</td><td class="ctr1" id="h30">0</td><td class="ctr2" id="i30">1</td><td class="ctr1" id="j30">0</td><td class="ctr2" id="k30">1</td></tr><tr><td id="a1"><a href="ReflectionTypes.java.html#L460" class="el_method">asMemberOf(DeclaredType, Element)</a></td><td class="bar" id="b31"><img src="../.resources/greenbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c25">100%</td><td class="bar" id="d31"/><td class="ctr2" id="e31">n/a</td><td class="ctr1" id="f31">0</td><td class="ctr2" id="g31">1</td><td class="ctr1" id="h31">0</td><td class="ctr2" id="i31">1</td><td class="ctr1" id="j31">0</td><td class="ctr2" id="k31">1</td></tr><tr><td id="a5"><a href="ReflectionTypes.java.html#L468" class="el_method">directSupertypes(TypeMirror)</a></td><td class="bar" id="b32"><img src="../.resources/greenbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c26">100%</td><td class="bar" id="d32"/><td class="ctr2" id="e32">n/a</td><td class="ctr1" id="f32">0</td><td class="ctr2" id="g32">1</td><td class="ctr1" id="h32">0</td><td class="ctr2" id="i32">1</td><td class="ctr1" id="j32">0</td><td class="ctr2" id="k32">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/ReflectionTypes.java.html b/jacoco/net.florianschoppmann.java.reflect/ReflectionTypes.java.html
    new file mode 100644
    index 0000000..d2ad335
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/ReflectionTypes.java.html
    @@ -0,0 +1,471 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>ReflectionTypes.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">ReflectionTypes.java</span></div><h1>ReflectionTypes.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import net.florianschoppmann.java.type.AbstractTypes;
    +import net.florianschoppmann.java.type.IntersectionType;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.element.Element;
    +import javax.lang.model.element.Name;
    +import javax.lang.model.element.TypeElement;
    +import javax.lang.model.element.TypeParameterElement;
    +import javax.lang.model.type.ArrayType;
    +import javax.lang.model.type.DeclaredType;
    +import javax.lang.model.type.ExecutableType;
    +import javax.lang.model.type.NoType;
    +import javax.lang.model.type.NullType;
    +import javax.lang.model.type.PrimitiveType;
    +import javax.lang.model.type.TypeKind;
    +import javax.lang.model.type.TypeMirror;
    +import java.lang.reflect.GenericArrayType;
    +import java.lang.reflect.GenericDeclaration;
    +import java.lang.reflect.ParameterizedType;
    +import java.lang.reflect.Type;
    +import java.lang.reflect.TypeVariable;
    +import java.lang.reflect.WildcardType;
    +import java.util.ArrayList;
    +import java.util.Arrays;
    +import java.util.Collections;
    +import java.util.LinkedHashMap;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Objects;
    +
    +/**
    + * Implementation of {@link javax.lang.model.util.Types} backed by the Java Reflection API.
    + *
    + * &lt;p&gt;All {@link Element} and {@link TypeMirror} objects returned by this class are immutable and therefore thread-safe.
    + * Likewise, only a stateless (and thus thread-safe) singleton instance of this class is available via
    + * {@link #getInstance()}.
    + *
    + * &lt;p&gt;Currently unsupported are (resulting in an {@link UnsupportedOperationException}):
    + * &lt;ul&gt;&lt;li&gt;
    + *     Type parameters in method declarations. See {@link #typeMirror(Type)} for details.
    + * &lt;/li&gt;&lt;li&gt;
    + *     {@link #directSupertypes(TypeMirror)}
    + * &lt;/li&gt;&lt;li&gt;
    + *     {@link #asMemberOf(DeclaredType, Element)}
    + * &lt;/li&gt;&lt;li&gt;
    + *     {@link #isAssignable(TypeMirror, TypeMirror)}
    + * &lt;/li&gt;&lt;li&gt;
    + *     {@link #isSubsignature(ExecutableType, ExecutableType)}
    + * &lt;/li&gt;&lt;/ul&gt;
    + */
    +<span class="pc bpc" id="L53" title="1 of 2 branches missed.">public final class ReflectionTypes extends AbstractTypes {</span>
    +<span class="fc" id="L54">    private static final ReflectionTypes INSTANCE = new ReflectionTypes();</span>
    +
    +    private final ImmutableList&lt;PrimitiveTypeImpl&gt; primitiveTypes;
    +    private final ImmutableList&lt;TypeElementImpl&gt; boxedTypeDeclarations;
    +    {
    +<span class="fc" id="L59">        List&lt;PrimitiveTypeImpl&gt; newTypes = new ArrayList&lt;&gt;(TypeKind.values().length);</span>
    +<span class="fc" id="L60">        List&lt;TypeElementImpl&gt; newDeclarations = new ArrayList&lt;&gt;(TypeKind.values().length);</span>
    +
    +<span class="fc" id="L62">        newTypes.addAll(Collections.&lt;PrimitiveTypeImpl&gt;nCopies(TypeKind.values().length, null));</span>
    +<span class="fc" id="L63">        newDeclarations.addAll(Collections.&lt;TypeElementImpl&gt;nCopies(TypeKind.values().length, null));</span>
    +
    +<span class="fc" id="L65">        addPrimitive(newTypes, newDeclarations, TypeKind.DOUBLE, PrimitiveTypeImpl.DOUBLE, Double.class);</span>
    +<span class="fc" id="L66">        addPrimitive(newTypes, newDeclarations, TypeKind.FLOAT, PrimitiveTypeImpl.FLOAT, Float.class);</span>
    +<span class="fc" id="L67">        addPrimitive(newTypes, newDeclarations, TypeKind.LONG, PrimitiveTypeImpl.LONG, Long.class);</span>
    +<span class="fc" id="L68">        addPrimitive(newTypes, newDeclarations, TypeKind.INT, PrimitiveTypeImpl.INT, Integer.class);</span>
    +<span class="fc" id="L69">        addPrimitive(newTypes, newDeclarations, TypeKind.SHORT, PrimitiveTypeImpl.SHORT, Short.class);</span>
    +<span class="fc" id="L70">        addPrimitive(newTypes, newDeclarations, TypeKind.BYTE, PrimitiveTypeImpl.BYTE, Byte.class);</span>
    +<span class="fc" id="L71">        addPrimitive(newTypes, newDeclarations, TypeKind.CHAR, PrimitiveTypeImpl.CHAR, Character.class);</span>
    +<span class="fc" id="L72">        addPrimitive(newTypes, newDeclarations, TypeKind.BOOLEAN, PrimitiveTypeImpl.BOOLEAN, Boolean.class);</span>
    +
    +<span class="fc" id="L74">        primitiveTypes = ImmutableList.copyOf(newTypes);</span>
    +<span class="fc" id="L75">        boxedTypeDeclarations = ImmutableList.copyOf(newDeclarations);</span>
    +    }
    +
    +<span class="fc" id="L78">    private ReflectionTypes() { }</span>
    +
    +    /**
    +     * Returns the singleton instance of this class.
    +     *
    +     * &lt;p&gt;Since this class does not contain any state, and since it is immutable, the returned instance is thread-safe.
    +     *
    +     * @return the singleton instance of this class
    +     */
    +    public static ReflectionTypes getInstance() {
    +<span class="fc" id="L88">        return INSTANCE;</span>
    +    }
    +
    +    @Override
    +    protected void requireValidElement(Element element) {
    +<span class="fc" id="L93">        Objects.requireNonNull(element);</span>
    +<span class="fc bfc" id="L94" title="All 2 branches covered.">        if (!(element instanceof ReflectionElement)) {</span>
    +<span class="fc" id="L95">            throw new IllegalArgumentException(String.format(</span>
    +                &quot;Expected %s instance that was created by %s, but got instance of %s.&quot;,
    +<span class="fc" id="L97">                Element.class.getSimpleName(), ReflectionTypes.class, element.getClass()</span>
    +            ));
    +        }
    +<span class="fc" id="L100">    }</span>
    +
    +    @Override
    +    protected void requireValidType(@Nullable TypeMirror type) {
    +<span class="fc bfc" id="L104" title="All 4 branches covered.">        if (!(type instanceof ReflectionTypeMirror) &amp;&amp; type != null) {</span>
    +<span class="fc" id="L105">            throw new IllegalArgumentException(String.format(</span>
    +                &quot;Expected %s instance that was created by %s, but got instance of %s.&quot;,
    +<span class="fc" id="L107">                TypeMirror.class.getSimpleName(), ReflectionTypes.class, type.getClass()</span>
    +            ));
    +        }
    +<span class="fc" id="L110">    }</span>
    +
    +    private void addPrimitive(List&lt;PrimitiveTypeImpl&gt; newPrimitiveTypes, List&lt;TypeElementImpl&gt; newBoxedTypeDeclarations,
    +            TypeKind kind, PrimitiveTypeImpl primitiveType, Class&lt;?&gt; clazz) {
    +<span class="fc" id="L114">        newPrimitiveTypes.set(kind.ordinal(), primitiveType);</span>
    +<span class="fc" id="L115">        newBoxedTypeDeclarations.set(kind.ordinal(), ((DeclaredTypeImpl) typeMirror(clazz)).asElement());</span>
    +<span class="fc" id="L116">    }</span>
    +
    +    @Override
    +    public TypeElement boxedClass(PrimitiveType primitiveType) {
    +<span class="fc" id="L120">        requireValidType(Objects.requireNonNull(primitiveType));</span>
    +<span class="fc" id="L121">        @Nullable TypeElementImpl typeElement = boxedTypeDeclarations.get(primitiveType.getKind().ordinal());</span>
    +<span class="pc bpc" id="L122" title="2 of 4 branches missed.">        assert typeElement != null : &quot;Array with boxed type declarations incorrectly initialized.&quot;;</span>
    +<span class="fc" id="L123">        return typeElement;</span>
    +    }
    +
    +    @Override
    +    public PrimitiveType unboxedType(TypeMirror type) {
    +<span class="fc" id="L128">        requireValidType(Objects.requireNonNull(type));</span>
    +
    +<span class="fc bfc" id="L130" title="All 2 branches covered.">        if (type.getKind() != TypeKind.DECLARED) {</span>
    +<span class="fc" id="L131">            throw new IllegalArgumentException(String.format(</span>
    +                &quot;Expected type mirror of kind %s, but got %s.&quot;, TypeKind.DECLARED, type
    +            ));
    +        }
    +
    +<span class="fc" id="L136">        Name name = ((DeclaredTypeImpl) type).asElement().getQualifiedName();</span>
    +<span class="fc bfc" id="L137" title="All 2 branches covered.">        if (name.contentEquals(Double.class.getName())) {</span>
    +<span class="fc" id="L138">            return PrimitiveTypeImpl.DOUBLE;</span>
    +<span class="fc bfc" id="L139" title="All 2 branches covered.">        } else if (name.contentEquals(Float.class.getName())) {</span>
    +<span class="fc" id="L140">            return PrimitiveTypeImpl.FLOAT;</span>
    +<span class="fc bfc" id="L141" title="All 2 branches covered.">        } else if (name.contentEquals(Long.class.getName())) {</span>
    +<span class="fc" id="L142">            return PrimitiveTypeImpl.LONG;</span>
    +<span class="fc bfc" id="L143" title="All 2 branches covered.">        } else if (name.contentEquals(Integer.class.getName())) {</span>
    +<span class="fc" id="L144">            return PrimitiveTypeImpl.INT;</span>
    +<span class="fc bfc" id="L145" title="All 2 branches covered.">        } else if (name.contentEquals(Short.class.getName())) {</span>
    +<span class="fc" id="L146">            return PrimitiveTypeImpl.SHORT;</span>
    +<span class="fc bfc" id="L147" title="All 2 branches covered.">        } else if (name.contentEquals(Byte.class.getName())) {</span>
    +<span class="fc" id="L148">            return PrimitiveTypeImpl.BYTE;</span>
    +<span class="fc bfc" id="L149" title="All 2 branches covered.">        } else if (name.contentEquals(Character.class.getName())) {</span>
    +<span class="fc" id="L150">            return PrimitiveTypeImpl.CHAR;</span>
    +<span class="fc bfc" id="L151" title="All 2 branches covered.">        } else if (name.contentEquals(Boolean.class.getName())) {</span>
    +<span class="fc" id="L152">            return PrimitiveTypeImpl.BOOLEAN;</span>
    +        } else {
    +<span class="fc" id="L154">            throw new IllegalArgumentException(String.format(&quot;Expected boxed type, but got %s.&quot;, type));</span>
    +        }
    +    }
    +
    +    /**
    +     * Returns a type mirror for the given {@link Class} object.
    +     */
    +    private ReflectionTypeMirror mirrorClass(Class&lt;?&gt; clazz, MirrorContext mirrorContext) {
    +<span class="fc bfc" id="L162" title="All 2 branches covered.">        if (clazz.isArray()) {</span>
    +<span class="fc" id="L163">            return new ArrayTypeImpl(mirrorContext.mirror(clazz.getComponentType()));</span>
    +<span class="fc bfc" id="L164" title="All 2 branches covered.">        } else if (clazz.isPrimitive()) {</span>
    +<span class="fc" id="L165">            return (ReflectionTypeMirror) getPrimitiveType(TypeKind.valueOf(clazz.getName().toUpperCase()));</span>
    +        } else {
    +            // raw type
    +<span class="fc" id="L168">            @Nullable Class&lt;?&gt; enclosingClass = clazz.getEnclosingClass();</span>
    +<span class="fc bfc" id="L169" title="All 2 branches covered.">            ReflectionTypeMirror enclosingType = enclosingClass == null</span>
    +                ? NoTypeImpl.NONE
    +<span class="fc" id="L171">                : mirrorContext.mirror(enclosingClass);</span>
    +<span class="fc" id="L172">            return new DeclaredTypeImpl(enclosingType, mirrorContext.typeDeclaration(clazz),</span>
    +<span class="fc" id="L173">                Collections.&lt;ReflectionTypeMirror&gt;emptyList());</span>
    +        }
    +    }
    +
    +    /**
    +     * Returns a type mirror for the given {@link ParameterizedType} object.
    +     */
    +    private static DeclaredTypeImpl mirrorParameterizedType(ParameterizedType parameterizedType,
    +            MirrorContext mirrorContext) {
    +<span class="fc" id="L182">        Class&lt;?&gt; rawClass = (Class&lt;?&gt;) parameterizedType.getRawType();</span>
    +<span class="fc" id="L183">        TypeElementImpl typeDeclaration = mirrorContext.typeDeclaration(rawClass);</span>
    +<span class="fc" id="L184">        @Nullable Type ownerType = parameterizedType.getOwnerType();</span>
    +<span class="fc bfc" id="L185" title="All 2 branches covered.">        ReflectionTypeMirror ownerTypeMirror = ownerType == null</span>
    +            ? NoTypeImpl.NONE
    +<span class="fc" id="L187">            : mirrorContext.mirror(ownerType);</span>
    +<span class="fc" id="L188">        return new DeclaredTypeImpl(ownerTypeMirror, typeDeclaration,</span>
    +<span class="fc" id="L189">            mirrorContext.mirror(parameterizedType.getActualTypeArguments()));</span>
    +    }
    +
    +    /**
    +     * Returns a type mirror for the given {@link WildcardType} object.
    +     *
    +     * &lt;p&gt;The following preconditions are guaranteed by the JLS and the JavaDoc of package {@link java.lang.reflect}:
    +     * &lt;ul&gt;&lt;li&gt;
    +     *     {@link WildcardType#getUpperBounds()} specifies: &quot;Note that if no upper bound is explicitly
    +     *     declared, the upper bound is {@code Object}.&quot;
    +     * &lt;/li&gt;&lt;li&gt;
    +     *     While {@link WildcardType#getUpperBounds()} and
    +     *     {@link WildcardType#getLowerBounds()} return an arrays, JLS §4.5.1 (at least up to
    +     *     version 8) only supports a single ReferenceType for both bounds.
    +     * &lt;/li&gt;&lt;/ul&gt;
    +     */
    +    private static WildcardTypeImpl mirrorWildcardType(WildcardType wildcardType, MirrorContext mirrorContext) {
    +<span class="fc" id="L206">        Type[] upperBounds = wildcardType.getUpperBounds();</span>
    +<span class="fc" id="L207">        Type[] lowerBounds = wildcardType.getLowerBounds();</span>
    +
    +        // See JavaDoc for an explanation of the following assert statement.
    +<span class="pc bpc" id="L210" title="3 of 8 branches missed.">        assert upperBounds.length == 1 &amp;&amp; lowerBounds.length &lt;= 1</span>
    +<span class="pc bpc" id="L211" title="1 of 2 branches missed.">            &amp;&amp; (lowerBounds.length == 0 || Object.class.equals(upperBounds[0]));</span>
    +
    +        @Nullable ReflectionTypeMirror extendsBounds;
    +<span class="fc bfc" id="L214" title="All 2 branches covered.">        if (Object.class.equals(upperBounds[0])) {</span>
    +<span class="fc" id="L215">            extendsBounds = null;</span>
    +        } else {
    +<span class="fc" id="L217">            extendsBounds = mirrorContext.mirror(upperBounds[0]);</span>
    +        }
    +
    +        @Nullable ReflectionTypeMirror superBound;
    +<span class="fc bfc" id="L221" title="All 2 branches covered.">        if (lowerBounds.length == 0) {</span>
    +<span class="fc" id="L222">            superBound = null;</span>
    +        } else {
    +<span class="fc" id="L224">            superBound = mirrorContext.mirror(lowerBounds[0]);</span>
    +        }
    +<span class="fc" id="L226">        return new WildcardTypeImpl(extendsBounds, superBound);</span>
    +    }
    +
    +    static void requireCondition(boolean condition, String formatString, Object argument) {
    +<span class="fc bfc" id="L230" title="All 2 branches covered.">        if (!condition) {</span>
    +<span class="fc" id="L231">            throw new IllegalStateException(String.format(formatString, argument));</span>
    +        }
    +<span class="fc" id="L233">    }</span>
    +
    +    private static TypeVariableImpl mirrorTypeVariable(TypeVariable&lt;?&gt; typeVariable, MirrorContext mirrorContext) {
    +<span class="fc" id="L236">        GenericDeclaration genericDeclaration = typeVariable.getGenericDeclaration();</span>
    +<span class="fc bfc" id="L237" title="All 2 branches covered.">        if (genericDeclaration instanceof Class&lt;?&gt;) {</span>
    +<span class="fc" id="L238">            TypeElementImpl typeDeclaration = mirrorContext.typeDeclaration((Class&lt;?&gt;) genericDeclaration);</span>
    +<span class="fc" id="L239">            @Nullable TypeParameterElementImpl element = null;</span>
    +<span class="pc bpc" id="L240" title="1 of 2 branches missed.">            for (TypeParameterElementImpl typeParameter: typeDeclaration.getTypeParameters()) {</span>
    +<span class="fc bfc" id="L241" title="All 2 branches covered.">                if (typeParameter.getSimpleName().contentEquals(typeVariable.getName())) {</span>
    +<span class="fc" id="L242">                    element = typeParameter;</span>
    +<span class="fc" id="L243">                    break;</span>
    +                }
    +<span class="fc" id="L245">            }</span>
    +<span class="pc bpc" id="L246" title="1 of 2 branches missed.">            requireCondition(element != null,</span>
    +                &quot;Could not find the type-parameter element that corresponds to type variable %s.&quot;, typeVariable);
    +<span class="pc bpc" id="L248" title="2 of 4 branches missed.">            assert element != null : &quot;redundant check for FindBugs&quot;;</span>
    +<span class="fc" id="L249">            return element.asType();</span>
    +        } else {
    +<span class="fc" id="L251">            throw new UnsupportedOperationException(&quot;Method or constructor type parameters not supported.&quot;);</span>
    +        }
    +    }
    +
    +    ReflectionTypeMirror mirrorInternal(Type type, MirrorContext mirrorContext) {
    +<span class="fc" id="L256">        @Nullable ReflectionTypeMirror typeMirror = null;</span>
    +<span class="fc bfc" id="L257" title="All 2 branches covered.">        if (type instanceof Class&lt;?&gt;) {</span>
    +<span class="fc" id="L258">            typeMirror = mirrorClass((Class&lt;?&gt;) type, mirrorContext);</span>
    +<span class="fc bfc" id="L259" title="All 2 branches covered.">        } else if (type instanceof ParameterizedType) {</span>
    +<span class="fc" id="L260">            typeMirror = mirrorParameterizedType((ParameterizedType) type, mirrorContext);</span>
    +<span class="fc bfc" id="L261" title="All 2 branches covered.">        } else if (type instanceof GenericArrayType) {</span>
    +<span class="fc" id="L262">            typeMirror = new ArrayTypeImpl(</span>
    +<span class="fc" id="L263">                mirrorContext.mirror(((GenericArrayType) type).getGenericComponentType())</span>
    +            );
    +<span class="fc bfc" id="L265" title="All 2 branches covered.">        } else if (type instanceof WildcardType) {</span>
    +<span class="fc" id="L266">            typeMirror = mirrorWildcardType((WildcardType) type, mirrorContext);</span>
    +<span class="pc bpc" id="L267" title="1 of 2 branches missed.">        } else if (type instanceof TypeVariable&lt;?&gt;) {</span>
    +<span class="fc" id="L268">            typeMirror = mirrorTypeVariable((TypeVariable&lt;?&gt;) type, mirrorContext);</span>
    +        }
    +<span class="pc bpc" id="L270" title="1 of 2 branches missed.">        requireCondition(typeMirror != null,</span>
    +            &quot;Expected Class, ParameterizedType, GenericArrayType, WildcardType, or TypeVariable instance, but got %s.&quot;,
    +            type);
    +<span class="pc bpc" id="L273" title="2 of 4 branches missed.">        assert typeMirror != null : &quot;redundant check for FindBugs&quot;;</span>
    +<span class="fc" id="L274">        return typeMirror;</span>
    +    }
    +
    +    /**
    +     * Returns a type element corresponding to the given {@link Class} object.
    +     *
    +     * @param clazz class object
    +     * @return type element corresponding to the given {@link Class} object
    +     * @throws IllegalArgumentException if the given class represents a primitive or array type
    +     * @throws UnsupportedOperationException if a generic declaration is referenced that is not of type {@link Class},
    +     *     see {@link #typeMirror(Type)} for details
    +     */
    +    public TypeElement typeElement(Class&lt;?&gt; clazz) {
    +<span class="fc bfc" id="L287" title="All 4 branches covered.">        if (clazz.isArray() || clazz.isPrimitive()) {</span>
    +<span class="fc" id="L288">            throw new IllegalArgumentException(String.format(&quot;Expected class or interface type, but got %s.&quot;, clazz));</span>
    +        }
    +
    +<span class="fc" id="L291">        return ((DeclaredTypeImpl) typeMirror(clazz)).asElement();</span>
    +    }
    +
    +    /**
    +     * Returns a type mirror corresponding to the given Java reflection type.
    +     *
    +     * &lt;p&gt;Type parameters in method declarations are not currently supported. That is, if the given type references a
    +     * {@link TypeVariable} instance that has a {@link java.lang.reflect.Constructor} or
    +     * {@link java.lang.reflect.Method} as generic declaration, an {@link UnsupportedOperationException}
    +     * will be thrown.
    +     *
    +     * @param type type as represented by Java Reflection API
    +     * @return type mirror corresponding to the given Java reflection type
    +     * @throws UnsupportedOperationException if a generic declaration is referenced that is not of type {@link Class}
    +     */
    +    @Override
    +    public TypeMirror typeMirror(Type type) {
    +<span class="fc" id="L308">        Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; typeDeclarations = new LinkedHashMap&lt;&gt;();</span>
    +<span class="fc" id="L309">        Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; newTypeDeclarations = new LinkedHashMap&lt;&gt;();</span>
    +<span class="fc" id="L310">        MirrorContext mirrorContext = new MirrorContext(this, typeDeclarations, newTypeDeclarations);</span>
    +
    +<span class="fc" id="L312">        TypeMirror typeMirror = mirrorInternal(type, mirrorContext);</span>
    +<span class="fc bfc" id="L313" title="All 2 branches covered.">        while (!newTypeDeclarations.isEmpty()) {</span>
    +<span class="fc" id="L314">            List&lt;TypeElementImpl&gt; typeDeclarationsToFinish = new ArrayList&lt;&gt;(newTypeDeclarations.values());</span>
    +<span class="fc" id="L315">            typeDeclarations.putAll(newTypeDeclarations);</span>
    +<span class="fc" id="L316">            newTypeDeclarations.clear();</span>
    +<span class="fc bfc" id="L317" title="All 2 branches covered.">            for (TypeElementImpl typeDeclaration: typeDeclarationsToFinish) {</span>
    +<span class="fc" id="L318">                typeDeclaration.finish(mirrorContext);</span>
    +<span class="fc" id="L319">            }</span>
    +<span class="fc" id="L320">        }</span>
    +<span class="fc" id="L321">        return typeMirror;</span>
    +    }
    +
    +    private static ImmutableList&lt;ReflectionTypeMirror&gt; toList(TypeMirror[] types) {
    +<span class="fc" id="L325">        List&lt;ReflectionTypeMirror&gt; list = new ArrayList&lt;&gt;(types.length);</span>
    +<span class="fc bfc" id="L326" title="All 2 branches covered.">        for (TypeMirror type: types) {</span>
    +<span class="fc" id="L327">            list.add((ReflectionTypeMirror) type);</span>
    +        }
    +<span class="fc" id="L329">        return ImmutableList.copyOf(list);</span>
    +    }
    +
    +    @Override
    +    public DeclaredType getDeclaredType(@Nullable DeclaredType containing, TypeElement typeElem,
    +            TypeMirror... typeArgs) {
    +<span class="fc" id="L335">        requireValidType(containing);</span>
    +<span class="fc" id="L336">        requireValidElement(typeElem);</span>
    +<span class="fc" id="L337">        requireValidTypes(typeArgs);</span>
    +
    +<span class="fc bfc" id="L339" title="All 2 branches covered.">        ReflectionTypeMirror newContainingType = containing == null</span>
    +            ? NoTypeImpl.NONE
    +            : (ReflectionTypeMirror) containing;
    +<span class="fc" id="L342">        return new DeclaredTypeImpl(newContainingType, (TypeElementImpl) typeElem, toList(typeArgs));</span>
    +    }
    +
    +    @Override
    +    public DeclaredType getDeclaredType(TypeElement typeElem, TypeMirror... typeArgs) {
    +<span class="fc" id="L347">        requireValidElement(typeElem);</span>
    +<span class="fc" id="L348">        requireValidTypes(typeArgs);</span>
    +
    +<span class="fc" id="L350">        return new DeclaredTypeImpl(NoTypeImpl.NONE, (TypeElementImpl) typeElem, toList(typeArgs));</span>
    +    }
    +
    +    @Override
    +    public NoType getNoType(TypeKind kind) {
    +<span class="fc" id="L355">        Objects.requireNonNull(kind);</span>
    +<span class="fc bfc" id="L356" title="All 2 branches covered.">        if (kind == TypeKind.VOID) {</span>
    +<span class="fc" id="L357">            return NoTypeImpl.VOID;</span>
    +<span class="fc bfc" id="L358" title="All 2 branches covered.">        } else if (kind == TypeKind.NONE) {</span>
    +<span class="fc" id="L359">            return NoTypeImpl.NONE;</span>
    +        } else {
    +<span class="fc" id="L361">            throw new IllegalArgumentException(String.format(&quot;Expected one of %s, but got %s.&quot;,</span>
    +<span class="fc" id="L362">                Arrays.asList(TypeKind.VOID, TypeKind.NONE), kind));</span>
    +        }
    +    }
    +
    +    @Override
    +    public NullType getNullType() {
    +<span class="fc" id="L368">        return NullTypeImpl.INSTANCE;</span>
    +    }
    +
    +    @Override
    +    public ArrayType getArrayType(TypeMirror componentType) {
    +<span class="fc" id="L373">        Objects.requireNonNull(componentType);</span>
    +<span class="fc" id="L374">        requireValidType(componentType);</span>
    +
    +<span class="fc" id="L376">        return new ArrayTypeImpl((ReflectionTypeMirror) componentType);</span>
    +    }
    +
    +    @Override
    +    protected javax.lang.model.type.TypeVariable createTypeVariable(TypeParameterElement typeParameter,
    +            @Nullable javax.lang.model.type.WildcardType capturedTypeArgument) {
    +<span class="fc" id="L382">        requireValidElement(Objects.requireNonNull(typeParameter));</span>
    +<span class="fc" id="L383">        requireValidType(capturedTypeArgument);</span>
    +
    +<span class="fc" id="L385">        return new TypeVariableImpl((TypeParameterElementImpl) typeParameter, (WildcardTypeImpl) capturedTypeArgument);</span>
    +    }
    +
    +    @Override
    +    protected javax.lang.model.type.WildcardType capturedTypeArgument(javax.lang.model.type.TypeVariable typeVariable) {
    +<span class="fc" id="L390">        requireValidType(Objects.requireNonNull(typeVariable));</span>
    +
    +<span class="fc" id="L392">        return ((TypeVariableImpl) typeVariable).getCapturedTypeArgument();</span>
    +    }
    +
    +    @Override
    +    public IntersectionType getIntersectionType(TypeMirror... bounds) {
    +<span class="fc" id="L397">        Objects.requireNonNull(bounds);</span>
    +<span class="fc bfc" id="L398" title="All 2 branches covered.">        if (bounds.length == 0) {</span>
    +<span class="fc" id="L399">            throw new IllegalArgumentException(&quot;Expected at least one bound.&quot;);</span>
    +        }
    +<span class="fc" id="L401">        requireValidTypes(bounds);</span>
    +
    +<span class="fc" id="L403">        List&lt;ReflectionTypeMirror&gt; newBounds = new ArrayList&lt;&gt;(bounds.length);</span>
    +<span class="fc bfc" id="L404" title="All 2 branches covered.">        for (TypeMirror bound: bounds) {</span>
    +<span class="fc" id="L405">            newBounds.add((ReflectionTypeMirror) bound);</span>
    +        }
    +
    +<span class="fc" id="L408">        return new IntersectionTypeImpl(newBounds);</span>
    +    }
    +
    +    @Override
    +    protected void setTypeVariableBounds(javax.lang.model.type.TypeVariable typeVariable, TypeMirror upperBound,
    +            TypeMirror lowerBound) {
    +<span class="fc" id="L414">        requireValidType(Objects.requireNonNull(typeVariable));</span>
    +<span class="fc" id="L415">        requireValidType(Objects.requireNonNull(upperBound));</span>
    +<span class="fc" id="L416">        requireValidType(Objects.requireNonNull(lowerBound));</span>
    +
    +<span class="fc" id="L418">        ((TypeVariableImpl) typeVariable).setUpperAndLowerBounds(</span>
    +            (ReflectionTypeMirror) upperBound,
    +            (ReflectionTypeMirror) lowerBound
    +        );
    +<span class="fc" id="L422">    }</span>
    +
    +    @Override
    +    public PrimitiveType getPrimitiveType(TypeKind kind) {
    +<span class="fc" id="L426">        @Nullable PrimitiveTypeImpl primitiveType = primitiveTypes.get(kind.ordinal());</span>
    +<span class="fc bfc" id="L427" title="All 2 branches covered.">        if (primitiveType == null) {</span>
    +<span class="fc" id="L428">            throw new IllegalArgumentException(String.format(&quot;Expected primitive kind, but got %s.&quot;, kind));</span>
    +        }
    +<span class="fc" id="L430">        return primitiveType;</span>
    +    }
    +
    +    @Override
    +    public javax.lang.model.type.WildcardType getWildcardType(@Nullable TypeMirror extendsBound,
    +            @Nullable TypeMirror superBound) {
    +<span class="fc" id="L436">        requireValidType(extendsBound);</span>
    +<span class="fc" id="L437">        requireValidType(superBound);</span>
    +
    +<span class="fc" id="L439">        return new WildcardTypeImpl((ReflectionTypeMirror) extendsBound, (ReflectionTypeMirror) superBound);</span>
    +    }
    +
    +    private static UnsupportedOperationException unsupportedException() {
    +<span class="fc" id="L443">        return new UnsupportedOperationException(</span>
    +            &quot;isAssignable(), isSubsignature(), asMemberOf(), and directSupertypes() not currently supported.&quot;
    +        );
    +    }
    +
    +    @Override
    +    public boolean isAssignable(TypeMirror t1, TypeMirror t2) {
    +<span class="fc" id="L450">        throw unsupportedException();</span>
    +    }
    +
    +    @Override
    +    public boolean isSubsignature(ExecutableType m1, ExecutableType m2) {
    +<span class="nc" id="L455">        throw unsupportedException();</span>
    +    }
    +
    +    @Override
    +    public TypeMirror asMemberOf(DeclaredType containing, Element element) {
    +<span class="fc" id="L460">        throw unsupportedException();</span>
    +    }
    +
    +    /**
    +     * @throws UnsupportedOperationException whenever this method is called
    +     */
    +    @Override
    +    public List&lt;? extends TypeMirror&gt; directSupertypes(TypeMirror t) {
    +<span class="fc" id="L468">        throw unsupportedException();</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/TypeElementImpl.html b/jacoco/net.florianschoppmann.java.reflect/TypeElementImpl.html
    new file mode 100644
    index 0000000..64a0c91
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/TypeElementImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>TypeElementImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">TypeElementImpl</span></div><h1>TypeElementImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">17 of 336</td><td class="ctr2">95%</td><td class="bar">7 of 44</td><td class="ctr2">84%</td><td class="ctr1">7</td><td class="ctr2">39</td><td class="ctr1">0</td><td class="ctr2">69</td><td class="ctr1">0</td><td class="ctr2">17</td></tr></tfoot><tbody><tr><td id="a4"><a href="TypeElementImpl.java.html#L73" class="el_method">getEnclosedElements()</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="6" height="10" title="5" alt="5"/><img src="../.resources/greenbar.gif" width="12" height="10" title="10" alt="10"/></td><td class="ctr2" id="c14">67%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">50%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a11"><a href="TypeElementImpl.java.html#L97" class="el_method">getSuperclass()</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="6" height="10" title="5" alt="5"/><img src="../.resources/greenbar.gif" width="12" height="10" title="10" alt="10"/></td><td class="ctr2" id="c15">67%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">50%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g5">3</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i7">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a6"><a href="TypeElementImpl.java.html#L104" class="el_method">getInterfaces()</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="6" height="10" title="5" alt="5"/><img src="../.resources/greenbar.gif" width="12" height="10" title="10" alt="10"/></td><td class="ctr2" id="c16">67%</td><td class="bar" id="d2"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e8">50%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i8">3</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a14"><a href="TypeElementImpl.java.html#L16" class="el_method">static {...}</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="7" height="10" title="6" alt="6"/></td><td class="ctr2" id="c13">75%</td><td class="bar" id="d3"><img src="../.resources/redbar.gif" width="15" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="15" height="10" title="1" alt="1"/></td><td class="ctr2" id="e9">50%</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="TypeElementImpl.java.html#L160" class="el_method">finishDerivedFromElement(MirrorContext)</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="120" height="10" title="94" alt="94"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d4"><img src="../.resources/greenbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="TypeElementImpl.java.html#L127" class="el_method">asType()</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="66" height="10" title="52" alt="52"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d5"><img src="../.resources/greenbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i1">12</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a16"><a href="TypeElementImpl.java.html#L35" class="el_method">TypeElementImpl(Class)</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="52" height="10" title="41" alt="41"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d8"><img src="../.resources/greenbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g8">2</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a2"><a href="TypeElementImpl.java.html#L47" class="el_method">equals(Object)</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="26" height="10" title="21" alt="21"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d6"><img src="../.resources/greenbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="e3">100%</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i4">5</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a7"><a href="TypeElementImpl.java.html#L147" class="el_method">getKind()</a></td><td class="bar" id="b8"><img src="../.resources/greenbar.gif" width="25" height="10" title="20" alt="20"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d7"><img src="../.resources/greenbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">100%</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i3">7</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a5"><a href="TypeElementImpl.java.html#L116" class="el_method">getEnclosingElement()</a></td><td class="bar" id="b9"><img src="../.resources/greenbar.gif" width="16" height="10" title="13" alt="13"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d9"><img src="../.resources/greenbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">100%</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i5">4</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a8"><a href="TypeElementImpl.java.html#L80" class="el_method">getNestingKind()</a></td><td class="bar" id="b10"><img src="../.resources/greenbar.gif" width="15" height="10" title="12" alt="12"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a9"><a href="TypeElementImpl.java.html#L87" class="el_method">getQualifiedName()</a></td><td class="bar" id="b11"><img src="../.resources/greenbar.gif" width="8" height="10" title="7" alt="7"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a10"><a href="TypeElementImpl.java.html#L92" class="el_method">getSimpleName()</a></td><td class="bar" id="b12"><img src="../.resources/greenbar.gif" width="8" height="10" title="7" alt="7"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a0"><a href="TypeElementImpl.java.html#L68" class="el_method">accept(ElementVisitor, Object)</a></td><td class="bar" id="b13"><img src="../.resources/greenbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a13"><a href="TypeElementImpl.java.html#L58" class="el_method">hashCode()</a></td><td class="bar" id="b14"><img src="../.resources/greenbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">100%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a15"><a href="TypeElementImpl.java.html#L63" class="el_method">toString()</a></td><td class="bar" id="b15"><img src="../.resources/greenbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c11">100%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a12"><a href="TypeElementImpl.java.html#L111" class="el_method">getTypeParameters()</a></td><td class="bar" id="b16"><img src="../.resources/greenbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">100%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">0</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">0</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k16">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/TypeElementImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/TypeElementImpl.java.html
    new file mode 100644
    index 0000000..7f456d8
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/TypeElementImpl.java.html
    @@ -0,0 +1,186 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>TypeElementImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">TypeElementImpl.java</span></div><h1>TypeElementImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.element.ElementKind;
    +import javax.lang.model.element.ElementVisitor;
    +import javax.lang.model.element.Name;
    +import javax.lang.model.element.NestingKind;
    +import javax.lang.model.element.TypeElement;
    +import javax.lang.model.type.TypeMirror;
    +import java.lang.reflect.Type;
    +import java.lang.reflect.TypeVariable;
    +import java.util.ArrayList;
    +import java.util.List;
    +import java.util.Objects;
    +
    +<span class="pc bpc" id="L16" title="1 of 2 branches missed.">final class TypeElementImpl extends ElementImpl implements TypeElement, ReflectionParameterizable {</span>
    +    private final Class&lt;?&gt; clazz;
    +    private final ImmutableList&lt;TypeParameterElementImpl&gt; typeParameters;
    +    @Nullable private ReflectionElement enclosingElement;
    +    @Nullable private ReflectionTypeMirror superClass;
    +    @Nullable private List&lt;ReflectionTypeMirror&gt; interfaces;
    +    @Nullable private List&lt;ElementImpl&gt; enclosedElements;
    +
    +    /**
    +     * Cache the type returned by {@link #asType()}.
    +     *
    +     * &lt;p&gt;Similarly to {@link String#hashCode()}, caching is not synchronized. This means that different threads may
    +     * (at least theoretically) see different values for this field. However, this is not a problem because all such
    +     * values would compare equal. Moreover, §17.7 JLS specifies that &quot;Writes to and reads of references are always
    +     * atomic, regardless of whether they are implemented as 32-bit or 64-bit values&quot;. Hence, even if caches were
    +     * updated, every access to this field would yield a well-defined result.
    +     */
    +    @Nullable private DeclaredTypeImpl type;
    +
    +<span class="fc" id="L35">    TypeElementImpl(Class&lt;?&gt; clazz) {</span>
    +<span class="fc" id="L36">        this.clazz = Objects.requireNonNull(clazz);</span>
    +
    +<span class="fc" id="L38">        List&lt;TypeParameterElementImpl&gt; newTypeParameters = new ArrayList&lt;&gt;();</span>
    +<span class="fc bfc" id="L39" title="All 2 branches covered.">        for (TypeVariable&lt;?&gt; parameter: clazz.getTypeParameters()) {</span>
    +<span class="fc" id="L40">            newTypeParameters.add(new TypeParameterElementImpl(parameter, this));</span>
    +        }
    +<span class="fc" id="L42">        typeParameters = ImmutableList.copyOf(newTypeParameters);</span>
    +<span class="fc" id="L43">    }</span>
    +
    +    @Override
    +    public boolean equals(@Nullable Object otherObject) {
    +<span class="fc bfc" id="L47" title="All 2 branches covered.">        if (this == otherObject) {</span>
    +<span class="fc" id="L48">            return true;</span>
    +<span class="fc bfc" id="L49" title="All 4 branches covered.">        } else if (otherObject == null || getClass() != otherObject.getClass()) {</span>
    +<span class="fc" id="L50">            return false;</span>
    +        }
    +
    +<span class="fc" id="L53">        return clazz.equals(((TypeElementImpl) otherObject).clazz);</span>
    +    }
    +
    +    @Override
    +    public int hashCode() {
    +<span class="fc" id="L58">        return clazz.hashCode();</span>
    +    }
    +
    +    @Override
    +    public String toString() {
    +<span class="fc" id="L63">        return clazz.toString();</span>
    +    }
    +
    +    @Override
    +    public &lt;R, P&gt; R accept(ElementVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<span class="fc" id="L68">        return visitor.visitType(this, parameter);</span>
    +    }
    +
    +    @Override
    +    public List&lt;ElementImpl&gt; getEnclosedElements() {
    +<span class="fc" id="L73">        requireFinished();</span>
    +<span class="pc bpc" id="L74" title="2 of 4 branches missed.">        assert enclosedElements != null : &quot;must be non-null when finished&quot;;</span>
    +<span class="fc" id="L75">        return enclosedElements;</span>
    +    }
    +
    +    @Override
    +    public NestingKind getNestingKind() {
    +<span class="fc" id="L80">        throw new UnsupportedOperationException(String.format(</span>
    +            &quot;Nesting kind not currently supported by %s.&quot;, ReflectionTypes.class
    +        ));
    +    }
    +
    +    @Override
    +    public NameImpl getQualifiedName() {
    +<span class="fc" id="L87">        return new NameImpl(clazz.getCanonicalName());</span>
    +    }
    +
    +    @Override
    +    public Name getSimpleName() {
    +<span class="fc" id="L92">        return new NameImpl(clazz.getSimpleName());</span>
    +    }
    +
    +    @Override
    +    public TypeMirror getSuperclass() {
    +<span class="fc" id="L97">        requireFinished();</span>
    +<span class="pc bpc" id="L98" title="2 of 4 branches missed.">        assert superClass != null : &quot;must be non-null when finished&quot;;</span>
    +<span class="fc" id="L99">        return superClass;</span>
    +    }
    +
    +    @Override
    +    public List&lt;? extends TypeMirror&gt; getInterfaces() {
    +<span class="fc" id="L104">        requireFinished();</span>
    +<span class="pc bpc" id="L105" title="2 of 4 branches missed.">        assert interfaces != null : &quot;must be non-null when finished&quot;;</span>
    +<span class="fc" id="L106">        return interfaces;</span>
    +    }
    +
    +    @Override
    +    public List&lt;TypeParameterElementImpl&gt; getTypeParameters() {
    +<span class="fc" id="L111">        return typeParameters;</span>
    +    }
    +
    +    @Override
    +    public ReflectionElement getEnclosingElement() {
    +<span class="fc" id="L116">        requireFinished();</span>
    +
    +<span class="fc bfc" id="L118" title="All 2 branches covered.">        if (enclosingElement == null) {</span>
    +<span class="fc" id="L119">            throw new UnsupportedOperationException(&quot;getEnclosingElement() not supported for top-level classes.&quot;);</span>
    +        } else {
    +<span class="fc" id="L121">            return enclosingElement;</span>
    +        }
    +    }
    +
    +    @Override
    +    public DeclaredTypeImpl asType() {
    +<span class="fc" id="L127">        requireFinished();</span>
    +
    +<span class="fc" id="L129">        @Nullable DeclaredTypeImpl localType = type;</span>
    +<span class="fc bfc" id="L130" title="All 2 branches covered.">        if (localType == null) {</span>
    +<span class="fc" id="L131">            List&lt;TypeVariableImpl&gt; prototypicalTypeArguments = new ArrayList&lt;&gt;(typeParameters.size());</span>
    +<span class="fc bfc" id="L132" title="All 2 branches covered.">            for (TypeParameterElementImpl typeParameter: typeParameters) {</span>
    +<span class="fc" id="L133">                prototypicalTypeArguments.add(typeParameter.asType());</span>
    +<span class="fc" id="L134">            }</span>
    +
    +<span class="fc bfc" id="L136" title="All 2 branches covered.">            ReflectionTypeMirror enclosingType = enclosingElement == null</span>
    +                ? NoTypeImpl.NONE
    +<span class="fc" id="L138">                : enclosingElement.asType();</span>
    +<span class="fc" id="L139">            localType = new DeclaredTypeImpl(enclosingType, this, prototypicalTypeArguments);</span>
    +<span class="fc" id="L140">            type = localType;</span>
    +        }
    +<span class="fc" id="L142">        return localType;</span>
    +    }
    +
    +    @Override
    +    public ElementKind getKind() {
    +<span class="fc bfc" id="L147" title="All 2 branches covered.">        if (clazz.isEnum()) {</span>
    +<span class="fc" id="L148">            return ElementKind.ENUM;</span>
    +<span class="fc bfc" id="L149" title="All 2 branches covered.">        } else if (clazz.isAnnotation()) {</span>
    +<span class="fc" id="L150">            return ElementKind.ANNOTATION_TYPE;</span>
    +<span class="fc bfc" id="L151" title="All 2 branches covered.">        } else if (clazz.isInterface()) {</span>
    +<span class="fc" id="L152">            return ElementKind.INTERFACE;</span>
    +        } else {
    +<span class="fc" id="L154">            return ElementKind.CLASS;</span>
    +        }
    +    }
    +
    +    @Override
    +    protected void finishDerivedFromElement(MirrorContext mirrorContext) {
    +<span class="fc" id="L160">        @Nullable Class&lt;?&gt; enclosingClass = clazz.getEnclosingClass();</span>
    +<span class="fc bfc" id="L161" title="All 2 branches covered.">        enclosingElement = enclosingClass == null</span>
    +            ? null
    +<span class="fc" id="L163">            : mirrorContext.typeDeclaration(enclosingClass);</span>
    +
    +<span class="fc" id="L165">        Class&lt;?&gt;[] declaredClasses = clazz.getDeclaredClasses();</span>
    +<span class="fc" id="L166">        List&lt;ElementImpl&gt; newEnclosedElements = new ArrayList&lt;&gt;(typeParameters.size() + declaredClasses.length);</span>
    +<span class="fc" id="L167">        newEnclosedElements.addAll(typeParameters);</span>
    +<span class="fc bfc" id="L168" title="All 2 branches covered.">        for (Class&lt;?&gt; declaredClass: declaredClasses) {</span>
    +<span class="fc" id="L169">            newEnclosedElements.add(mirrorContext.typeDeclaration(declaredClass));</span>
    +        }
    +<span class="fc" id="L171">        enclosedElements = ImmutableList.copyOf(newEnclosedElements);</span>
    +
    +<span class="fc" id="L173">        @Nullable Type genericSuperClass = clazz.getGenericSuperclass();</span>
    +<span class="fc bfc" id="L174" title="All 2 branches covered.">        superClass = genericSuperClass == null</span>
    +            ? NoTypeImpl.NONE
    +<span class="fc" id="L176">            : mirrorContext.mirror(genericSuperClass);</span>
    +<span class="fc" id="L177">        interfaces = mirrorContext.mirror(clazz.getGenericInterfaces());</span>
    +<span class="fc bfc" id="L178" title="All 2 branches covered.">        for (TypeParameterElementImpl typeParameter: typeParameters) {</span>
    +<span class="fc" id="L179">            typeParameter.finish(mirrorContext);</span>
    +<span class="fc" id="L180">        }</span>
    +
    +        // Field 'type' is lazily initialized in order to break a dependency chain: Constructing type requires
    +        // enclosingElement.asType(), which at this point may not yet be available.
    +<span class="fc" id="L184">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/TypeParameterElementImpl.html b/jacoco/net.florianschoppmann.java.reflect/TypeParameterElementImpl.html
    new file mode 100644
    index 0000000..b02b8fd
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/TypeParameterElementImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>TypeParameterElementImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">TypeParameterElementImpl</span></div><h1>TypeParameterElementImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 127</td><td class="ctr2">94%</td><td class="bar">3 of 14</td><td class="ctr2">79%</td><td class="ctr1">3</td><td class="ctr2">21</td><td class="ctr1">0</td><td class="ctr2">28</td><td class="ctr1">0</td><td class="ctr2">14</td></tr></tfoot><tbody><tr><td id="a4"><a href="TypeParameterElementImpl.java.html#L57" class="el_method">getBounds()</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="20" height="10" title="5" alt="5"/><img src="../.resources/greenbar.gif" width="40" height="10" title="10" alt="10"/></td><td class="ctr2" id="c13">67%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">50%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a11"><a href="TypeParameterElementImpl.java.html#L12" class="el_method">static {...}</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="8" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="24" height="10" title="6" alt="6"/></td><td class="ctr2" id="c12">75%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="20" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="20" height="10" title="1" alt="1"/></td><td class="ctr2" id="e3">50%</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="TypeParameterElementImpl.java.html#L89" class="el_method">finishDerivedFromElement(MirrorContext)</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="120" height="10" title="30" alt="30"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d3"><img src="../.resources/greenbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="TypeParameterElementImpl.java.html#L26" class="el_method">equals(Object)</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="84" height="10" title="21" alt="21"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"><img src="../.resources/greenbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a13"><a href="TypeParameterElementImpl.java.html#L18" class="el_method">TypeParameterElementImpl(TypeVariable, ElementImpl)</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="80" height="10" title="20" alt="20"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i2">5</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a9"><a href="TypeParameterElementImpl.java.html#L79" class="el_method">getSimpleName()</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="28" height="10" title="7" alt="7"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="TypeParameterElementImpl.java.html#L47" class="el_method">accept(ElementVisitor, Object)</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="20" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a10"><a href="TypeParameterElementImpl.java.html#L37" class="el_method">hashCode()</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="16" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a12"><a href="TypeParameterElementImpl.java.html#L42" class="el_method">toString()</a></td><td class="bar" id="b8"><img src="../.resources/greenbar.gif" width="16" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a7"><a href="TypeParameterElementImpl.java.html#L52" class="el_method">getGenericElement()</a></td><td class="bar" id="b9"><img src="../.resources/greenbar.gif" width="12" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a6"><a href="TypeParameterElementImpl.java.html#L64" class="el_method">getEnclosingElement()</a></td><td class="bar" id="b10"><img src="../.resources/greenbar.gif" width="12" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a1"><a href="TypeParameterElementImpl.java.html#L69" class="el_method">asType()</a></td><td class="bar" id="b11"><img src="../.resources/greenbar.gif" width="12" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a8"><a href="TypeParameterElementImpl.java.html#L74" class="el_method">getKind()</a></td><td class="bar" id="b12"><img src="../.resources/greenbar.gif" width="8" height="10" title="2" alt="2"/></td><td class="ctr2" id="c10">100%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a5"><a href="TypeParameterElementImpl.java.html#L84" class="el_method">getEnclosedElements()</a></td><td class="bar" id="b13"><img src="../.resources/greenbar.gif" width="8" height="10" title="2" alt="2"/></td><td class="ctr2" id="c11">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/TypeParameterElementImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/TypeParameterElementImpl.java.html
    new file mode 100644
    index 0000000..714f14a
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/TypeParameterElementImpl.java.html
    @@ -0,0 +1,96 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>TypeParameterElementImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">TypeParameterElementImpl.java</span></div><h1>TypeParameterElementImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.element.ElementKind;
    +import javax.lang.model.element.ElementVisitor;
    +import javax.lang.model.element.Name;
    +import javax.lang.model.element.TypeParameterElement;
    +import java.lang.reflect.TypeVariable;
    +import java.util.List;
    +import java.util.Objects;
    +
    +<span class="pc bpc" id="L12" title="1 of 2 branches missed.">final class TypeParameterElementImpl extends ElementImpl implements TypeParameterElement {</span>
    +    private final TypeVariable&lt;?&gt; reflectionTypeVariable;
    +    private final ElementImpl genericElement;
    +    private final TypeVariableImpl typeVariable;
    +    @Nullable private List&lt;ReflectionTypeMirror&gt; bounds;
    +
    +<span class="fc" id="L18">    TypeParameterElementImpl(TypeVariable&lt;?&gt; reflectionTypeVariable, ElementImpl genericElement) {</span>
    +<span class="fc" id="L19">        this.reflectionTypeVariable = Objects.requireNonNull(reflectionTypeVariable);</span>
    +<span class="fc" id="L20">        this.genericElement = Objects.requireNonNull(genericElement);</span>
    +<span class="fc" id="L21">        typeVariable = new TypeVariableImpl(this, null);</span>
    +<span class="fc" id="L22">    }</span>
    +
    +    @Override
    +    public boolean equals(@Nullable Object otherObject) {
    +<span class="fc bfc" id="L26" title="All 2 branches covered.">        if (this == otherObject) {</span>
    +<span class="fc" id="L27">            return true;</span>
    +<span class="fc bfc" id="L28" title="All 4 branches covered.">        } else if (otherObject == null || getClass() != otherObject.getClass()) {</span>
    +<span class="fc" id="L29">            return false;</span>
    +        }
    +
    +<span class="fc" id="L32">        return reflectionTypeVariable.equals(((TypeParameterElementImpl) otherObject).reflectionTypeVariable);</span>
    +    }
    +
    +    @Override
    +    public int hashCode() {
    +<span class="fc" id="L37">        return reflectionTypeVariable.hashCode();</span>
    +    }
    +
    +    @Override
    +    public String toString() {
    +<span class="fc" id="L42">        return reflectionTypeVariable.toString();</span>
    +    }
    +
    +    @Override
    +    public &lt;R, P&gt; R accept(ElementVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<span class="fc" id="L47">        return visitor.visitTypeParameter(this, parameter);</span>
    +    }
    +
    +    @Override
    +    public ElementImpl getGenericElement() {
    +<span class="fc" id="L52">        return genericElement;</span>
    +    }
    +
    +    @Override
    +    public List&lt;ReflectionTypeMirror&gt; getBounds() {
    +<span class="fc" id="L57">        requireFinished();</span>
    +<span class="pc bpc" id="L58" title="2 of 4 branches missed.">        assert bounds != null : &quot;must be non-null when finished&quot;;</span>
    +<span class="fc" id="L59">        return bounds;</span>
    +    }
    +
    +    @Override
    +    public ElementImpl getEnclosingElement() {
    +<span class="fc" id="L64">        return genericElement;</span>
    +    }
    +
    +    @Override
    +    public TypeVariableImpl asType() {
    +<span class="fc" id="L69">        return typeVariable;</span>
    +    }
    +
    +    @Override
    +    public ElementKind getKind() {
    +<span class="fc" id="L74">        return ElementKind.TYPE_PARAMETER;</span>
    +    }
    +
    +    @Override
    +    public Name getSimpleName() {
    +<span class="fc" id="L79">        return new NameImpl(reflectionTypeVariable.getName());</span>
    +    }
    +
    +    @Override
    +    public ImmutableList&lt;? extends ReflectionElement&gt; getEnclosedElements() {
    +<span class="fc" id="L84">        return ImmutableList.emptyList();</span>
    +    }
    +
    +    @Override
    +    void finishDerivedFromElement(MirrorContext mirrorContext) {
    +<span class="fc" id="L89">        bounds = mirrorContext.mirror(reflectionTypeVariable.getBounds());</span>
    +<span class="fc bfc" id="L90" title="All 2 branches covered.">        ReflectionTypeMirror bound = bounds.size() == 1</span>
    +<span class="fc" id="L91">            ? bounds.get(0)</span>
    +            : new IntersectionTypeImpl(bounds);
    +<span class="fc" id="L93">        typeVariable.setUpperAndLowerBounds(bound, NullTypeImpl.INSTANCE);</span>
    +<span class="fc" id="L94">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/TypeVariableImpl.html b/jacoco/net.florianschoppmann.java.reflect/TypeVariableImpl.html
    new file mode 100644
    index 0000000..9564f60
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/TypeVariableImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>TypeVariableImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">TypeVariableImpl</span></div><h1>TypeVariableImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">18 of 208</td><td class="ctr2">91%</td><td class="bar">12 of 34</td><td class="ctr2">65%</td><td class="ctr1">12</td><td class="ctr2">31</td><td class="ctr1">0</td><td class="ctr2">46</td><td class="ctr1">0</td><td class="ctr2">14</td></tr></tfoot><tbody><tr><td id="a2"><a href="TypeVariableImpl.java.html#L26" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="12" height="10" title="6" alt="6"/><img src="../.resources/greenbar.gif" width="108" height="10" title="54" alt="54"/></td><td class="ctr2" id="c10">90%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="42" height="10" title="7" alt="7"/><img src="../.resources/greenbar.gif" width="78" height="10" title="13" alt="13"/></td><td class="ctr2" id="e2">65%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">11</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">11</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="TypeVariableImpl.java.html#L82" class="el_method">getUpperBound()</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="10" height="10" title="5" alt="5"/><img src="../.resources/greenbar.gif" width="20" height="10" title="10" alt="10"/></td><td class="ctr2" id="c12">67%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">50%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a5"><a href="TypeVariableImpl.java.html#L89" class="el_method">getLowerBound()</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="10" height="10" title="5" alt="5"/><img src="../.resources/greenbar.gif" width="20" height="10" title="10" alt="10"/></td><td class="ctr2" id="c13">67%</td><td class="bar" id="d2"><img src="../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">50%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a11"><a href="TypeVariableImpl.java.html#L9" class="el_method">static {...}</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="4" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="12" height="10" title="6" alt="6"/></td><td class="ctr2" id="c11">75%</td><td class="bar" id="d3"><img src="../.resources/redbar.gif" width="6" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="6" height="10" title="1" alt="1"/></td><td class="ctr2" id="e5">50%</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="TypeVariableImpl.java.html#L44" class="el_method">hashCode()</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="52" height="10" title="26" alt="26"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a10"><a href="TypeVariableImpl.java.html#L95" class="el_method">setUpperAndLowerBounds(ReflectionTypeMirror, ReflectionTypeMirror)</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="36" height="10" title="18" alt="18"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a9"><a href="TypeVariableImpl.java.html#L60" class="el_method">requireUnfrozen()</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="34" height="10" title="17" alt="17"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d4"><img src="../.resources/greenbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a8"><a href="TypeVariableImpl.java.html#L68" class="el_method">requireFrozen()</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="34" height="10" title="17" alt="17"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d5"><img src="../.resources/greenbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i4">4</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a13"><a href="TypeVariableImpl.java.html#L10" class="el_method">TypeVariableImpl(TypeParameterElementImpl, WildcardTypeImpl)</a></td><td class="bar" id="b8"><img src="../.resources/greenbar.gif" width="30" height="10" title="15" alt="15"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i2">6</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a0"><a href="TypeVariableImpl.java.html#L51" class="el_method">accept(TypeVisitor, Object)</a></td><td class="bar" id="b9"><img src="../.resources/greenbar.gif" width="10" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a12"><a href="TypeVariableImpl.java.html#L56" class="el_method">toString()</a></td><td class="bar" id="b10"><img src="../.resources/greenbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a1"><a href="TypeVariableImpl.java.html#L77" class="el_method">asElement()</a></td><td class="bar" id="b11"><img src="../.resources/greenbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a3"><a href="TypeVariableImpl.java.html#L111" class="el_method">getCapturedTypeArgument()</a></td><td class="bar" id="b12"><img src="../.resources/greenbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a4"><a href="TypeVariableImpl.java.html#L106" class="el_method">getKind()</a></td><td class="bar" id="b13"><img src="../.resources/greenbar.gif" width="4" height="10" title="2" alt="2"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/TypeVariableImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/TypeVariableImpl.java.html
    new file mode 100644
    index 0000000..0cfbb77
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/TypeVariableImpl.java.html
    @@ -0,0 +1,114 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>TypeVariableImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">TypeVariableImpl.java</span></div><h1>TypeVariableImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.type.TypeKind;
    +import javax.lang.model.type.TypeVariable;
    +import javax.lang.model.type.TypeVisitor;
    +import java.util.Objects;
    +
    +<span class="pc bpc" id="L9" title="1 of 2 branches missed.">final class TypeVariableImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, TypeVariable {</span>
    +<span class="fc" id="L10">    private boolean frozen = false;</span>
    +
    +    private final TypeParameterElementImpl typeParameterElement;
    +    @Nullable private final WildcardTypeImpl capturedTypeArgument;
    +    @Nullable private ReflectionTypeMirror upperBound;
    +    @Nullable private ReflectionTypeMirror lowerBound;
    +
    +<span class="fc" id="L17">    TypeVariableImpl(TypeParameterElementImpl typeParameterElement, @Nullable WildcardTypeImpl capturedTypeArgument) {</span>
    +<span class="fc" id="L18">        Objects.requireNonNull(typeParameterElement);</span>
    +
    +<span class="fc" id="L20">        this.typeParameterElement = typeParameterElement;</span>
    +<span class="fc" id="L21">        this.capturedTypeArgument = capturedTypeArgument;</span>
    +<span class="fc" id="L22">    }</span>
    +
    +    @Override
    +    public boolean equals(@Nullable Object otherObject) {
    +<span class="fc bfc" id="L26" title="All 2 branches covered.">        if (this == otherObject) {</span>
    +<span class="fc" id="L27">            return true;</span>
    +<span class="fc bfc" id="L28" title="All 4 branches covered.">        } else if (otherObject == null || getClass() != otherObject.getClass()) {</span>
    +<span class="fc" id="L29">            return false;</span>
    +        }
    +
    +<span class="fc" id="L32">        requireFrozen();</span>
    +<span class="pc bpc" id="L33" title="3 of 6 branches missed.">        assert upperBound != null &amp;&amp; lowerBound != null : &quot;must be non-null when frozen&quot;;</span>
    +
    +<span class="fc" id="L35">        TypeVariableImpl other = (TypeVariableImpl) otherObject;</span>
    +<span class="pc bpc" id="L36" title="1 of 2 branches missed.">        return typeParameterElement.equals(other.typeParameterElement)</span>
    +<span class="pc bpc" id="L37" title="1 of 2 branches missed.">            &amp;&amp; Objects.equals(capturedTypeArgument, other.capturedTypeArgument)</span>
    +<span class="pc bpc" id="L38" title="1 of 2 branches missed.">            &amp;&amp; upperBound.equals(other.upperBound)</span>
    +<span class="pc bpc" id="L39" title="1 of 2 branches missed.">            &amp;&amp; lowerBound.equals(other.lowerBound);</span>
    +    }
    +
    +    @Override
    +    public int hashCode() {
    +<span class="fc" id="L44">        requireFrozen();</span>
    +
    +<span class="fc" id="L46">        return Objects.hash(typeParameterElement, capturedTypeArgument, upperBound, lowerBound);</span>
    +    }
    +
    +    @Override
    +    public &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<span class="fc" id="L51">        return visitor.visitTypeVariable(this, parameter);</span>
    +    }
    +
    +    @Override
    +    public String toString() {
    +<span class="fc" id="L56">        return ReflectionTypes.getInstance().toString(this);</span>
    +    }
    +
    +    void requireUnfrozen() {
    +<span class="fc bfc" id="L60" title="All 2 branches covered.">        if (frozen) {</span>
    +<span class="fc" id="L61">            throw new IllegalStateException(String.format(</span>
    +<span class="fc" id="L62">                &quot;Tried to modify instance of %s after it became effectively immutable.&quot;, getClass()</span>
    +            ));
    +        }
    +<span class="fc" id="L65">    }</span>
    +
    +    void requireFrozen() {
    +<span class="fc bfc" id="L68" title="All 2 branches covered.">        if (!frozen) {</span>
    +<span class="fc" id="L69">            throw new IllegalStateException(String.format(</span>
    +<span class="fc" id="L70">                &quot;Instance of %s used before object construction finished.&quot;, getClass()</span>
    +            ));
    +        }
    +<span class="fc" id="L73">    }</span>
    +
    +    @Override
    +    public TypeParameterElementImpl asElement() {
    +<span class="fc" id="L77">        return typeParameterElement;</span>
    +    }
    +
    +    @Override
    +    public ReflectionTypeMirror getUpperBound() {
    +<span class="fc" id="L82">        requireFrozen();</span>
    +<span class="pc bpc" id="L83" title="2 of 4 branches missed.">        assert upperBound != null : &quot;must be non-null when frozen&quot;;</span>
    +<span class="fc" id="L84">        return upperBound;</span>
    +    }
    +
    +    @Override
    +    public ReflectionTypeMirror getLowerBound() {
    +<span class="fc" id="L89">        requireFrozen();</span>
    +<span class="pc bpc" id="L90" title="2 of 4 branches missed.">        assert lowerBound != null : &quot;must be non-null when frozen&quot;;</span>
    +<span class="fc" id="L91">        return lowerBound;</span>
    +    }
    +
    +    void setUpperAndLowerBounds(ReflectionTypeMirror newUpperBound, ReflectionTypeMirror newLowerBound) {
    +<span class="fc" id="L95">        requireUnfrozen();</span>
    +<span class="fc" id="L96">        Objects.requireNonNull(newUpperBound);</span>
    +<span class="fc" id="L97">        Objects.requireNonNull(newLowerBound);</span>
    +
    +<span class="fc" id="L99">        upperBound = newUpperBound;</span>
    +<span class="fc" id="L100">        lowerBound = newLowerBound;</span>
    +<span class="fc" id="L101">        frozen = true;</span>
    +<span class="fc" id="L102">    }</span>
    +
    +    @Override
    +    public TypeKind getKind() {
    +<span class="fc" id="L106">        return TypeKind.TYPEVAR;</span>
    +    }
    +
    +    @Nullable
    +    WildcardTypeImpl getCapturedTypeArgument() {
    +<span class="fc" id="L111">        return capturedTypeArgument;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/WildcardTypeImpl.html b/jacoco/net.florianschoppmann.java.reflect/WildcardTypeImpl.html
    new file mode 100644
    index 0000000..3654845
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/WildcardTypeImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>WildcardTypeImpl</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_class">WildcardTypeImpl</span></div><h1>WildcardTypeImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1 of 73</td><td class="ctr2">99%</td><td class="bar">2 of 10</td><td class="ctr2">80%</td><td class="ctr1">2</td><td class="ctr2">13</td><td class="ctr1">0</td><td class="ctr2">17</td><td class="ctr1">0</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a1"><a href="WildcardTypeImpl.java.html#L27" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="3" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="116" height="10" title="32" alt="32"/></td><td class="ctr2" id="c7">97%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="96" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">80%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="WildcardTypeImpl.java.html#L40" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="50" height="10" title="14" alt="14"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a7"><a href="WildcardTypeImpl.java.html#L20" class="el_method">WildcardTypeImpl(ReflectionTypeMirror, ReflectionTypeMirror)</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="32" height="10" title="9" alt="9"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="WildcardTypeImpl.java.html#L50" class="el_method">accept(TypeVisitor, Object)</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="18" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="WildcardTypeImpl.java.html#L45" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="14" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="WildcardTypeImpl.java.html#L56" class="el_method">getExtendsBound()</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a4"><a href="WildcardTypeImpl.java.html#L62" class="el_method">getSuperBound()</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="WildcardTypeImpl.java.html#L67" class="el_method">getKind()</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="7" height="10" title="2" alt="2"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/WildcardTypeImpl.java.html b/jacoco/net.florianschoppmann.java.reflect/WildcardTypeImpl.java.html
    new file mode 100644
    index 0000000..464fd74
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/WildcardTypeImpl.java.html
    @@ -0,0 +1,70 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>WildcardTypeImpl.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.reflect</a> &gt; <span class="el_source">WildcardTypeImpl.java</span></div><h1>WildcardTypeImpl.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.reflect;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.type.TypeKind;
    +import javax.lang.model.type.TypeVisitor;
    +import javax.lang.model.type.WildcardType;
    +import java.util.Objects;
    +
    +final class WildcardTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, WildcardType {
    +    /**
    +     * Upper bound of this wildcard. If no upper bound is explicitly declared, this field contains {@code null}.
    +     */
    +    @Nullable private final ReflectionTypeMirror extendsBound;
    +
    +    /**
    +     * Lower bound of this wildcard. If no lower bound is explicitly declared, this field contains {@code null}.
    +     */
    +    @Nullable private final ReflectionTypeMirror superBound;
    +
    +<span class="fc" id="L20">    WildcardTypeImpl(@Nullable ReflectionTypeMirror extendsBound, @Nullable ReflectionTypeMirror superBound) {</span>
    +<span class="fc" id="L21">        this.extendsBound = extendsBound;</span>
    +<span class="fc" id="L22">        this.superBound = superBound;</span>
    +<span class="fc" id="L23">    }</span>
    +
    +    @Override
    +    public boolean equals(@Nullable Object otherObject) {
    +<span class="fc bfc" id="L27" title="All 2 branches covered.">        if (this == otherObject) {</span>
    +<span class="fc" id="L28">            return true;</span>
    +<span class="fc bfc" id="L29" title="All 4 branches covered.">        } else if (otherObject == null || getClass() != otherObject.getClass()) {</span>
    +<span class="fc" id="L30">            return false;</span>
    +        }
    +
    +<span class="fc" id="L33">        WildcardTypeImpl other = (WildcardTypeImpl) otherObject;</span>
    +<span class="pc bpc" id="L34" title="1 of 2 branches missed.">        return Objects.equals(extendsBound, other.extendsBound)</span>
    +<span class="pc bpc" id="L35" title="1 of 2 branches missed.">            &amp;&amp; Objects.equals(superBound, other.superBound);</span>
    +    }
    +
    +    @Override
    +    public int hashCode() {
    +<span class="fc" id="L40">        return Objects.hash(extendsBound, superBound);</span>
    +    }
    +
    +    @Override
    +    public String toString() {
    +<span class="fc" id="L45">        return ReflectionTypes.getInstance().toString(this);</span>
    +    }
    +
    +    @Override
    +    public &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<span class="fc" id="L50">        return visitor.visitWildcard(this, parameter);</span>
    +    }
    +
    +    @Override
    +    @Nullable
    +    public ReflectionTypeMirror getExtendsBound() {
    +<span class="fc" id="L56">        return extendsBound;</span>
    +    }
    +
    +    @Override
    +    @Nullable
    +    public ReflectionTypeMirror getSuperBound() {
    +<span class="fc" id="L62">        return superBound;</span>
    +    }
    +
    +    @Override
    +    public TypeKind getKind() {
    +<span class="fc" id="L67">        return TypeKind.WILDCARD;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/index.html b/jacoco/net.florianschoppmann.java.reflect/index.html
    new file mode 100644
    index 0000000..4751590
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>net.florianschoppmann.java.reflect</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <span class="el_package">net.florianschoppmann.java.reflect</span></div><h1>net.florianschoppmann.java.reflect</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">143 of 2,250</td><td class="ctr2">94%</td><td class="bar">49 of 248</td><td class="ctr2">80%</td><td class="ctr1">54</td><td class="ctr2">276</td><td class="ctr1">15</td><td class="ctr2">480</td><td class="ctr1">8</td><td class="ctr2">152</td><td class="ctr1">0</td><td class="ctr2">16</td></tr></tfoot><tbody><tr><td id="a7"><a href="NameImpl.html" class="el_class">NameImpl</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="4" height="10" title="31" alt="31"/><img src="../.resources/greenbar.gif" width="3" height="10" title="25" alt="25"/></td><td class="ctr2" id="c14">45%</td><td class="bar" id="d3"><img src="../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f3">6</td><td class="ctr2" id="g6">11</td><td class="ctr1" id="h0">7</td><td class="ctr2" id="i8">14</td><td class="ctr1" id="j1">3</td><td class="ctr2" id="k5">8</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a3"><a href="ElementImpl.html" class="el_class">ElementImpl</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="3" height="10" title="26" alt="26"/><img src="../.resources/greenbar.gif" width="4" height="10" title="32" alt="32"/></td><td class="ctr2" id="c13">55%</td><td class="bar" id="d7"><img src="../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e10">50%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g11">6</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i11">12</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k14">4</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a11"><a href="ReflectionTypes.html" class="el_class">ReflectionTypes</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="3" height="10" title="25" alt="25"/><img src="../.resources/greenbar.gif" width="116" height="10" title="897" alt="897"/></td><td class="ctr2" id="c9">97%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="17" height="10" title="15" alt="15"/><img src="../.resources/greenbar.gif" width="102" height="10" title="89" alt="89"/></td><td class="ctr2" id="e4">86%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">85</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i0">182</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k0">33</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a14"><a href="TypeVariableImpl.html" class="el_class">TypeVariableImpl</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="2" height="10" title="18" alt="18"/><img src="../.resources/greenbar.gif" width="24" height="10" title="190" alt="190"/></td><td class="ctr2" id="c12">91%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="13" height="10" title="12" alt="12"/><img src="../.resources/greenbar.gif" width="25" height="10" title="22" alt="22"/></td><td class="ctr2" id="e9">65%</td><td class="ctr1" id="f1">12</td><td class="ctr2" id="g2">31</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i2">46</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k2">14</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a0"><a href="AnnotatedConstructImpl.html" class="el_class">AnnotatedConstructImpl</a></td><td class="bar" id="b4"><img src="../.resources/redbar.gif" width="2" height="10" title="18" alt="18"/></td><td class="ctr2" id="c15">14%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g12">5</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i14">5</td><td class="ctr1" id="j0">4</td><td class="ctr2" id="k10">5</td><td class="ctr1" id="l4">0</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a12"><a href="TypeElementImpl.html" class="el_class">TypeElementImpl</a></td><td class="bar" id="b5"><img src="../.resources/redbar.gif" width="2" height="10" title="17" alt="17"/><img src="../.resources/greenbar.gif" width="41" height="10" title="319" alt="319"/></td><td class="ctr2" id="c10">95%</td><td class="bar" id="d2"><img src="../.resources/redbar.gif" width="8" height="10" title="7" alt="7"/><img src="../.resources/greenbar.gif" width="42" height="10" title="37" alt="37"/></td><td class="ctr2" id="e5">84%</td><td class="ctr1" id="f2">7</td><td class="ctr2" id="g1">39</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i1">69</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k1">17</td><td class="ctr1" id="l5">0</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a13"><a href="TypeParameterElementImpl.html" class="el_class">TypeParameterElementImpl</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="15" height="10" title="120" alt="120"/></td><td class="ctr2" id="c11">94%</td><td class="bar" id="d4"><img src="../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/><img src="../.resources/greenbar.gif" width="12" height="10" title="11" alt="11"/></td><td class="ctr2" id="e8">79%</td><td class="ctr1" id="f5">3</td><td class="ctr2" id="g3">21</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i3">28</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k3">14</td><td class="ctr1" id="l6">0</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a15"><a href="WildcardTypeImpl.html" class="el_class">WildcardTypeImpl</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="9" height="10" title="72" alt="72"/></td><td class="ctr2" id="c8">99%</td><td class="bar" id="d6"><img src="../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="9" height="10" title="8" alt="8"/></td><td class="ctr2" id="e7">80%</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g5">13</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i6">17</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k6">8</td><td class="ctr1" id="l7">0</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a2"><a href="DeclaredTypeImpl.html" class="el_class">DeclaredTypeImpl</a></td><td class="bar" id="b8"><img src="../.resources/greenbar.gif" width="13" height="10" title="100" alt="100"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d5"><img src="../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="11" height="10" title="10" alt="10"/></td><td class="ctr2" id="e6">83%</td><td class="ctr1" id="f8">2</td><td class="ctr2" id="g4">15</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i4">23</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k4">9</td><td class="ctr1" id="l8">0</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a6"><a href="MirrorContext.html" class="el_class">MirrorContext</a></td><td class="bar" id="b9"><img src="../.resources/greenbar.gif" width="10" height="10" title="80" alt="80"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d8"><img src="../.resources/greenbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g9">7</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i5">18</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k15">4</td><td class="ctr1" id="l9">0</td><td class="ctr2" id="m9">1</td></tr><tr><td id="a5"><a href="IntersectionTypeImpl.html" class="el_class">IntersectionTypeImpl</a></td><td class="bar" id="b10"><img src="../.resources/greenbar.gif" width="8" height="10" title="63" alt="63"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d9"><img src="../.resources/greenbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g7">11</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i7">15</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k7">8</td><td class="ctr1" id="l10">0</td><td class="ctr2" id="m10">1</td></tr><tr><td id="a1"><a href="ArrayTypeImpl.html" class="el_class">ArrayTypeImpl</a></td><td class="bar" id="b11"><img src="../.resources/greenbar.gif" width="7" height="10" title="60" alt="60"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d10"><img src="../.resources/greenbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g8">10</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i9">14</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k8">7</td><td class="ctr1" id="l11">0</td><td class="ctr2" id="m11">1</td></tr><tr><td id="a10"><a href="PrimitiveTypeImpl.html" class="el_class">PrimitiveTypeImpl</a></td><td class="bar" id="b12"><img src="../.resources/greenbar.gif" width="7" height="10" title="59" alt="59"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g13">5</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i10">14</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k11">5</td><td class="ctr1" id="l12">0</td><td class="ctr2" id="m12">1</td></tr><tr><td id="a4"><a href="ImmutableList.html" class="el_class">ImmutableList</a></td><td class="bar" id="b13"><img src="../.resources/greenbar.gif" width="5" height="10" title="39" alt="39"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d11"><img src="../.resources/greenbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">100%</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g10">7</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i12">10</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k9">6</td><td class="ctr1" id="l13">0</td><td class="ctr2" id="m13">1</td></tr><tr><td id="a8"><a href="NoTypeImpl.html" class="el_class">NoTypeImpl</a></td><td class="bar" id="b14"><img src="../.resources/greenbar.gif" width="3" height="10" title="29" alt="29"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g14">5</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i13">8</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k12">5</td><td class="ctr1" id="l14">0</td><td class="ctr2" id="m14">1</td></tr><tr><td id="a9"><a href="NullTypeImpl.html" class="el_class">NullTypeImpl</a></td><td class="bar" id="b15"><img src="../.resources/greenbar.gif" width="2" height="10" title="19" alt="19"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g15">5</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i15">5</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k13">5</td><td class="ctr1" id="l15">0</td><td class="ctr2" id="m15">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.reflect/index.source.html b/jacoco/net.florianschoppmann.java.reflect/index.source.html
    new file mode 100644
    index 0000000..cfcb252
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.reflect/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>net.florianschoppmann.java.reflect</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <span class="el_package">net.florianschoppmann.java.reflect</span></div><h1>net.florianschoppmann.java.reflect</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">143 of 2,250</td><td class="ctr2">94%</td><td class="bar">49 of 248</td><td class="ctr2">80%</td><td class="ctr1">54</td><td class="ctr2">276</td><td class="ctr1">15</td><td class="ctr2">480</td><td class="ctr1">8</td><td class="ctr2">152</td><td class="ctr1">0</td><td class="ctr2">16</td></tr></tfoot><tbody><tr><td id="a7"><a href="NameImpl.java.html" class="el_source">NameImpl.java</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="4" height="10" title="31" alt="31"/><img src="../.resources/greenbar.gif" width="3" height="10" title="25" alt="25"/></td><td class="ctr2" id="c14">45%</td><td class="bar" id="d3"><img src="../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f3">6</td><td class="ctr2" id="g6">11</td><td class="ctr1" id="h0">7</td><td class="ctr2" id="i8">14</td><td class="ctr1" id="j1">3</td><td class="ctr2" id="k5">8</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a3"><a href="ElementImpl.java.html" class="el_source">ElementImpl.java</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="3" height="10" title="26" alt="26"/><img src="../.resources/greenbar.gif" width="4" height="10" title="32" alt="32"/></td><td class="ctr2" id="c13">55%</td><td class="bar" id="d7"><img src="../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e10">50%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g11">6</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i11">12</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k14">4</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a11"><a href="ReflectionTypes.java.html" class="el_source">ReflectionTypes.java</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="3" height="10" title="25" alt="25"/><img src="../.resources/greenbar.gif" width="116" height="10" title="897" alt="897"/></td><td class="ctr2" id="c9">97%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="17" height="10" title="15" alt="15"/><img src="../.resources/greenbar.gif" width="102" height="10" title="89" alt="89"/></td><td class="ctr2" id="e4">86%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">85</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i0">182</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k0">33</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a14"><a href="TypeVariableImpl.java.html" class="el_source">TypeVariableImpl.java</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="2" height="10" title="18" alt="18"/><img src="../.resources/greenbar.gif" width="24" height="10" title="190" alt="190"/></td><td class="ctr2" id="c12">91%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="13" height="10" title="12" alt="12"/><img src="../.resources/greenbar.gif" width="25" height="10" title="22" alt="22"/></td><td class="ctr2" id="e9">65%</td><td class="ctr1" id="f1">12</td><td class="ctr2" id="g2">31</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i2">46</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k2">14</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a0"><a href="AnnotatedConstructImpl.java.html" class="el_source">AnnotatedConstructImpl.java</a></td><td class="bar" id="b4"><img src="../.resources/redbar.gif" width="2" height="10" title="18" alt="18"/></td><td class="ctr2" id="c15">14%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g12">5</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i14">5</td><td class="ctr1" id="j0">4</td><td class="ctr2" id="k10">5</td><td class="ctr1" id="l4">0</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a12"><a href="TypeElementImpl.java.html" class="el_source">TypeElementImpl.java</a></td><td class="bar" id="b5"><img src="../.resources/redbar.gif" width="2" height="10" title="17" alt="17"/><img src="../.resources/greenbar.gif" width="41" height="10" title="319" alt="319"/></td><td class="ctr2" id="c10">95%</td><td class="bar" id="d2"><img src="../.resources/redbar.gif" width="8" height="10" title="7" alt="7"/><img src="../.resources/greenbar.gif" width="42" height="10" title="37" alt="37"/></td><td class="ctr2" id="e5">84%</td><td class="ctr1" id="f2">7</td><td class="ctr2" id="g1">39</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i1">69</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k1">17</td><td class="ctr1" id="l5">0</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a13"><a href="TypeParameterElementImpl.java.html" class="el_source">TypeParameterElementImpl.java</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="15" height="10" title="120" alt="120"/></td><td class="ctr2" id="c11">94%</td><td class="bar" id="d4"><img src="../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/><img src="../.resources/greenbar.gif" width="12" height="10" title="11" alt="11"/></td><td class="ctr2" id="e8">79%</td><td class="ctr1" id="f5">3</td><td class="ctr2" id="g3">21</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i3">28</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k3">14</td><td class="ctr1" id="l6">0</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a15"><a href="WildcardTypeImpl.java.html" class="el_source">WildcardTypeImpl.java</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="9" height="10" title="72" alt="72"/></td><td class="ctr2" id="c8">99%</td><td class="bar" id="d6"><img src="../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="9" height="10" title="8" alt="8"/></td><td class="ctr2" id="e7">80%</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g5">13</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i6">17</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k6">8</td><td class="ctr1" id="l7">0</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a2"><a href="DeclaredTypeImpl.java.html" class="el_source">DeclaredTypeImpl.java</a></td><td class="bar" id="b8"><img src="../.resources/greenbar.gif" width="13" height="10" title="100" alt="100"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d5"><img src="../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="11" height="10" title="10" alt="10"/></td><td class="ctr2" id="e6">83%</td><td class="ctr1" id="f8">2</td><td class="ctr2" id="g4">15</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i4">23</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k4">9</td><td class="ctr1" id="l8">0</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a6"><a href="MirrorContext.java.html" class="el_source">MirrorContext.java</a></td><td class="bar" id="b9"><img src="../.resources/greenbar.gif" width="10" height="10" title="80" alt="80"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d8"><img src="../.resources/greenbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g9">7</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i5">18</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k15">4</td><td class="ctr1" id="l9">0</td><td class="ctr2" id="m9">1</td></tr><tr><td id="a5"><a href="IntersectionTypeImpl.java.html" class="el_source">IntersectionTypeImpl.java</a></td><td class="bar" id="b10"><img src="../.resources/greenbar.gif" width="8" height="10" title="63" alt="63"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d9"><img src="../.resources/greenbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g7">11</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i7">15</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k7">8</td><td class="ctr1" id="l10">0</td><td class="ctr2" id="m10">1</td></tr><tr><td id="a1"><a href="ArrayTypeImpl.java.html" class="el_source">ArrayTypeImpl.java</a></td><td class="bar" id="b11"><img src="../.resources/greenbar.gif" width="7" height="10" title="60" alt="60"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d10"><img src="../.resources/greenbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g8">10</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i9">14</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k8">7</td><td class="ctr1" id="l11">0</td><td class="ctr2" id="m11">1</td></tr><tr><td id="a10"><a href="PrimitiveTypeImpl.java.html" class="el_source">PrimitiveTypeImpl.java</a></td><td class="bar" id="b12"><img src="../.resources/greenbar.gif" width="7" height="10" title="59" alt="59"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g13">5</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i10">14</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k11">5</td><td class="ctr1" id="l12">0</td><td class="ctr2" id="m12">1</td></tr><tr><td id="a4"><a href="ImmutableList.java.html" class="el_source">ImmutableList.java</a></td><td class="bar" id="b13"><img src="../.resources/greenbar.gif" width="5" height="10" title="39" alt="39"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d11"><img src="../.resources/greenbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">100%</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g10">7</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i12">10</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k9">6</td><td class="ctr1" id="l13">0</td><td class="ctr2" id="m13">1</td></tr><tr><td id="a8"><a href="NoTypeImpl.java.html" class="el_source">NoTypeImpl.java</a></td><td class="bar" id="b14"><img src="../.resources/greenbar.gif" width="3" height="10" title="29" alt="29"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g14">5</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i13">8</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k12">5</td><td class="ctr1" id="l14">0</td><td class="ctr2" id="m14">1</td></tr><tr><td id="a9"><a href="NullTypeImpl.java.html" class="el_source">NullTypeImpl.java</a></td><td class="bar" id="b15"><img src="../.resources/greenbar.gif" width="2" height="10" title="19" alt="19"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g15">5</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i15">5</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k13">5</td><td class="ctr1" id="l15">0</td><td class="ctr2" id="m15">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/AbstractTypes$DeclaredTypeSubtypeVisitor.html b/jacoco/net.florianschoppmann.java.type/AbstractTypes$DeclaredTypeSubtypeVisitor.html
    new file mode 100644
    index 0000000..9a26dba
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/AbstractTypes$DeclaredTypeSubtypeVisitor.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>AbstractTypes.DeclaredTypeSubtypeVisitor</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.type</a> &gt; <span class="el_class">AbstractTypes.DeclaredTypeSubtypeVisitor</span></div><h1>AbstractTypes.DeclaredTypeSubtypeVisitor</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">18 of 188</td><td class="ctr2">90%</td><td class="bar">9 of 42</td><td class="ctr2">79%</td><td class="ctr1">9</td><td class="ctr2">27</td><td class="ctr1">0</td><td class="ctr2">38</td><td class="ctr1">0</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a3"><a href="AbstractTypes.java.html#L412" class="el_method">visitDeclared(DeclaredType, DeclaredType)</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="114" height="10" title="86" alt="86"/></td><td class="ctr2" id="c1">96%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="13" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="106" height="10" title="16" alt="16"/></td><td class="ctr2" id="e0">89%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">10</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">22</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="AbstractTypes.java.html#L469" class="el_method">visitArray(ArrayType, DeclaredType)</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="40" height="10" title="30" alt="30"/></td><td class="ctr2" id="c2">88%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="13" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="53" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">80%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="AbstractTypes.java.html#L496" class="el_method">visitIntersection(IntersectionType, DeclaredType)</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="37" height="10" title="28" alt="28"/></td><td class="ctr2" id="c3">88%</td><td class="bar" id="d2"><img src="../.resources/redbar.gif" width="13" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="40" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">75%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i1">6</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="AbstractTypes.java.html#L483" class="el_method">visitTypeVariable(TypeVariable, DeclaredType)</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="16" height="10" title="12" alt="12"/></td><td class="ctr2" id="c4">75%</td><td class="bar" id="d3"><img src="../.resources/redbar.gif" width="13" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="13" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">50%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="AbstractTypes.java.html#L398" class="el_method">static {...}</a></td><td class="bar" id="b4"><img src="../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="8" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">75%</td><td class="bar" id="d4"><img src="../.resources/redbar.gif" width="6" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="6" height="10" title="1" alt="1"/></td><td class="ctr2" id="e4">50%</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a0"><a href="AbstractTypes.java.html#L399" class="el_method">AbstractTypes.DeclaredTypeSubtypeVisitor(AbstractTypes)</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="10" height="10" title="8" alt="8"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/AbstractTypes$ErasureVisitor.html b/jacoco/net.florianschoppmann.java.type/AbstractTypes$ErasureVisitor.html
    new file mode 100644
    index 0000000..e55bb40
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/AbstractTypes$ErasureVisitor.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>AbstractTypes.ErasureVisitor</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.type</a> &gt; <span class="el_class">AbstractTypes.ErasureVisitor</span></div><h1>AbstractTypes.ErasureVisitor</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 58</td><td class="ctr2">100%</td><td class="bar">0 of 2</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">7</td><td class="ctr1">0</td><td class="ctr2">9</td><td class="ctr1">0</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a3"><a href="AbstractTypes.java.html#L877" class="el_method">visitDeclared(DeclaredType, Void)</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="26" alt="26"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../.resources/greenbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="AbstractTypes.java.html#L889" class="el_method">visitArray(ArrayType, Void)</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="41" height="10" title="9" alt="9"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="AbstractTypes.java.html#L913" class="el_method">visitIntersection(IntersectionType, Void)</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="41" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="AbstractTypes.java.html#L874" class="el_method">AbstractTypes.ErasureVisitor(AbstractTypes)</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="27" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a5"><a href="AbstractTypes.java.html#L901" class="el_method">visitTypeVariable(TypeVariable, Void)</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="27" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="AbstractTypes.java.html#L923" class="el_method">defaultAction(TypeMirror, Void)</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="9" height="10" title="2" alt="2"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/AbstractTypes$SubstitutionVisitor.html b/jacoco/net.florianschoppmann.java.type/AbstractTypes$SubstitutionVisitor.html
    new file mode 100644
    index 0000000..04cac7b
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/AbstractTypes$SubstitutionVisitor.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>AbstractTypes.SubstitutionVisitor</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.type</a> &gt; <span class="el_class">AbstractTypes.SubstitutionVisitor</span></div><h1>AbstractTypes.SubstitutionVisitor</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">28 of 212</td><td class="ctr2">87%</td><td class="bar">13 of 36</td><td class="ctr2">64%</td><td class="ctr1">13</td><td class="ctr2">27</td><td class="ctr1">0</td><td class="ctr2">38</td><td class="ctr1">0</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a8"><a href="AbstractTypes.java.html#L213" class="el_method">visitWildcard(WildcardType, AbstractTypes.Substitutions)</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="20" height="10" title="10" alt="10"/><img src="../.resources/greenbar.gif" width="53" height="10" title="26" alt="26"/></td><td class="ctr2" id="c8">72%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="36" height="10" title="3" alt="3"/><img src="../.resources/greenbar.gif" width="60" height="10" title="5" alt="5"/></td><td class="ctr2" id="e3">62%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i3">6</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="AbstractTypes.java.html#L191" class="el_method">visitTypeVariable(TypeVariable, AbstractTypes.Substitutions)</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="111" height="10" title="54" alt="54"/></td><td class="ctr2" id="c3">93%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="36" height="10" title="3" alt="3"/><img src="../.resources/greenbar.gif" width="84" height="10" title="7" alt="7"/></td><td class="ctr2" id="e1">70%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">12</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a5"><a href="AbstractTypes.java.html#L172" class="el_method">visitDeclared(DeclaredType, AbstractTypes.Substitutions)</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="72" height="10" title="35" alt="35"/></td><td class="ctr2" id="c4">90%</td><td class="bar" id="d2"><img src="../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">67%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="AbstractTypes.java.html#L185" class="el_method">visitArray(ArrayType, AbstractTypes.Substitutions)</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="28" height="10" title="14" alt="14"/></td><td class="ctr2" id="c5">78%</td><td class="bar" id="d3"><img src="../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">50%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="AbstractTypes.java.html#L229" class="el_method">visitIntersection(IntersectionType, AbstractTypes.Substitutions)</a></td><td class="bar" id="b4"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="26" height="10" title="13" alt="13"/></td><td class="ctr2" id="c6">76%</td><td class="bar" id="d4"><img src="../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">50%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i5">2</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="AbstractTypes.java.html#L159" class="el_method">static {...}</a></td><td class="bar" id="b5"><img src="../.resources/redbar.gif" width="4" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="12" height="10" title="6" alt="6"/></td><td class="ctr2" id="c7">75%</td><td class="bar" id="d5"><img src="../.resources/redbar.gif" width="12" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="12" height="10" title="1" alt="1"/></td><td class="ctr2" id="e6">50%</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="AbstractTypes.java.html#L161" class="el_method">substituteInList(List, AbstractTypes.Substitutions)</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="57" height="10" title="28" alt="28"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d6"><img src="../.resources/greenbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a0"><a href="AbstractTypes.java.html#L159" class="el_method">AbstractTypes.SubstitutionVisitor(AbstractTypes)</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="12" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a1"><a href="AbstractTypes.java.html#L235" class="el_method">defaultAction(TypeMirror, AbstractTypes.Substitutions)</a></td><td class="bar" id="b8"><img src="../.resources/greenbar.gif" width="4" height="10" title="2" alt="2"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/AbstractTypes$Substitutions.html b/jacoco/net.florianschoppmann.java.type/AbstractTypes$Substitutions.html
    new file mode 100644
    index 0000000..e3fa9e5
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/AbstractTypes$Substitutions.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>AbstractTypes.Substitutions</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.type</a> &gt; <span class="el_class">AbstractTypes.Substitutions</span></div><h1>AbstractTypes.Substitutions</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 9</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">4</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="AbstractTypes.java.html#L143" class="el_method">AbstractTypes.Substitutions(Map, Map)</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/AbstractTypes$SubtypeVisitor.html b/jacoco/net.florianschoppmann.java.type/AbstractTypes$SubtypeVisitor.html
    new file mode 100644
    index 0000000..ef7daaf
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/AbstractTypes$SubtypeVisitor.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>AbstractTypes.SubtypeVisitor</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.type</a> &gt; <span class="el_class">AbstractTypes.SubtypeVisitor</span></div><h1>AbstractTypes.SubtypeVisitor</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">22 of 174</td><td class="ctr2">87%</td><td class="bar">12 of 38</td><td class="ctr2">68%</td><td class="ctr1">12</td><td class="ctr2">26</td><td class="ctr1">0</td><td class="ctr2">21</td><td class="ctr1">0</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a5"><a href="AbstractTypes.java.html#L565" class="el_method">visitPrimitive(PrimitiveType, TypeMirror)</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="9" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="110" height="10" title="45" alt="45"/></td><td class="ctr2" id="c1">92%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="22" height="10" title="3" alt="3"/><img src="../.resources/greenbar.gif" width="97" height="10" title="13" alt="13"/></td><td class="ctr2" id="e0">81%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="AbstractTypes.java.html#L539" class="el_method">visitArray(ArrayType, TypeMirror)</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="9" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="53" height="10" title="22" alt="22"/></td><td class="ctr2" id="c2">85%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="15" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="45" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">75%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="AbstractTypes.java.html#L551" class="el_method">visitDeclared(DeclaredType, TypeMirror)</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="9" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="29" height="10" title="12" alt="12"/></td><td class="ctr2" id="c3">75%</td><td class="bar" id="d2"><img src="../.resources/redbar.gif" width="15" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="15" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">50%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a6"><a href="AbstractTypes.java.html#L583" class="el_method">visitTypeVariable(TypeVariable, TypeMirror)</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="9" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="29" height="10" title="12" alt="12"/></td><td class="ctr2" id="c4">75%</td><td class="bar" id="d3"><img src="../.resources/redbar.gif" width="15" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="15" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">50%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="AbstractTypes.java.html#L600" class="el_method">visitIntersection(IntersectionType, TypeMirror)</a></td><td class="bar" id="b4"><img src="../.resources/redbar.gif" width="9" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="26" height="10" title="11" alt="11"/></td><td class="ctr2" id="c6">73%</td><td class="bar" id="d4"><img src="../.resources/redbar.gif" width="15" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="15" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">50%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i5">2</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="AbstractTypes.java.html#L524" class="el_method">static {...}</a></td><td class="bar" id="b5"><img src="../.resources/redbar.gif" width="4" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">75%</td><td class="bar" id="d5"><img src="../.resources/redbar.gif" width="7" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="7" height="10" title="1" alt="1"/></td><td class="ctr2" id="e5">50%</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="AbstractTypes.java.html#L525" class="el_method">AbstractTypes.SubtypeVisitor(AbstractTypes)</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="107" height="10" title="44" alt="44"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/AbstractTypes$ToStringVisitor.html b/jacoco/net.florianschoppmann.java.type/AbstractTypes$ToStringVisitor.html
    new file mode 100644
    index 0000000..2c9900a
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/AbstractTypes$ToStringVisitor.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>AbstractTypes.ToStringVisitor</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.type</a> &gt; <span class="el_class">AbstractTypes.ToStringVisitor</span></div><h1>AbstractTypes.ToStringVisitor</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">38 of 273</td><td class="ctr2">86%</td><td class="bar">19 of 52</td><td class="ctr2">63%</td><td class="ctr1">19</td><td class="ctr2">37</td><td class="ctr1">0</td><td class="ctr2">58</td><td class="ctr1">0</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a4"><a href="AbstractTypes.java.html#L1278" class="el_method">visitDeclared(DeclaredType, StringBuilder)</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="111" height="10" title="55" alt="55"/></td><td class="ctr2" id="c1">93%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">75%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a10"><a href="AbstractTypes.java.html#L1321" class="el_method">visitWildcard(WildcardType, StringBuilder)</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="77" height="10" title="38" alt="38"/></td><td class="ctr2" id="c2">90%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">75%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">11</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a9"><a href="AbstractTypes.java.html#L1307" class="el_method">visitTypeVariable(TypeVariable, StringBuilder)</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="67" height="10" title="33" alt="33"/></td><td class="ctr2" id="c3">89%</td><td class="bar" id="d3"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">67%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i3">8</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="AbstractTypes.java.html#L1344" class="el_method">appendList(StringBuilder, List, String)</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="67" height="10" title="33" alt="33"/></td><td class="ctr2" id="c4">89%</td><td class="bar" id="d2"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">75%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i2">9</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="AbstractTypes.java.html#L1299" class="el_method">visitArray(ArrayType, StringBuilder)</a></td><td class="bar" id="b4"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="32" height="10" title="16" alt="16"/></td><td class="ctr2" id="c5">80%</td><td class="bar" id="d4"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">50%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">4</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="AbstractTypes.java.html#L1257" class="el_method">visitPrimitive(PrimitiveType, StringBuilder)</a></td><td class="bar" id="b5"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="26" height="10" title="13" alt="13"/></td><td class="ctr2" id="c6">76%</td><td class="bar" id="d5"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">50%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">3</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a6"><a href="AbstractTypes.java.html#L1271" class="el_method">visitNoType(NoType, StringBuilder)</a></td><td class="bar" id="b6"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="26" height="10" title="13" alt="13"/></td><td class="ctr2" id="c7">76%</td><td class="bar" id="d6"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">50%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a5"><a href="AbstractTypes.java.html#L1338" class="el_method">visitIntersection(IntersectionType, StringBuilder)</a></td><td class="bar" id="b7"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="24" height="10" title="12" alt="12"/></td><td class="ctr2" id="c8">75%</td><td class="bar" id="d7"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">50%</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">3</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a7"><a href="AbstractTypes.java.html#L1264" class="el_method">visitNull(NullType, StringBuilder)</a></td><td class="bar" id="b8"><img src="../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="20" height="10" title="10" alt="10"/></td><td class="ctr2" id="c10">71%</td><td class="bar" id="d8"><img src="../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e8">50%</td><td class="ctr1" id="f8">2</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">3</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a2"><a href="AbstractTypes.java.html#L1254" class="el_method">static {...}</a></td><td class="bar" id="b9"><img src="../.resources/redbar.gif" width="4" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="12" height="10" title="6" alt="6"/></td><td class="ctr2" id="c9">75%</td><td class="bar" id="d9"><img src="../.resources/redbar.gif" width="15" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="15" height="10" title="1" alt="1"/></td><td class="ctr2" id="e9">50%</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a0"><a href="AbstractTypes.java.html#L1254" class="el_method">AbstractTypes.ToStringVisitor(AbstractTypes)</a></td><td class="bar" id="b10"><img src="../.resources/greenbar.gif" width="12" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/AbstractTypes$TypeDeclarationVertexState.html b/jacoco/net.florianschoppmann.java.type/AbstractTypes$TypeDeclarationVertexState.html
    new file mode 100644
    index 0000000..7b1b91c
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/AbstractTypes$TypeDeclarationVertexState.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>AbstractTypes.TypeDeclarationVertexState</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.type</a> &gt; <span class="el_class">AbstractTypes.TypeDeclarationVertexState</span></div><h1>AbstractTypes.TypeDeclarationVertexState</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 46</td><td class="ctr2">100%</td><td class="bar">0 of 2</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">15</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="AbstractTypes.java.html#L775" class="el_method">toPath(DeclaredType)</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="31" alt="31"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../.resources/greenbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">9</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="AbstractTypes.java.html#L758" class="el_method">AbstractTypes.TypeDeclarationVertexState(int, boolean, TypeElement, DeclaredType)</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="58" height="10" title="15" alt="15"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">6</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/AbstractTypes.html b/jacoco/net.florianschoppmann.java.type/AbstractTypes.html
    new file mode 100644
    index 0000000..a5b228c
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/AbstractTypes.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>AbstractTypes</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.type</a> &gt; <span class="el_class">AbstractTypes</span></div><h1>AbstractTypes</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">14 of 1,016</td><td class="ctr2">99%</td><td class="bar">11 of 136</td><td class="ctr2">92%</td><td class="ctr1">11</td><td class="ctr2">85</td><td class="ctr1">0</td><td class="ctr2">224</td><td class="ctr1">0</td><td class="ctr2">17</td></tr></tfoot><tbody><tr><td id="a7"><a href="AbstractTypes.java.html#L811" class="el_method">getShortestPathToSuperType(TypeElement, DeclaredType)</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="3" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="116" height="10" title="149" alt="149"/></td><td class="ctr2" id="c13">97%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="15" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="75" height="10" title="20" alt="20"/></td><td class="ctr2" id="e9">83%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g1">13</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">31</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a15"><a href="AbstractTypes.java.html#L265" class="el_method">substitute(TypeMirror, Map)</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="3" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="104" height="10" title="133" alt="133"/></td><td class="ctr2" id="c14">97%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="11" height="10" title="3" alt="3"/><img src="../.resources/greenbar.gif" width="41" height="10" title="11" alt="11"/></td><td class="ctr2" id="e11">79%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g2">8</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i2">27</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="AbstractTypes.java.html#L1026" class="el_method">captureWildcardArgument(WildcardType, TypeParameterElement)</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="3" height="10" title="4" alt="4"/><img src="../.resources/greenbar.gif" width="39" height="10" title="50" alt="50"/></td><td class="ctr2" id="c16">93%</td><td class="bar" id="d2"><img src="../.resources/redbar.gif" width="7" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="30" height="10" title="8" alt="8"/></td><td class="ctr2" id="e10">80%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g4">6</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i6">14</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a14"><a href="AbstractTypes.java.html#L58" class="el_method">static {...}</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="1" height="10" title="2" alt="2"/><img src="../.resources/greenbar.gif" width="21" height="10" title="27" alt="27"/></td><td class="ctr2" id="c15">93%</td><td class="bar" id="d4"><img src="../.resources/redbar.gif" width="3" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="3" height="10" title="1" alt="1"/></td><td class="ctr2" id="e12">50%</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g11">2</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i16">2</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="AbstractTypes.java.html#L644" class="el_method">contains(TypeMirror, TypeMirror)</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="99" height="10" title="127" alt="127"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d5"><img src="../.resources/greenbar.gif" width="120" height="10" title="32" alt="32"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g0">17</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i1">31</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="AbstractTypes.java.html#L1075" class="el_method">capture(TypeMirror)</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="86" height="10" title="110" alt="110"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d7"><img src="../.resources/greenbar.gif" width="37" height="10" title="10" alt="10"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g5">6</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i3">27</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a13"><a href="AbstractTypes.java.html#L340" class="el_method">resolveActualTypeArguments(TypeElement, TypeMirror)</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="77" height="10" title="99" alt="99"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d6"><img src="../.resources/greenbar.gif" width="52" height="10" title="14" alt="14"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g3">8</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i4">24</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a5"><a href="AbstractTypes.java.html#L726" class="el_method">directSupertypesOfTypeDeclaration(TypeElement)</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="43" height="10" title="55" alt="55"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d8"><img src="../.resources/greenbar.gif" width="30" height="10" title="8" alt="8"/></td><td class="ctr2" id="e3">100%</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g6">5</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">11</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a9"><a href="AbstractTypes.java.html#L997" class="el_method">greatestLowerBound(TypeMirror, TypeMirror)</a></td><td class="bar" id="b8"><img src="../.resources/greenbar.gif" width="41" height="10" title="53" alt="53"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d3"><img src="../.resources/redbar.gif" width="3" height="10" title="1" alt="1"/><img src="../.resources/greenbar.gif" width="26" height="10" title="7" alt="7"/></td><td class="ctr2" id="e8">88%</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g7">5</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i5">16</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a0"><a href="AbstractTypes.java.html#L58" class="el_method">AbstractTypes()</a></td><td class="bar" id="b9"><img src="../.resources/greenbar.gif" width="29" height="10" title="38" alt="38"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i9">7</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a8"><a href="AbstractTypes.java.html#L1155" class="el_method">getTypeVariable(TypeParameterElement, TypeMirror, TypeMirror, WildcardType)</a></td><td class="bar" id="b10"><img src="../.resources/greenbar.gif" width="23" height="10" title="30" alt="30"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i8">9</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a11"><a href="AbstractTypes.java.html#L618" class="el_method">isSubtype(TypeMirror, TypeMirror)</a></td><td class="bar" id="b11"><img src="../.resources/greenbar.gif" width="22" height="10" title="29" alt="29"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d9"><img src="../.resources/greenbar.gif" width="15" height="10" title="4" alt="4"/></td><td class="ctr2" id="e4">100%</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i11">5</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a12"><a href="AbstractTypes.java.html#L106" class="el_method">requireValidTypes(TypeMirror[])</a></td><td class="bar" id="b12"><img src="../.resources/greenbar.gif" width="18" height="10" title="24" alt="24"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d12"><img src="../.resources/greenbar.gif" width="7" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">100%</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g12">2</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i12">4</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a1"><a href="AbstractTypes.java.html#L953" class="el_method">asElement(TypeMirror)</a></td><td class="bar" id="b13"><img src="../.resources/greenbar.gif" width="18" height="10" title="24" alt="24"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d10"><img src="../.resources/greenbar.gif" width="15" height="10" title="4" alt="4"/></td><td class="ctr2" id="e6">100%</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g9">3</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i10">7</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a10"><a href="AbstractTypes.java.html#L977" class="el_method">isSameType(TypeMirror, TypeMirror)</a></td><td class="bar" id="b14"><img src="../.resources/greenbar.gif" width="17" height="10" title="22" alt="22"/></td><td class="ctr2" id="c10">100%</td><td class="bar" id="d11"><img src="../.resources/greenbar.gif" width="15" height="10" title="4" alt="4"/></td><td class="ctr2" id="e7">100%</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g10">3</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i14">3</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a16"><a href="AbstractTypes.java.html#L1365" class="el_method">toString(TypeMirror)</a></td><td class="bar" id="b15"><img src="../.resources/greenbar.gif" width="14" height="10" title="19" alt="19"/></td><td class="ctr2" id="c11">100%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i13">4</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a6"><a href="AbstractTypes.java.html#L936" class="el_method">erasure(TypeMirror)</a></td><td class="bar" id="b16"><img src="../.resources/greenbar.gif" width="10" height="10" title="13" alt="13"/></td><td class="ctr2" id="c12">100%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">0</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">0</td><td class="ctr2" id="i15">3</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k16">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/AbstractTypes.java.html b/jacoco/net.florianschoppmann.java.type/AbstractTypes.java.html
    new file mode 100644
    index 0000000..a346a13
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/AbstractTypes.java.html
    @@ -0,0 +1,1372 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>AbstractTypes.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.type</a> &gt; <span class="el_source">AbstractTypes.java</span></div><h1>AbstractTypes.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.type;
    +
    +import javax.annotation.Nullable;
    +import javax.lang.model.element.Element;
    +import javax.lang.model.element.ElementKind;
    +import javax.lang.model.element.TypeElement;
    +import javax.lang.model.element.TypeParameterElement;
    +import javax.lang.model.type.ArrayType;
    +import javax.lang.model.type.DeclaredType;
    +import javax.lang.model.type.NoType;
    +import javax.lang.model.type.NullType;
    +import javax.lang.model.type.PrimitiveType;
    +import javax.lang.model.type.TypeKind;
    +import javax.lang.model.type.TypeMirror;
    +import javax.lang.model.type.TypeVariable;
    +import javax.lang.model.type.WildcardType;
    +import javax.lang.model.util.Types;
    +import java.io.Serializable;
    +import java.lang.reflect.Type;
    +import java.util.ArrayList;
    +import java.util.Arrays;
    +import java.util.Collections;
    +import java.util.HashMap;
    +import java.util.Iterator;
    +import java.util.LinkedHashMap;
    +import java.util.LinkedHashSet;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Objects;
    +import java.util.Set;
    +
    +/**
    + * Abstract skeletal implementation of {@link Types}.
    + *
    + * &lt;p&gt;This class provides a skeletal implementation of the {@link Types} interface. Specifically, it implements all
    + * methods pertaining to §4.10 (subtyping) in the Java Language Specification (JLS). Concrete subclasses are expected to
    + * implement the abstract methods in this class, which are responsible for creating appropriate type-mirror instances.
    + * This class does not place any additional constraints on the concrete {@link TypeMirror} and {@link Element}
    + * implementations, so mutability and thread-safety are implementation-defined. However, this class crucially relies on
    + * the {@code equals} method being well-defined. That is, {@link Element} objects that have equal names and equal
    + * enclosing elements must compare equal. Likewise, {@link TypeMirror} objects that contain equal values must compare
    + * equal. In particular, multiple instances created by one of the {@code get}-methods must compare equal when the given
    + * arguments compare equal.
    + *
    + * &lt;p&gt;Besides subtype-related methods, this class also provides method
    + * {@link #resolveActualTypeArguments(TypeElement, TypeMirror)} for resolving formal type parameters to actual type
    + * arguments. For instance, given type {@code List&lt;String&gt;}, this method determines the actual type argument for the
    + * formal type parameter of {@code Collection&lt;E&gt;} (that is, {@code String} in this simple example).
    + *
    + * &lt;p&gt;Unless explicitly stated otherwise, all methods in this class expect non-null arguments. Passing null where not
    + * expected will cause a {@link NullPointerException} to be thrown. Implementations typically place additional
    + * restrictions on method arguments not captured by the types of the formal parameters (which stem from
    + * {@link javax.lang.model} and its subpackages). While the details are implementation-defined, typically this means
    + * that arguments must have been crated by the same implementation, or otherwise an {@link IllegalArgumentException}
    + * will be thrown. Implementations must override {@link #requireValidType(TypeMirror)} and
    + * {@link #requireValidElement(Element)}, as these methods are expected to perform any necessary validation.
    + */
    +<span class="pc bpc" id="L58" title="1 of 2 branches missed.">public abstract class AbstractTypes implements Types {</span>
    +<span class="fc" id="L59">    private static final List&lt;TypeKind&gt; REFERENCE_TYPES = Collections.unmodifiableList(Arrays.asList(</span>
    +        TypeKind.ARRAY, TypeKind.DECLARED, TypeKind.NULL, TypeKind.TYPEVAR
    +    ));
    +    private static final int DEFAULT_STRING_BUILDER_SIZE = 256;
    +
    +<span class="fc" id="L64">    private final SubstitutionVisitor substitutionVisitor = new SubstitutionVisitor();</span>
    +<span class="fc" id="L65">    private final ErasureVisitor erasureVisitor = new ErasureVisitor();</span>
    +<span class="fc" id="L66">    private final ToStringVisitor toStringVisitor = new ToStringVisitor();</span>
    +<span class="fc" id="L67">    private final SubtypeVisitor subtypeVisitor = new SubtypeVisitor();</span>
    +<span class="fc" id="L68">    private final DeclaredTypeSubtypeVisitor declaredTypeSubtypeVisitor = new DeclaredTypeSubtypeVisitor();</span>
    +
    +    /**
    +     * Verifies that the given {@link Element} is valid for use with this class.
    +     *
    +     * &lt;p&gt;The meaning of valid is implementation-defined, but typically a valid {@link Element} must have been created
    +     * by the implementation that belongs to the current {@code AbstractTypes} instance.
    +     *
    +     * @param element element
    +     * @throws NullPointerException if the argument is null
    +     * @throws IllegalArgumentException if the given {@link Element} cannot be used with this class
    +     */
    +    protected abstract void requireValidElement(Element element);
    +
    +    /**
    +     * Verifies that the given {@link TypeMirror} is valid for use with this class, or that it is {@code null}.
    +     *
    +     * &lt;p&gt;The meaning of valid is implementation-defined, but typically a valid {@link TypeMirror} must have been
    +     * created by the implementation that belongs to the current {@code AbstractTypes} instance. A {@code null} argument
    +     * is always valid. The rationale is that {@code null} {@link TypeMirror} arguments have a special meaning for some
    +     * methods such as {@link #getWildcardType(TypeMirror, TypeMirror)} or
    +     * {@link #createTypeVariable(TypeParameterElement, WildcardType)}.
    +     *
    +     * @param type type mirror, may be {@code null}
    +     * @throws IllegalArgumentException if the given {@link TypeMirror} instance is non-null and it cannot be used with
    +     *     this class
    +     */
    +    protected abstract void requireValidType(@Nullable TypeMirror type);
    +
    +    /**
    +     * Verifies that the given array is non-null and contains valid types that are not null.
    +     *
    +     * @param types array of types
    +     * @throws NullPointerException if the given array or any of its elements are null
    +     * @throws IllegalArgumentException if {@link #requireValidType(TypeMirror)} throws an exception for one of the
    +     *     array elements
    +     */
    +    protected final void requireValidTypes(TypeMirror[] types) {
    +<span class="fc bfc" id="L106" title="All 2 branches covered.">        for (TypeMirror typeArg: types) {</span>
    +<span class="fc" id="L107">            Objects.requireNonNull(typeArg, &quot;TypeMirror array must not contain null elements.&quot;);</span>
    +<span class="fc" id="L108">            requireValidType(typeArg);</span>
    +        }
    +<span class="fc" id="L110">    }</span>
    +
    +    /**
    +     * Returns a type mirror corresponding to the given Java reflection type.
    +     *
    +     * &lt;p&gt;Subclasses are required to return the appropriate {@link DeclaredType} instances for the following
    +     * {@link Class} instances:
    +     * &lt;ul&gt;&lt;li&gt;
    +     *     {@link Object}
    +     * &lt;/li&gt;&lt;li&gt;
    +     *     {@link Serializable}
    +     * &lt;/li&gt;&lt;li&gt;
    +     *     {@link Cloneable}
    +     * &lt;/li&gt;&lt;/ul&gt;
    +     *
    +     * &lt;p&gt;Support for other types is not required and implementation-defined.
    +     *
    +     * @param type type as represented by Java Reflection API
    +     * @throws UnsupportedOperationException If the given type is not one of the above {@link Class} objects and
    +     *     this type-utilities implementation does not support mirroring arbitrary Java reflection types.
    +     * @return the type mirror corresponding to the given reflection type
    +     */
    +    protected abstract TypeMirror typeMirror(Type type);
    +
    +    /**
    +     * Internal class that contains both the substitution map passed to {@link #substitute(TypeMirror, Map)} and the
    +     * set of fresh type variables created at the beginning of that method.
    +     */
    +    private static final class Substitutions {
    +        private final Map&lt;TypeParameterElement, ? extends TypeMirror&gt; map;
    +        private final Map&lt;TypeParameterElement, TypeVariable&gt; freshTypeVariables;
    +
    +        private Substitutions(Map&lt;TypeParameterElement, ? extends TypeMirror&gt; map,
    +<span class="fc" id="L143">                Map&lt;TypeParameterElement, TypeVariable&gt; freshTypeVariables) {</span>
    +<span class="fc" id="L144">            this.map = map;</span>
    +<span class="fc" id="L145">            this.freshTypeVariables = freshTypeVariables;</span>
    +<span class="fc" id="L146">        }</span>
    +    }
    +
    +    /**
    +     * Visitor of a type mirror. Returns a new type mirror after performing the substitutions passed as visitor
    +     * argument.
    +     *
    +     * &lt;p&gt;This visitor is only used within this class and only on &lt;em&gt;valid&lt;/em&gt; {@link TypeMirror} instances. Hence, it
    +     * can be asserted that the visitor parameter is always non-null.
    +     *
    +     * @see #substitutionVisitor
    +     * @see #requireValidType(TypeMirror)
    +     */
    +<span class="pc bpc" id="L159" title="1 of 2 branches missed.">    private final class SubstitutionVisitor extends ExtendedTypeKindVisitor7&lt;TypeMirror, Substitutions&gt; {</span>
    +        private TypeMirror[] substituteInList(List&lt;? extends TypeMirror&gt; types, Substitutions substitutions) {
    +<span class="fc" id="L161">            TypeMirror[] substituted = new TypeMirror[types.size()];</span>
    +<span class="fc" id="L162">            int i = 0;</span>
    +<span class="fc bfc" id="L163" title="All 2 branches covered.">            for (TypeMirror type: types) {</span>
    +<span class="fc" id="L164">                substituted[i] = type.accept(this, substitutions);</span>
    +<span class="fc" id="L165">                ++i;</span>
    +<span class="fc" id="L166">            }</span>
    +<span class="fc" id="L167">            return substituted;</span>
    +        }
    +
    +        @Override
    +        public TypeMirror visitDeclared(DeclaredType declaredType, @Nullable Substitutions substitutions) {
    +<span class="pc bpc" id="L172" title="2 of 4 branches missed.">            assert substitutions != null;</span>
    +<span class="fc" id="L173">            TypeMirror enclosingType = declaredType.getEnclosingType();</span>
    +<span class="fc" id="L174">            TypeElement typeDeclaration = (TypeElement) declaredType.asElement();</span>
    +<span class="fc" id="L175">            TypeMirror[] substitutedArguments = substituteInList(declaredType.getTypeArguments(), substitutions);</span>
    +<span class="fc bfc" id="L176" title="All 2 branches covered.">            if (enclosingType.getKind() == TypeKind.DECLARED) {</span>
    +<span class="fc" id="L177">                return getDeclaredType((DeclaredType) enclosingType, typeDeclaration, substitutedArguments);</span>
    +            } else {
    +<span class="fc" id="L179">                return getDeclaredType(typeDeclaration, substitutedArguments);</span>
    +            }
    +        }
    +
    +        @Override
    +        public TypeMirror visitArray(ArrayType arrayType, @Nullable Substitutions substitutions) {
    +<span class="pc bpc" id="L185" title="2 of 4 branches missed.">            assert substitutions != null;</span>
    +<span class="fc" id="L186">            return getArrayType(arrayType.getComponentType().accept(this, substitutions));</span>
    +        }
    +
    +        @Override
    +        public TypeMirror visitTypeVariable(TypeVariable typeVariable, @Nullable Substitutions substitutions) {
    +<span class="pc bpc" id="L191" title="2 of 4 branches missed.">            assert substitutions != null;</span>
    +<span class="fc" id="L192">            TypeParameterElement formalTypeParameter = (TypeParameterElement) typeVariable.asElement();</span>
    +<span class="fc" id="L193">            @Nullable TypeVariable freshTypeVariable = substitutions.freshTypeVariables.get(formalTypeParameter);</span>
    +<span class="pc bpc" id="L194" title="1 of 4 branches missed.">            if (freshTypeVariable != null &amp;&amp; formalTypeParameter.asType().equals(typeVariable)) {</span>
    +<span class="fc" id="L195">                return freshTypeVariable;</span>
    +            }
    +
    +<span class="fc" id="L198">            @Nullable TypeMirror substitution = substitutions.map.get(formalTypeParameter);</span>
    +<span class="fc bfc" id="L199" title="All 2 branches covered.">            if (substitution != null) {</span>
    +<span class="fc" id="L200">                return substitution;</span>
    +            }
    +
    +<span class="fc" id="L203">            return getTypeVariable(</span>
    +                formalTypeParameter,
    +<span class="fc" id="L205">                typeVariable.getUpperBound().accept(this, substitutions),</span>
    +<span class="fc" id="L206">                typeVariable.getLowerBound().accept(this, substitutions),</span>
    +<span class="fc" id="L207">                capturedTypeArgument(typeVariable)</span>
    +            );
    +        }
    +
    +        @Override
    +        public TypeMirror visitWildcard(WildcardType wildcardType, @Nullable Substitutions substitutions) {
    +<span class="pc bpc" id="L213" title="2 of 4 branches missed.">            assert substitutions != null;</span>
    +<span class="fc" id="L214">            @Nullable TypeMirror extendsBounds = wildcardType.getExtendsBound();</span>
    +<span class="fc" id="L215">            @Nullable TypeMirror superBound = wildcardType.getSuperBound();</span>
    +
    +<span class="fc bfc" id="L217" title="All 2 branches covered.">            return getWildcardType(</span>
    +                extendsBounds != null
    +<span class="pc bpc" id="L219" title="1 of 2 branches missed.">                    ? extendsBounds.accept(this, substitutions)</span>
    +                    : null,
    +                superBound != null
    +<span class="pc" id="L222">                    ? superBound.accept(this, substitutions)</span>
    +                    : null
    +            );
    +        }
    +
    +        @Override
    +        public TypeMirror visitIntersection(IntersectionType intersectionType, @Nullable Substitutions substitutions) {
    +<span class="pc bpc" id="L229" title="2 of 4 branches missed.">            assert substitutions != null;</span>
    +<span class="fc" id="L230">            return getIntersectionType(substituteInList(intersectionType.getBounds(), substitutions));</span>
    +        }
    +
    +        @Override
    +        protected TypeMirror defaultAction(TypeMirror type, Substitutions substitutions) {
    +<span class="fc" id="L235">            return type;</span>
    +        }
    +    }
    +
    +    /**
    +     * Replaces formal type parameters in the given type.
    +     *
    +     * &lt;p&gt;This method requires that {@code type} does not contain transitive references to itself, unless through
    +     * {@link DeclaredType#asElement()} → {@link TypeElement#asType()} or {@link TypeVariable#asElement()} →
    +     * {@link TypeParameterElement#asType()}. Otherwise, this method might run into an infinite recursion, resulting in
    +     * a {@link StackOverflowError}.
    +     *
    +     * &lt;p&gt;Moreover, this method requires that any type variable transitively referenced by {@code substitutionMap} must
    +     * not contain a transitive reference (through {@link TypeVariable#getUpperBound()} or
    +     * {@link TypeVariable#getLowerBound()}) to itself. Instead, any instance of {@link TypeVariable} (transitively)
    +     * referenced by a value in {@code substitutionMap} must be the result of {@link TypeParameterElement#asType()}.
    +     *
    +     * &lt;p&gt;This method creates a fresh type variable for each formal type parameter that is to be substituted by a type
    +     * variable for the same formal type parameter. For instance, suppose {@code T extends Object} is a formal type
    +     * parameter, and {@code substitutionMap} specifies to replace it with the type variable {@code T extends U&lt;T&gt;}. In
    +     * this case, {@link #createTypeVariable(TypeParameterElement, WildcardType)} will be called with the formal type
    +     * parameter {@code T extends Object} as (first) argument. Once all fresh types have been created,
    +     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} will then be called with {@code U&lt;T&gt;} as
    +     * upper bound, where {@code T} is the fresh type variable {@code T extends U&lt;T&gt;}.
    +     *
    +     * @param type type in which the type parameters will be replaced recursively, guaranteed non-null
    +     * @param substitutionMap mapping from formal type parameters to substituted type, guaranteed non-null
    +     * @return new port type, guaranteed non-null
    +     */
    +    protected TypeMirror substitute(TypeMirror type, Map&lt;TypeParameterElement, ? extends TypeMirror&gt; substitutionMap) {
    +<span class="fc" id="L265">        Objects.requireNonNull(type);</span>
    +<span class="fc" id="L266">        Objects.requireNonNull(substitutionMap);</span>
    +<span class="fc" id="L267">        requireValidType(type);</span>
    +<span class="fc bfc" id="L268" title="All 2 branches covered.">        for (TypeMirror substitutionType: substitutionMap.values()) {</span>
    +<span class="fc" id="L269">            Objects.requireNonNull(substitutionType, &quot;Substitution type cannot be null.&quot;);</span>
    +<span class="fc" id="L270">            requireValidType(substitutionType);</span>
    +<span class="fc" id="L271">        }</span>
    +
    +<span class="fc" id="L273">        Map&lt;TypeParameterElement, TypeVariable&gt; freshTypeVariables = new LinkedHashMap&lt;&gt;();</span>
    +<span class="fc bfc" id="L274" title="All 2 branches covered.">        for (Map.Entry&lt;TypeParameterElement, ? extends TypeMirror&gt; entry: substitutionMap.entrySet()) {</span>
    +<span class="fc" id="L275">            TypeMirror value = entry.getValue();</span>
    +<span class="fc bfc" id="L276" title="All 2 branches covered.">            if (value.getKind() == TypeKind.TYPEVAR) {</span>
    +<span class="fc" id="L277">                TypeParameterElement formalTypeParameter = entry.getKey();</span>
    +<span class="fc" id="L278">                TypeVariable typeVariable = (TypeVariable) value;</span>
    +<span class="pc bpc" id="L279" title="1 of 2 branches missed.">                if (entry.getKey().equals(typeVariable.asElement())) {</span>
    +<span class="pc bpc" id="L280" title="2 of 4 branches missed.">                    assert !freshTypeVariables.containsKey(formalTypeParameter);</span>
    +
    +<span class="fc" id="L282">                    freshTypeVariables.put(</span>
    +                        formalTypeParameter,
    +<span class="fc" id="L284">                        createTypeVariable(formalTypeParameter, capturedTypeArgument(typeVariable))</span>
    +                    );
    +                }
    +            }
    +<span class="fc" id="L288">        }</span>
    +
    +<span class="fc" id="L290">        Substitutions substitutions = new Substitutions(substitutionMap, freshTypeVariables);</span>
    +<span class="fc bfc" id="L291" title="All 2 branches covered.">        for (Map.Entry&lt;TypeParameterElement, TypeVariable&gt; entry: freshTypeVariables.entrySet()) {</span>
    +<span class="fc" id="L292">            TypeVariable substitution = (TypeVariable) substitutionMap.get(entry.getKey());</span>
    +<span class="fc" id="L293">            setTypeVariableBounds(</span>
    +<span class="fc" id="L294">                entry.getValue(),</span>
    +<span class="fc" id="L295">                substitution.getUpperBound().accept(substitutionVisitor, substitutions),</span>
    +<span class="fc" id="L296">                substitution.getLowerBound().accept(substitutionVisitor, substitutions)</span>
    +            );
    +<span class="fc" id="L298">        }</span>
    +
    +<span class="fc" id="L300">        return type.accept(substitutionVisitor, substitutions);</span>
    +    }
    +
    +    /**
    +     * Returns the actual type arguments of a type declaration given a subtype (typically with its own actual type
    +     * arguments).
    +     *
    +     * &lt;p&gt;This method &quot;projects&quot; the actual type arguments of {@code subtype}, as well as all actual type arguments of
    +     * super types in the type hierarchy between {@code typeElement} and {@code subType}, onto the type declaration
    +     * represented by {@code typeElement}.
    +     *
    +     * &lt;p&gt;For example, {@code typeElement} may be the (generic) type declaration {@code Comparable&lt;T&gt;}, and
    +     * {@code subType} may be the (non-generic) type {@link Integer}. The result in this case would be a singleton list
    +     * containing the type {@link Integer}.
    +     *
    +     * &lt;p&gt;More generally, resolution works as follows: First, the shortest inheritance path from {@code subType} to
    +     * {@code typeElement} is found. Note that while Java allows multiple inheritance for interfaces, JLS §8.1.5
    +     * disallows inheriting from the same interface with different type parameters (both directly and transitively).
    +     * Hence, the shortest path contains all information that is necessary to resolve formal type parameters to actual
    +     * parameters. This method then propagates the actual type arguments bottom-up along the inheritance path.
    +     * Note that the inheritance path consists of {@link DeclaredType} instances, and it may consist of generic types,
    +     * non-generic types, and raw types.
    +     *
    +     * &lt;p&gt;If the inheritance path contains a raw type &lt;em&gt;before&lt;/em&gt; the last path element, this method proceeds
    +     * by using the &quot;prototypical&quot; type returned by {@link Element#asType()} instead. Correspondingly, it is possible
    +     * that the returned list may contain type variables from a type declaration along the inheritance path. However, if
    +     * the &lt;em&gt;last&lt;/em&gt; inheritance path element is a raw type, the returned list will be empty. Otherwise, if a
    +     * non-null non-empty {@link List} is returned, it is guaranteed to have the same number of elements as
    +     * {@code typeElement.getTypeParameters()}.
    +     *
    +     * @param typeElement type declaration
    +     * @param subType potential subtype of {@code typeElement}, must be a non-generic type declaration, raw type,
    +     *     generic type declaration, or parameterized type
    +     * @return actual type arguments for the formal parameters of {@code typeElement} (empty list if the &lt;em&gt;last&lt;/em&gt;
    +     *     path element in the inheritance path from {@code subType} to {@code typeElement} is a raw type), or
    +     *     {@code null} if {@code subType} is not a subtype of {@code typeElement}
    +     * @throws IllegalArgumentException if the arguments do not satisfy the constraints mentioned above
    +     */
    +    @Nullable
    +    public final List&lt;? extends TypeMirror&gt; resolveActualTypeArguments(TypeElement typeElement, TypeMirror subType) {
    +<span class="fc" id="L340">        requireValidElement(Objects.requireNonNull(typeElement));</span>
    +<span class="fc" id="L341">        requireValidType(Objects.requireNonNull(subType));</span>
    +
    +<span class="fc bfc" id="L343" title="All 2 branches covered.">        if (subType.getKind() != TypeKind.DECLARED) {</span>
    +<span class="fc" id="L344">            return null;</span>
    +        }
    +
    +<span class="fc" id="L347">        DeclaredType declaredSubType = (DeclaredType) subType;</span>
    +
    +        // getShortestPathToSuperType() will throw an exception if subType does not satisfy the constraints mentioned
    +        // above.
    +<span class="fc" id="L351">        @Nullable List&lt;DeclaredType&gt; path = getShortestPathToSuperType(typeElement, declaredSubType);</span>
    +<span class="fc bfc" id="L352" title="All 2 branches covered.">        if (path == null) {</span>
    +<span class="fc" id="L353">            return null;</span>
    +        }
    +
    +        // Early exit if there is nothing to resolve. However, we must not move this early exit any earlier, because
    +        // we do want to return null if subType is not a subtype of typeElement.
    +<span class="fc bfc" id="L358" title="All 2 branches covered.">        if (typeElement.getTypeParameters().isEmpty()) {</span>
    +<span class="fc" id="L359">            return Collections.emptyList();</span>
    +        }
    +
    +<span class="fc" id="L362">        Iterator&lt;DeclaredType&gt; pathIterator = path.iterator();</span>
    +<span class="fc" id="L363">        DeclaredType current = pathIterator.next();</span>
    +<span class="fc bfc" id="L364" title="All 2 branches covered.">        while (pathIterator.hasNext()) {</span>
    +<span class="fc" id="L365">            TypeElement currentTypeElement = (TypeElement) current.asElement();</span>
    +
    +            // Check whether &quot;current&quot; is a raw type. This may happen in the first loop iteration if subType is a raw
    +            // type, or in subsequent iterations if the type that was previously &quot;current&quot; (during the last iteration
    +            // of the for-loop) derived from a raw type. If yes, use instead the &quot;prototypical&quot; type returned by
    +            // Element#asType().
    +<span class="fc bfc" id="L371" title="All 4 branches covered.">            if (current.getTypeArguments().isEmpty() &amp;&amp; !currentTypeElement.getTypeParameters().isEmpty()) {</span>
    +<span class="fc" id="L372">                current = (DeclaredType) currentTypeElement.asType();</span>
    +            }
    +
    +<span class="fc" id="L375">            List&lt;? extends TypeParameterElement&gt; currentFormalParameters = currentTypeElement.getTypeParameters();</span>
    +<span class="fc" id="L376">            List&lt;? extends TypeMirror&gt; currentActualParameters = current.getTypeArguments();</span>
    +
    +<span class="fc" id="L378">            Map&lt;TypeParameterElement, TypeMirror&gt; currentFormalToActual = new LinkedHashMap&lt;&gt;();</span>
    +<span class="fc bfc" id="L379" title="All 2 branches covered.">            for (int index = 0; index &lt; currentFormalParameters.size(); ++index) {</span>
    +<span class="fc" id="L380">                currentFormalToActual.put(currentFormalParameters.get(index), currentActualParameters.get(index));</span>
    +            }
    +
    +<span class="fc" id="L383">            current = (DeclaredType) substitute(pathIterator.next(), currentFormalToActual);</span>
    +<span class="fc" id="L384">        }</span>
    +<span class="fc" id="L385">        return current.getTypeArguments();</span>
    +    }
    +
    +    /**
    +     * Visitor of a type mirror. Returns whether the visited type mirror is a subtype of the visitor argument (of type
    +     * {@link DeclaredType}).
    +     *
    +     * &lt;p&gt;This visitor is only used within this class and only on &lt;em&gt;valid&lt;/em&gt; {@link TypeMirror} instances. Hence, it
    +     * can be asserted that the visitor parameter is always non-null.
    +     *
    +     * @see #declaredTypeSubtypeVisitor
    +     * @see #requireValidType(TypeMirror)
    +     */
    +<span class="pc bpc" id="L398" title="1 of 2 branches missed.">    private final class DeclaredTypeSubtypeVisitor extends ExtendedTypeKindVisitor7&lt;Boolean, DeclaredType&gt; {</span>
    +<span class="fc" id="L399">        private DeclaredTypeSubtypeVisitor() {</span>
    +<span class="fc" id="L400">            super(false);</span>
    +<span class="fc" id="L401">        }</span>
    +
    +        /**
    +         * Returns whether the first declared type is a subtype of the second declared type.
    +         *
    +         * &lt;p&gt;This method proceeds by computing the actual type arguments when {@code subType} is projected onto the
    +         * type declaration corresponding to {@code superType}. It then tests if all actual type arguments of
    +         * {@code subType} are &lt;em&gt;contained&lt;/em&gt; in those of {@code superType}.
    +         */
    +        @Override
    +        public Boolean visitDeclared(DeclaredType subType, @Nullable DeclaredType superType) {
    +<span class="pc bpc" id="L412" title="2 of 4 branches missed.">            assert superType != null;</span>
    +<span class="fc" id="L413">            DeclaredType actualSubType = subType;</span>
    +
    +            // First test if there subType has at least one wildcard type argument. In that case, we need to perform a
    +            // capture conversion first.
    +            // Note that this is the right place to do capture conversion: JLS §8.1.4 and §9.1.3 state about class types
    +            // and interfaces type listed in the extends or implements clause of a class/interface declaration:
    +            // - &quot;If the ClassType has type arguments, it must denote a well-formed parameterized type (§4.5), and none
    +            // of the type arguments may be wildcard type arguments, or a compile-time error occurs.&quot;
    +            // - &quot;If an InterfaceType has type arguments, it must denote a well-formed parameterized type (§4.5), and
    +            // none of the type arguments may be wildcard type arguments, or a compile-time error occurs.&quot;
    +            // Hence, wildcards do not appear on the &quot;inheritance path&quot; between subType and superType.
    +<span class="fc bfc" id="L424" title="All 2 branches covered.">            for (TypeMirror subTypeArgument: subType.getTypeArguments()) {</span>
    +<span class="fc bfc" id="L425" title="All 2 branches covered.">                if (subTypeArgument.getKind() == TypeKind.WILDCARD) {</span>
    +<span class="fc" id="L426">                    actualSubType = (DeclaredType) capture(subType);</span>
    +<span class="fc" id="L427">                    break;</span>
    +                }
    +<span class="fc" id="L429">            }</span>
    +
    +            // Resolve the actual type parameters of subType when projected onto the superType
    +<span class="fc" id="L432">            TypeElement superTypeDeclaration = (TypeElement) superType.asElement();</span>
    +<span class="fc" id="L433">            @Nullable List&lt;? extends TypeMirror&gt; projectedTypeArguments</span>
    +<span class="fc" id="L434">                = resolveActualTypeArguments(superTypeDeclaration, actualSubType);</span>
    +
    +<span class="fc bfc" id="L436" title="All 2 branches covered.">            if (projectedTypeArguments == null) {</span>
    +                // subType is not a subtype of the type declaration
    +<span class="fc" id="L438">                return false;</span>
    +            }
    +
    +<span class="fc" id="L441">            List&lt;? extends TypeMirror&gt; superTypeArguments = superType.getTypeArguments();</span>
    +<span class="fc bfc" id="L442" title="All 4 branches covered.">            if (projectedTypeArguments.isEmpty() &amp;&amp; !superTypeArguments.isEmpty()) {</span>
    +                // the projection of subType onto superType resulted in a raw type, which is neither a subtype of any
    +                // parametrized type of the generic type declaration of superType, nor the generic type declaration
    +                // itself
    +<span class="fc" id="L446">                return false;</span>
    +            }
    +
    +            // Note that superType could be a raw type, in which case superTypeArguments is empty. In that case, the
    +            // loop would not be executed at all.
    +<span class="fc" id="L451">            Iterator&lt;? extends TypeMirror&gt; projectedTypeArgumentsIterator = projectedTypeArguments.iterator();</span>
    +<span class="fc bfc" id="L452" title="All 2 branches covered.">            for (TypeMirror to: superTypeArguments) {</span>
    +<span class="fc" id="L453">                TypeMirror from = projectedTypeArgumentsIterator.next();</span>
    +<span class="fc bfc" id="L454" title="All 2 branches covered.">                if (!contains(to, from)) {</span>
    +<span class="fc" id="L455">                    return false;</span>
    +                }
    +<span class="fc" id="L457">            }</span>
    +<span class="fc" id="L458">            return true;</span>
    +        }
    +
    +        /**
    +         * Returns whether the array type is a subtype of the declared type.
    +         *
    +         * &lt;p&gt;According to JLS §4.10.3, an array type can only be a subtype of a declared type if the latter represents
    +         * one of {@link Object}, {@link Cloneable}, or {@link Serializable}.
    +         */
    +        @Override
    +        public Boolean visitArray(ArrayType subType, @Nullable DeclaredType superType) {
    +<span class="pc bpc" id="L469" title="2 of 4 branches missed.">            assert superType != null;</span>
    +<span class="fc bfc" id="L470" title="All 2 branches covered.">            return typeMirror(Object.class).equals(superType)</span>
    +<span class="fc bfc" id="L471" title="All 2 branches covered.">                || typeMirror(Cloneable.class).equals(superType)</span>
    +<span class="fc bfc" id="L472" title="All 2 branches covered.">                || typeMirror(Serializable.class).equals(superType);</span>
    +        }
    +
    +        /**
    +         * Returns whether the type variable is a subtype of the declared type.
    +         *
    +         * &lt;p&gt;According to JLS §4.10.2, the direct supertypes of a type variable are the types listed in its bound.
    +         * Hence, this method returns true if {@link TypeVariable#getUpperBound()} is a subtype of {@code superType}.
    +         */
    +        @Override
    +        public Boolean visitTypeVariable(TypeVariable subType, @Nullable DeclaredType superType) {
    +<span class="pc bpc" id="L483" title="2 of 4 branches missed.">            assert superType != null;</span>
    +<span class="fc" id="L484">            return isSubtype(subType.getUpperBound(), superType);</span>
    +        }
    +
    +        /**
    +         * Returns whether the intersection type is a subtype of the declared type.
    +         *
    +         * &lt;p&gt;According to JLS §4.10.2, the direct supertypes of an intersection type {@code T_1 &amp; ... T_n} are
    +         * {@code T_1}, ..., {@code T_n}. Hence, this method returns true if at least one of
    +         * {@link IntersectionType#getBounds()} is a subtype of {@code superType}.
    +         */
    +        @Override
    +        public Boolean visitIntersection(IntersectionType subType, @Nullable DeclaredType superType) {
    +<span class="pc bpc" id="L496" title="2 of 4 branches missed.">            assert superType != null;</span>
    +<span class="fc bfc" id="L497" title="All 2 branches covered.">            for (TypeMirror bound: subType.getBounds()) {</span>
    +<span class="fc bfc" id="L498" title="All 2 branches covered.">                if (isSubtype(bound, superType)) {</span>
    +<span class="fc" id="L499">                    return true;</span>
    +                }
    +<span class="fc" id="L501">            }</span>
    +<span class="fc" id="L502">            return false;</span>
    +        }
    +    }
    +
    +    /**
    +     * Visitor of a type mirror. Returns whether the visited type mirror is a supertype of the visitor argument.
    +     *
    +     * &lt;p&gt;This visitor does not have to deal with the null-type, which has been dealt with before. It has to make a
    +     * decision for {@link ArrayType}, {@link DeclaredType}, {@link PrimitiveType}, and {@link TypeVariable}.
    +     *
    +     * &lt;p&gt;Java 8 introduces {@code IntersectionType}, but this code currently uses Java 7. Moreover, there are other
    +     * types that are currently not supported, such as {@link javax.lang.model.type.UnionType}. Finally,
    +     * {@link WildcardType} is not a type, but only a type argument, so it is not necessary to be dealt with here.
    +     * Likewise, {@link NoType} is not used to model proper types, but only empty bounds, non-existence of interface
    +     * super classes, etc.
    +     *
    +     * &lt;p&gt;This visitor is only used within this class and only on &lt;em&gt;valid&lt;/em&gt; {@link TypeMirror} instances. Hence, it
    +     * can be asserted that the visitor parameter is always non-null.
    +     *
    +     * @see #subtypeVisitor
    +     * @see #requireValidType(TypeMirror)
    +     */
    +<span class="pc bpc" id="L524" title="1 of 2 branches missed.">    private final class SubtypeVisitor extends ExtendedTypeKindVisitor7&lt;Boolean, TypeMirror&gt; {</span>
    +<span class="fc" id="L525">        private SubtypeVisitor() {</span>
    +<span class="fc" id="L526">            super(false);</span>
    +<span class="fc" id="L527">        }</span>
    +
    +        /**
    +         * Returns whether the array type is a super type of the type given as second argument.
    +         *
    +         * &lt;p&gt;According to JLS §4.10.3, array component types are covariant; for instance, {@code Integer[]} is a proper
    +         * subtype of {@code Number[]}. Moreover, all subtypes of an array type are again array types. Hence, this
    +         * method simply reduces the problem to testing if {@code subType} is also an array type and then applying
    +         * {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} to the component types.
    +         */
    +        @Override
    +        public Boolean visitArray(ArrayType superType, @Nullable TypeMirror subType) {
    +<span class="pc bpc" id="L539" title="2 of 4 branches missed.">            assert subType != null;</span>
    +<span class="fc bfc" id="L540" title="All 2 branches covered.">            return subType.getKind() == TypeKind.ARRAY</span>
    +<span class="fc bfc" id="L541" title="All 2 branches covered.">                &amp;&amp; isSubtype(((ArrayType) subType).getComponentType(), superType.getComponentType());</span>
    +        }
    +
    +        /**
    +         * Returns whether the declared type is a super type of the type given as second argument.
    +         *
    +         * &lt;p&gt;This method has {@link DeclaredTypeSubtypeVisitor} visit {@code subType}.
    +         */
    +        @Override
    +        public Boolean visitDeclared(DeclaredType superType, @Nullable TypeMirror subType) {
    +<span class="pc bpc" id="L551" title="2 of 4 branches missed.">            assert subType != null;</span>
    +<span class="fc" id="L552">            return subType.accept(declaredTypeSubtypeVisitor, superType);</span>
    +        }
    +
    +<span class="fc" id="L555">        private final List&lt;TypeKind&gt; numericKindEnumValues = Collections.unmodifiableList(Arrays.asList(</span>
    +            TypeKind.DOUBLE, TypeKind.FLOAT, TypeKind.LONG, TypeKind.INT, TypeKind.SHORT, TypeKind.BYTE
    +        ));
    +<span class="fc" id="L558">        private final int intIndex = numericKindEnumValues.indexOf(TypeKind.INT);</span>
    +
    +        /**
    +         * Returns whether the primitive type is a supertype of the given type.
    +         */
    +        @Override
    +        public Boolean visitPrimitive(PrimitiveType superType, @Nullable TypeMirror subType) {
    +<span class="pc bpc" id="L565" title="2 of 4 branches missed.">            assert subType != null;</span>
    +<span class="fc bfc" id="L566" title="All 2 branches covered.">            if (!subType.getKind().isPrimitive()) {</span>
    +<span class="fc" id="L567">                return false;</span>
    +            }
    +
    +<span class="fc" id="L570">            int superTypeIndex = numericKindEnumValues.indexOf(superType.getKind());</span>
    +<span class="fc" id="L571">            int subTypeIndex = numericKindEnumValues.indexOf(subType.getKind());</span>
    +<span class="pc bpc" id="L572" title="1 of 10 branches missed.">            return (subType.getKind() == TypeKind.CHAR &amp;&amp; 0 &lt;= superTypeIndex &amp;&amp; superTypeIndex &lt;= intIndex)</span>
    +                || (0 &lt;= superTypeIndex &amp;&amp; superTypeIndex &lt;= subTypeIndex);
    +        }
    +
    +        /**
    +         * Returns whether the type variable is a super type of the given type.
    +         *
    +         * &lt;p&gt;A type variable is only a supertype of its lower bound.
    +         */
    +        @Override
    +        public Boolean visitTypeVariable(TypeVariable superType, @Nullable TypeMirror subType) {
    +<span class="pc bpc" id="L583" title="2 of 4 branches missed.">            assert subType != null;</span>
    +<span class="fc" id="L584">            return isSameType(superType.getLowerBound(), subType);</span>
    +        }
    +
    +        /**
    +         * Returns whether the given intersection type is a super type of the given type.
    +         *
    +         * &lt;p&gt;While one might expect that the set of supertypes of an intersection type {@code T_1 &amp; ... &amp; T_n} includes
    +         * the intersection of any (non-empty) subset of {@code T_1}, ..., {@code T_n}, this seems is not specified by
    +         * JLS §4.10 (which only says that &quot;the direct supertypes of an intersection type {@code T_1 &amp; ... &amp; T_n} are
    +         * {@code T_i} (1 ≤ i ≤ n)&quot;). See also issue
    +         * &lt;a href=&quot;https://bugs.openjdk.java.net/browse/JDK-6718388&quot;&gt;JDK-6718388&lt;/a&gt;.
    +         *
    +         * &lt;p&gt;Therefore, an intersection type is only a supertype of itself.
    +         */
    +        @Override
    +        public Boolean visitIntersection(IntersectionType superType, @Nullable TypeMirror subType) {
    +<span class="pc bpc" id="L600" title="2 of 4 branches missed.">            assert subType != null;</span>
    +<span class="fc" id="L601">            return isSameType(superType, subType);</span>
    +        }
    +    }
    +
    +    /**
    +     * Returns whether the first type is a subtype of the second type, as specified by JLS §4.10.
    +     *
    +     * &lt;p&gt;The subtype relationship is transitive and reflexive.
    +     *
    +     * @param t1 the first type
    +     * @param t2 the second type
    +     * @return {@code true} if and only if the first type is a subtype of the second
    +     * @throws NullPointerException if an argument is null
    +     * @throws IllegalArgumentException if given an executable or package type
    +     */
    +    @Override
    +    public final boolean isSubtype(TypeMirror t1, TypeMirror t2) {
    +<span class="fc" id="L618">        requireValidType(Objects.requireNonNull(t1));</span>
    +<span class="fc" id="L619">        requireValidType(Objects.requireNonNull(t2));</span>
    +
    +        // §4.10.2: The direct supertypes of the null type are all reference types other than the null type itself.
    +<span class="fc bfc" id="L622" title="All 4 branches covered.">        if (t1.getKind() == TypeKind.NULL &amp;&amp; REFERENCE_TYPES.contains(t2.getKind())) {</span>
    +<span class="fc" id="L623">            return true;</span>
    +        }
    +
    +<span class="fc" id="L626">        return t2.accept(subtypeVisitor, t1);</span>
    +    }
    +
    +    /**
    +     * Returns whether the first type argument &lt;em&gt;contains&lt;/em&gt; the second type argument, as specified by JLS §4.5.1.
    +     *
    +     * &lt;p&gt;Using the JLS notation, this method returns true if {@code t2 &lt;= t1}. As JLS §4.10 states, &quot;subtyping does not
    +     * extend through parameterized types.&quot; Hence, this method is necessarily different from
    +     * {@link #isSubtype(TypeMirror, TypeMirror)}. In particular, the super-type relationship does not include types
    +     * with covariant type arguments.
    +     *
    +     * @param t1 the first type
    +     * @param t2 the second type
    +     * @return {@code true} if and only if the first type contains the second
    +     * @throws IllegalArgumentException if given an executable or package type
    +     */
    +    @Override
    +    public final boolean contains(TypeMirror t1, TypeMirror t2) {
    +<span class="fc" id="L644">        Objects.requireNonNull(t1);</span>
    +<span class="fc" id="L645">        Objects.requireNonNull(t2);</span>
    +<span class="fc" id="L646">        requireValidType(t1);</span>
    +<span class="fc" id="L647">        requireValidType(t2);</span>
    +
    +        // We need to cover these cases (JLS §4.5.1):
    +        //
    +        // (a) wildcard t2 &lt;= wildcard t1
    +        // 1. ? extends T &lt;= ? extends S if T &lt;: S
    +        // 2. ? extends T &lt;= ?
    +        // 3. ? super T &lt;= ? super S if S &lt;: T
    +        // 4. ? super T &lt;= ?
    +        // 5. ? super T &lt;= ? extends Object
    +        //
    +        // (b) other type t2 &lt;= other type t1
    +        // 1. T &lt;= T
    +        //
    +        // (c) other type t2 &lt;= wildcard t1
    +        // 1. T &lt;= ? extends T
    +        // 2. T &lt;= ? super T
    +
    +<span class="fc bfc" id="L665" title="All 2 branches covered.">        if (t1.getKind() == TypeKind.WILDCARD) {</span>
    +<span class="fc" id="L666">            @Nullable TypeMirror t1ExtendsBound = ((WildcardType) t1).getExtendsBound();</span>
    +<span class="fc" id="L667">            @Nullable TypeMirror t1SuperBound = ((WildcardType) t1).getSuperBound();</span>
    +<span class="fc bfc" id="L668" title="All 2 branches covered.">            boolean t1HasExtendsBound = t1ExtendsBound != null;</span>
    +<span class="fc bfc" id="L669" title="All 2 branches covered.">            boolean t1HasSuperBound = t1SuperBound != null;</span>
    +
    +<span class="fc bfc" id="L671" title="All 2 branches covered.">            if (t2.getKind() == TypeKind.WILDCARD) {</span>
    +                // Handle (a).
    +<span class="fc" id="L673">                @Nullable TypeMirror t2ExtendsBound = ((WildcardType) t2).getExtendsBound();</span>
    +<span class="fc" id="L674">                @Nullable TypeMirror t2SuperBound = ((WildcardType) t2).getSuperBound();</span>
    +
    +<span class="fc bfc" id="L676" title="All 2 branches covered.">                if (t2ExtendsBound != null) {</span>
    +<span class="fc bfc" id="L677" title="All 2 branches covered.">                    if (t1ExtendsBound != null) {</span>
    +                        // (a) 1.
    +<span class="fc" id="L679">                        return isSubtype(t2ExtendsBound, t1ExtendsBound);</span>
    +<span class="fc bfc" id="L680" title="All 2 branches covered.">                    } else if (t1SuperBound == null) {</span>
    +                        // (a) 2.
    +<span class="fc" id="L682">                        return true;</span>
    +                    }
    +                    // Note that &quot;? super S&quot; never contains a type argument of form &quot;? extends T&quot;
    +<span class="fc" id="L685">                    return false;</span>
    +<span class="fc bfc" id="L686" title="All 2 branches covered.">                } else if (t2SuperBound != null) {</span>
    +<span class="fc bfc" id="L687" title="All 2 branches covered.">                    if (t1SuperBound != null) {</span>
    +                        // (a) 3.
    +<span class="fc" id="L689">                        return isSubtype(t1SuperBound, t2SuperBound);</span>
    +                    } else {
    +                        // (a) 4. and 5.: Handle case &quot;? super T &lt;= ?&quot; (always true) or &quot;? super S &lt;= ? extends T&quot; (only
    +                        // if T is Object)
    +<span class="fc bfc" id="L693" title="All 2 branches covered.">                        return t1ExtendsBound == null</span>
    +<span class="fc bfc" id="L694" title="All 2 branches covered.">                            || isSameType(t1ExtendsBound, typeMirror(Object.class));</span>
    +                    }
    +                } else {
    +                    // Handle special case of (a), namely &quot;? &lt;= ? extends T&quot; (only if T is Object), &quot;? &lt;= ? super T&quot;
    +                    // (always false), or &quot;? &lt;= ?&quot; (which is equivalent to &quot;? extends Object &lt;= ? extends Object&quot; and
    +                    // therefore true).
    +<span class="fc bfc" id="L700" title="All 4 branches covered.">                    return t1SuperBound == null &amp;&amp; (</span>
    +<span class="fc bfc" id="L701" title="All 2 branches covered.">                        t1ExtendsBound == null || isSameType(t1ExtendsBound, typeMirror(Object.class))</span>
    +                    );
    +                }
    +            } else {
    +                // Handle (c). Reduce to case (a).
    +<span class="fc bfc" id="L706" title="All 2 branches covered.">                if (t1HasExtendsBound) {</span>
    +                    // (c) 1.
    +<span class="fc" id="L708">                    return contains(t1, getWildcardType(t2, null));</span>
    +<span class="fc bfc" id="L709" title="All 2 branches covered.">                } else if (t1HasSuperBound) {</span>
    +                    // (c) 2.
    +<span class="fc" id="L711">                    return contains(t1, getWildcardType(null, t2));</span>
    +                }
    +                // Combining (c) 1. with (a) 2. or (c) 2. with (a) 4., we immediately have &quot;T &lt;= ?&quot;
    +<span class="fc" id="L714">                return true;</span>
    +            }
    +        } else {
    +            // Handle (b).
    +<span class="fc" id="L718">            return isSameType(t1, t2);</span>
    +        }
    +    }
    +
    +    /**
    +     * Returns the direct super types of the given type declaration, as defined by JLS §4.10.2.
    +     */
    +    private List&lt;DeclaredType&gt; directSupertypesOfTypeDeclaration(TypeElement typeElement) {
    +<span class="fc" id="L726">        TypeMirror superClass = typeElement.getSuperclass();</span>
    +<span class="fc" id="L727">        List&lt;? extends TypeMirror&gt; interfaces = typeElement.getInterfaces();</span>
    +<span class="fc" id="L728">        List&lt;DeclaredType&gt; newSuperTypes = new ArrayList&lt;&gt;(1 + interfaces.size());</span>
    +<span class="fc bfc" id="L729" title="All 2 branches covered.">        if (superClass.getKind() == TypeKind.DECLARED) {</span>
    +<span class="fc" id="L730">            newSuperTypes.add((DeclaredType) superClass);</span>
    +        }
    +<span class="fc bfc" id="L732" title="All 2 branches covered.">        for (TypeMirror superInterface: interfaces) {</span>
    +<span class="fc" id="L733">            newSuperTypes.add((DeclaredType) superInterface);</span>
    +<span class="fc" id="L734">        }</span>
    +<span class="fc bfc" id="L735" title="All 4 branches covered.">        if (typeElement.getKind() == ElementKind.INTERFACE &amp;&amp; interfaces.isEmpty()) {</span>
    +<span class="fc" id="L736">            newSuperTypes.add((DeclaredType) typeMirror(Object.class));</span>
    +        }
    +<span class="fc" id="L738">        return newSuperTypes;</span>
    +    }
    +
    +    /**
    +     * Internal class to keep state for the Dijkstra shortest-path algorithm in
    +     * {@link #getShortestPathToSuperType(TypeElement, DeclaredType)}.
    +     */
    +    private static final class TypeDeclarationVertexState {
    +        private int distance;
    +        private boolean visited;
    +        private final TypeElement typeElement;
    +
    +        /**
    +         * The type as contained in {@code previous.typeDeclaration.getSuperTypes()}.
    +         */
    +        private final DeclaredType declaredType;
    +
    +        @Nullable private TypeDeclarationVertexState previous;
    +
    +        private TypeDeclarationVertexState(int distance, boolean visited, TypeElement typeElement,
    +<span class="fc" id="L758">                DeclaredType declaredType) {</span>
    +<span class="fc" id="L759">            this.distance = distance;</span>
    +<span class="fc" id="L760">            this.visited = visited;</span>
    +<span class="fc" id="L761">            this.typeElement = typeElement;</span>
    +<span class="fc" id="L762">            this.declaredType = declaredType;</span>
    +<span class="fc" id="L763">        }</span>
    +
    +        /**
    +         * Returns the path induced by this node, starting with {@code derived} and ending with {@link #declaredType}.
    +         *
    +         * &lt;p&gt;The path is obtained by following {@link #previous} until {@code null}. Each element in the path (except
    +         * for the first) is the {@link #declaredType} of the current instance.
    +         *
    +         * @param derived the first element in the path
    +         * @return the path induced by this node
    +         */
    +        private List&lt;DeclaredType&gt; toPath(DeclaredType derived) {
    +<span class="fc" id="L775">            DeclaredType[] path = new DeclaredType[distance + 1];</span>
    +<span class="fc" id="L776">            int count = path.length;</span>
    +<span class="fc" id="L777">            TypeDeclarationVertexState pathElement = this;</span>
    +<span class="fc bfc" id="L778" title="All 2 branches covered.">            while (pathElement.previous != null) {</span>
    +<span class="fc" id="L779">                --count;</span>
    +<span class="fc" id="L780">                path[count] = pathElement.declaredType;</span>
    +<span class="fc" id="L781">                pathElement = pathElement.previous;</span>
    +            }
    +<span class="fc" id="L783">            path[0] = derived;</span>
    +<span class="fc" id="L784">            return Arrays.asList(path);</span>
    +        }
    +    }
    +
    +    /**
    +     * Returns the shortest inheritance path between a type declaration and a subtype (starting with
    +     * {@code derived} and ending with {@code base}).
    +     *
    +     * &lt;p&gt;Each element in the returned path is a non-generic type, a raw type, or a parameterized type. The
    +     * {@link DeclaredType} at position {@code i} is always contained in the result of
    +     * {@link #directSupertypesOfTypeDeclaration(TypeElement)} applied to the type declaration of the type at position
    +     * {@code (i - 1)}.
    +     *
    +     * &lt;p&gt;This methods runs a Dijkstra shortest-path algorithm. It relies on {@link TypeElement#equals(Object)}
    +     * being well-defined (two object representing the same type declaration must compare equal). Consequently, if
    +     * {@link DeclaredType} instances have an identity, it must be guaranteed that there are no two instances
    +     * representing the same type declaration.
    +     *
    +     * @param base base type declaration
    +     * @param derived derived type
    +     * @return If there is an inheritance path from {@code derived} to {@code base}, then a {@code List&lt;DeclaredType&gt;}
    +     *     {@code p} such that {@code p.get(0).equals(toGenericType(derived))} and
    +     *     {@code toRawTypeDeclaration(p.get(p.size() - 1)).equals(base)} are {@code true}. Otherwise, {@code null} to
    +     *     indicate that there is no such path.
    +     */
    +    @Nullable
    +    private List&lt;DeclaredType&gt; getShortestPathToSuperType(TypeElement base, DeclaredType derived) {
    +<span class="fc" id="L811">        TypeElement typeElement = (TypeElement) derived.asElement();</span>
    +
    +<span class="fc" id="L813">        Set&lt;TypeElement&gt; boundary = new LinkedHashSet&lt;&gt;();</span>
    +<span class="fc" id="L814">        Map&lt;TypeElement, TypeDeclarationVertexState&gt; dijkstraState = new HashMap&lt;&gt;();</span>
    +
    +        // Distance from derived to itself is 0
    +<span class="fc" id="L817">        dijkstraState.put(typeElement, new TypeDeclarationVertexState(0, false, typeElement, derived));</span>
    +        // Start off with derived
    +<span class="fc" id="L819">        boundary.add(typeElement);</span>
    +
    +        // Invariants:
    +        // - boundary only contains nodes that have *not* been visited
    +        // - For all visited nodes, the shortest path is known
    +<span class="fc bfc" id="L824" title="All 2 branches covered.">        while (!boundary.isEmpty()) {</span>
    +            // shortest := vertex in boundary with smallest distance from typeElement
    +<span class="fc" id="L826">            @Nullable TypeDeclarationVertexState shortest = null;</span>
    +<span class="fc bfc" id="L827" title="All 2 branches covered.">            for (TypeElement currentDeclaration: boundary) {</span>
    +<span class="fc" id="L828">                TypeDeclarationVertexState current = dijkstraState.get(currentDeclaration);</span>
    +<span class="pc bpc" id="L829" title="1 of 4 branches missed.">                if (shortest == null || current.distance &lt; shortest.distance) {</span>
    +<span class="fc" id="L830">                    shortest = current;</span>
    +                }
    +<span class="fc" id="L832">            }</span>
    +            // Since boundary is non-empty, shortest was assigned in the previous loop. Also note that due to the above
    +            // invariant, shortest has not been visited.
    +<span class="pc bpc" id="L835" title="3 of 6 branches missed.">            assert shortest != null &amp;&amp; !shortest.visited;</span>
    +
    +            // Terminate if we found base. Since shortest.distance is non-decreasing over the loop iterations, it is
    +            // impossible to find a shorter path in future iterations.
    +<span class="fc bfc" id="L839" title="All 2 branches covered.">            if (shortest.typeElement.equals(base)) {</span>
    +<span class="fc" id="L840">                return shortest.toPath(derived);</span>
    +            }
    +
    +            // Remove shortest from boundary.
    +<span class="fc" id="L844">            boundary.remove(shortest.typeElement);</span>
    +<span class="fc" id="L845">            shortest.visited = true;</span>
    +
    +<span class="fc bfc" id="L847" title="All 2 branches covered.">            for (DeclaredType superType: directSupertypesOfTypeDeclaration(shortest.typeElement)) {</span>
    +                // A direct super type of a type declaration is either a non-generic type declaration or a raw type (in
    +                // both cases represented as DeclaredType with no actual type parameters) or a parameterized type
    +<span class="fc" id="L850">                TypeElement superDeclaration = (TypeElement) superType.asElement();</span>
    +<span class="fc" id="L851">                @Nullable TypeDeclarationVertexState stats = dijkstraState.get(superDeclaration);</span>
    +
    +<span class="fc bfc" id="L853" title="All 2 branches covered.">                if (stats == null) {</span>
    +<span class="fc" id="L854">                    stats = new TypeDeclarationVertexState(Integer.MAX_VALUE, false, superDeclaration, superType);</span>
    +<span class="fc" id="L855">                    dijkstraState.put(superDeclaration, stats);</span>
    +                }
    +
    +<span class="fc" id="L858">                int alt = shortest.distance + 1;</span>
    +<span class="fc bfc" id="L859" title="All 4 branches covered.">                if (!stats.visited &amp;&amp; alt &lt; stats.distance) {</span>
    +<span class="fc" id="L860">                    stats.distance = alt;</span>
    +<span class="fc" id="L861">                    stats.previous = shortest;</span>
    +<span class="fc" id="L862">                    boundary.add(superDeclaration);</span>
    +                }
    +<span class="fc" id="L864">            }</span>
    +<span class="fc" id="L865">        }</span>
    +<span class="fc" id="L866">        return null;</span>
    +    }
    +
    +    /**
    +     * Visitor of a type mirror. Returns the erasure of the visited type mirror.
    +     *
    +     * @see #erasureVisitor
    +     */
    +<span class="fc" id="L874">    private final class ErasureVisitor extends ExtendedTypeKindVisitor7&lt;TypeMirror, Void&gt; {</span>
    +        @Override
    +        public TypeMirror visitDeclared(DeclaredType declaredType, @Nullable Void ignored) {
    +<span class="fc" id="L877">            TypeMirror originalEnclosingType = declaredType.getEnclosingType();</span>
    +<span class="fc bfc" id="L878" title="All 2 branches covered.">            @Nullable DeclaredType newEnclosingType = originalEnclosingType.getKind() == TypeKind.NONE</span>
    +                ? null
    +<span class="fc" id="L880">                : (DeclaredType) erasure(declaredType.getEnclosingType());</span>
    +<span class="fc" id="L881">            return getDeclaredType(newEnclosingType, (TypeElement) declaredType.asElement());</span>
    +        }
    +
    +        /**
    +         * Returns the array type corresponding to the erasure of the component type.
    +         */
    +        @Override
    +        public TypeMirror visitArray(ArrayType arrayType, @Nullable Void ignored) {
    +<span class="fc" id="L889">            return getArrayType(erasure(arrayType.getComponentType()));</span>
    +        }
    +
    +        /**
    +         * Returns the erasure of the leftmost bound of the given type variable.
    +         *
    +         * &lt;p&gt;The erasure of a type variable is the erasure of its leftmost bound (JLS §4.6). If multiple bounds are
    +         * present, the upper bound is modelled as an intersection type. The erasure of an intersection type is
    +         * guaranteed to have see right form (see {@link #visitIntersection(IntersectionType, Void)}).
    +         */
    +        @Override
    +        public TypeMirror visitTypeVariable(TypeVariable typeVariable, @Nullable Void ignored) {
    +<span class="fc" id="L901">            return erasure(typeVariable.getUpperBound());</span>
    +        }
    +
    +        /**
    +         * Returns the erasure of the leftmost member of the given intersection type.
    +         *
    +         * &lt;p&gt;While JLS §4.6 does not mention intersection types (and thus, strictly speaking, the erasure of an
    +         * intersection type should be the unmodified intersection type itself), this implementation computes the
    +         * erasure of an intersection type as the erasure of its left-most type.
    +         */
    +        @Override
    +        public TypeMirror visitIntersection(IntersectionType intersectionType, @Nullable Void ignored) {
    +<span class="fc" id="L913">            return erasure(intersectionType.getBounds().get(0));</span>
    +        }
    +
    +        /**
    +         * Returns the given type itself.
    +         *
    +         * &lt;p&gt;JLS §4.6 specifies: &quot;The erasure of every other type is the type itself.&quot;
    +         */
    +        @Override
    +        protected TypeMirror defaultAction(TypeMirror type, Void ignored) {
    +<span class="fc" id="L923">            return type;</span>
    +        }
    +    }
    +
    +    /**
    +     * Returns the erasure of a type, as specified by JLS §4.6.
    +     *
    +     * @param type the type to be erased
    +     * @return the erasure of the given type
    +     * @throws IllegalArgumentException if given a package type
    +     */
    +    @Override
    +    public final TypeMirror erasure(TypeMirror type) {
    +<span class="fc" id="L936">        Objects.requireNonNull(type);</span>
    +<span class="fc" id="L937">        requireValidType(type);</span>
    +
    +<span class="fc" id="L939">        return type.accept(erasureVisitor, null);</span>
    +    }
    +
    +    /**
    +     * Returns the element corresponding to a type.
    +     *
    +     * &lt;p&gt;The type may be a {@code DeclaredType} or {@code TypeVariable}. Returns {@code null} if the type is not one
    +     * with a corresponding element.
    +     *
    +     * @param type the type
    +     * @return the element corresponding to the given type
    +     */
    +    @Override
    +    public final Element asElement(TypeMirror type) {
    +<span class="fc" id="L953">        Objects.requireNonNull(type);</span>
    +<span class="fc" id="L954">        requireValidType(type);</span>
    +
    +<span class="fc bfc" id="L956" title="All 2 branches covered.">        if (type.getKind() == TypeKind.DECLARED) {</span>
    +<span class="fc" id="L957">            return ((DeclaredType) type).asElement();</span>
    +<span class="fc bfc" id="L958" title="All 2 branches covered.">        } else if (type.getKind() == TypeKind.TYPEVAR) {</span>
    +<span class="fc" id="L959">            return ((TypeVariable) type).asElement();</span>
    +        } else {
    +<span class="fc" id="L961">            return null;</span>
    +        }
    +    }
    +
    +    /**
    +     * Returns whether the two given type arguments represent the same type.
    +     *
    +     * &lt;p&gt;If either of the arguments to this method represents a wildcard, this method will return false. As a
    +     * consequence, a wildcard is not the same type as itself.
    +     *
    +     * @param t1 the first type
    +     * @param t2 the second type
    +     * @return {@code true} if and only if the two types are the same
    +     */
    +    @Override
    +    public final boolean isSameType(TypeMirror t1, TypeMirror t2) {
    +<span class="fc" id="L977">        requireValidType(Objects.requireNonNull(t1));</span>
    +<span class="fc" id="L978">        requireValidType(Objects.requireNonNull(t2));</span>
    +
    +<span class="fc bfc" id="L980" title="All 4 branches covered.">        return t1.getKind() != TypeKind.WILDCARD &amp;&amp; t1.equals(t2);</span>
    +    }
    +
    +    /**
    +     * Returns the greatest lower bound (glb) of a wildcard extends bound and an upper bound of a type parameter.
    +     *
    +     * &lt;p&gt;This method is only called from {@link #capture(TypeMirror)}. JLS §5.1.10 defines the greatest lower bound
    +     * {@code glb(V_1, ..., V_m)} as {@code V_1 &amp; ... &amp; V_m}. Unfortunately, the specification provides no clarity
    +     * whether intersection types are allowed to be nested. This implementation takes the interpretation that
    +     * intersection types should not be nested. Therefore, the bounds contained in {@code originalUpperBound} are
    +     * unwrapped.
    +     *
    +     * @param wildcardExtendsBound extends bound of the wildcard type argument
    +     * @param originalUpperBound original upper bound of the type parameter
    +     * @return the greatest lower bound
    +     */
    +    private static TypeMirror[] greatestLowerBound(TypeMirror wildcardExtendsBound, TypeMirror originalUpperBound) {
    +<span class="fc" id="L997">        @Nullable TypeMirror[] result = null;</span>
    +<span class="fc bfc" id="L998" title="All 2 branches covered.">        if (originalUpperBound instanceof IntersectionType) {</span>
    +<span class="fc" id="L999">            IntersectionType originalIntersectionBound = (IntersectionType) originalUpperBound;</span>
    +<span class="pc bpc" id="L1000" title="1 of 2 branches missed.">            if (originalIntersectionBound.isIntersectionType()) {</span>
    +<span class="fc" id="L1001">                List&lt;? extends TypeMirror&gt; originalBounds = originalIntersectionBound.getBounds();</span>
    +<span class="fc" id="L1002">                result = new TypeMirror[1 + originalBounds.size()];</span>
    +<span class="fc" id="L1003">                int i = 0;</span>
    +<span class="fc bfc" id="L1004" title="All 2 branches covered.">                for (TypeMirror originalBound: originalBounds) {</span>
    +<span class="fc" id="L1005">                    ++i;</span>
    +<span class="fc" id="L1006">                    result[i] = originalBound;</span>
    +<span class="fc" id="L1007">                }</span>
    +            }
    +        }
    +
    +<span class="fc bfc" id="L1011" title="All 2 branches covered.">        if (result == null) {</span>
    +<span class="fc" id="L1012">            result = new TypeMirror[2];</span>
    +<span class="fc" id="L1013">            result[1] = originalUpperBound;</span>
    +        }
    +
    +<span class="fc" id="L1016">        result[0] = wildcardExtendsBound;</span>
    +<span class="fc" id="L1017">        return result;</span>
    +    }
    +
    +    /**
    +     * Returns the caputure conversion of (just) the given wildcard argument.
    +     *
    +     * &lt;p&gt;This method is only called by {@link #capture(TypeMirror)}.
    +     */
    +    private TypeVariable captureWildcardArgument(WildcardType wildcardArgument, TypeParameterElement typeParameter) {
    +<span class="fc" id="L1026">        TypeVariable originalTypeVariable = (TypeVariable) typeParameter.asType();</span>
    +
    +        // Denoted U_i in JLS 5.1.10
    +<span class="fc" id="L1029">        TypeMirror originalUpperBound = originalTypeVariable.getUpperBound();</span>
    +
    +        // Both of the following are denoted B_i in JLS 5.1.10 (in &quot;? extends B_i&quot; and &quot;? super B_i&quot;, respectively)
    +<span class="fc" id="L1032">        @Nullable TypeMirror wildcardExtendsBound = wildcardArgument.getExtendsBound();</span>
    +<span class="fc" id="L1033">        @Nullable TypeMirror wildcardSuperBound = wildcardArgument.getSuperBound();</span>
    +
    +        TypeMirror newUpperBound;
    +        TypeMirror newLowerBound;
    +
    +        // There exists a capture conversion from a parameterized type G&lt;T_1,...,T_n&gt; (§4.5) to a parameterized type
    +        // G&lt;S_1, ..., S_n&gt;, where, for 1 &lt;= i &lt;= n:
    +<span class="fc bfc" id="L1040" title="All 4 branches covered.">        if (wildcardExtendsBound == null &amp;&amp; wildcardSuperBound == null) {</span>
    +            // If T_i is a wildcard type argument (§4.5.1) of the form ?, then S_i is a fresh type variable whose
    +            // upper bound is U_i[A_1 := S_1, ..., A_n := S_n] and whose lower bound is the null type (§4.1).
    +<span class="fc" id="L1043">            newUpperBound = originalUpperBound;</span>
    +<span class="fc" id="L1044">            newLowerBound = getNullType();</span>
    +<span class="fc bfc" id="L1045" title="All 2 branches covered.">        } else if (wildcardSuperBound == null) {</span>
    +            // If T_i is a wildcard type argument of the form ? extends B_i, then S_i is a fresh type variable whose
    +            // upper bound is glb(B_i, U_i[A_1 := S_1, ..., A_n := S_n]) and whose lower bound is the null type.
    +            //
    +            // glb(V_1, ..., V_m) is defined as V_1 &amp; ... &amp; V_m.
    +            // It is a compile-time error if, for any two classes (not interfaces) V_i and V_j, V_i is not a
    +            // subclass of V_j or vice versa.
    +<span class="fc" id="L1052">            newUpperBound = getIntersectionType(greatestLowerBound(wildcardExtendsBound, originalUpperBound));</span>
    +<span class="fc" id="L1053">            newLowerBound = getNullType();</span>
    +        } else {
    +            // If T_i is a wildcard type argument of the form ? super B_i, then S_i is a fresh type variable whose
    +            // upper bound is U_i[A_1 := S1, ..., A_n := S_n] and whose lower bound is B_i.
    +<span class="pc bpc" id="L1057" title="2 of 4 branches missed.">            assert wildcardExtendsBound == null;</span>
    +
    +<span class="fc" id="L1059">            newUpperBound = originalUpperBound;</span>
    +<span class="fc" id="L1060">            newLowerBound = wildcardSuperBound;</span>
    +        }
    +
    +<span class="fc" id="L1063">        return getTypeVariable(typeParameter, newUpperBound, newLowerBound, wildcardArgument);</span>
    +    }
    +
    +    /**
    +     * Returns the capture conversion of the given type, as specified by JLS §5.1.10.
    +     *
    +     * @param type the type to be converted
    +     * @return the result of applying capture conversion
    +     * @throws IllegalArgumentException if given an executable or package type
    +     */
    +    @Override
    +    public final TypeMirror capture(TypeMirror type) {
    +<span class="fc" id="L1075">        Objects.requireNonNull(type);</span>
    +<span class="fc" id="L1076">        requireValidType(type);</span>
    +
    +        // JLS §5.1.10 states: &quot;Capture conversion on any type other than a parameterized type (§4.5) acts as an
    +        // identity conversion (§5.1.1).&quot;
    +<span class="fc bfc" id="L1080" title="All 2 branches covered.">        if (type.getKind() != TypeKind.DECLARED) {</span>
    +<span class="fc" id="L1081">            return type;</span>
    +        }
    +
    +<span class="fc" id="L1084">        DeclaredType declaredType = (DeclaredType) type;</span>
    +<span class="fc" id="L1085">        List&lt;? extends TypeMirror&gt; typeArguments = declaredType.getTypeArguments();</span>
    +<span class="fc bfc" id="L1086" title="All 2 branches covered.">        if (typeArguments.isEmpty()) {</span>
    +<span class="fc" id="L1087">            return declaredType;</span>
    +        }
    +
    +<span class="fc" id="L1090">        TypeElement typeDeclaration = (TypeElement) declaredType.asElement();</span>
    +<span class="fc" id="L1091">        Iterator&lt;? extends TypeMirror&gt; typeArgumentIterator = typeArguments.iterator();</span>
    +<span class="fc" id="L1092">        Iterator&lt;? extends TypeParameterElement&gt; typeParameterIterator = typeDeclaration.getTypeParameters().iterator();</span>
    +<span class="fc" id="L1093">        TypeMirror[] newArguments = new TypeMirror[typeArguments.size()];</span>
    +<span class="fc" id="L1094">        Map&lt;TypeParameterElement, TypeMirror&gt; substitutions = new LinkedHashMap&lt;&gt;();</span>
    +<span class="fc bfc" id="L1095" title="All 2 branches covered.">        for (int index = 0; index &lt; newArguments.length; ++index) {</span>
    +<span class="fc" id="L1096">            TypeMirror typeArgument = typeArgumentIterator.next();</span>
    +<span class="fc" id="L1097">            TypeParameterElement typeParameter = typeParameterIterator.next();</span>
    +            TypeMirror substitution;
    +
    +<span class="fc bfc" id="L1100" title="All 2 branches covered.">            if (typeArgument.getKind() != TypeKind.WILDCARD) {</span>
    +<span class="fc" id="L1101">                newArguments[index] = typeArgument;</span>
    +<span class="fc" id="L1102">                substitution = typeArgument;</span>
    +            } else {
    +                // For the intermediate declared type (see below), we need the original type variable corresponding to
    +                // the formal type parameter. Only original type variables will be replaced by the substitutionVisitor.
    +<span class="fc" id="L1106">                newArguments[index] = typeParameter.asType();</span>
    +<span class="fc" id="L1107">                substitution = captureWildcardArgument((WildcardType) typeArgument, typeParameter);</span>
    +            }
    +<span class="fc" id="L1109">            substitutions.put(typeParameter, substitution);</span>
    +        }
    +
    +<span class="fc" id="L1112">        TypeMirror enclosingType = declaredType.getEnclosingType();</span>
    +
    +        // Construct intermediateDeclaredType that already has type variables in its argument list instead of wildcard
    +        // arguments.
    +        DeclaredType intermediateDeclaredType;
    +<span class="fc bfc" id="L1117" title="All 2 branches covered.">        if (enclosingType.getKind() == TypeKind.DECLARED) {</span>
    +<span class="fc" id="L1118">            intermediateDeclaredType = getDeclaredType((DeclaredType) enclosingType, typeDeclaration, newArguments);</span>
    +        } else {
    +<span class="fc" id="L1120">            intermediateDeclaredType = getDeclaredType(typeDeclaration, newArguments);</span>
    +        }
    +
    +<span class="fc" id="L1123">        return substitute(intermediateDeclaredType, substitutions);</span>
    +    }
    +
    +    /**
    +     * Returns a new type variable that corresponds to the given formal type parameter and that has the given actual
    +     * upper and lower bounds.
    +     *
    +     * &lt;p&gt;This method is primarily needed during capture conversion, in order to create a fresh type variable that
    +     * overrides the bounds of the formal type parameter it represents. This method is also called during substitution.
    +     * As an example, given a formal type parameter {@code T extends Object} and an upper bound {@code Number}, this
    +     * method returns the type variable {@code T} with upper bound {@code Number}.
    +     *
    +     * &lt;p&gt;This method is not suited for creating type variables with recursive type bounds if these bounds override the
    +     * bounds of the formal type parameter (as only happens during capture conversion). In order to create such a type
    +     * variable, this method may be used to create an interim type variable, where the (overridden) upper and lower
    +     * bounds should only reference the type variable returned by {@link TypeParameterElement#asType()}. As a second
    +     * step, {@link #substitute(TypeMirror, Map)} may then be used to substitute the original type variable with the
    +     * interim type variable. The result will be a fresh type variable with the overridden bounds, and these bounds
    +     * will reference the fresh type variable instead of the original type variable.
    +     *
    +     * @param typeParameter the formal type parameter
    +     * @param upperBound the upper bound for the new type variable, may contain recursive references to
    +     *     {@code typeParameter.asType()}
    +     * @param lowerBound the lower bound for the new type variable, may contain recursive references to
    +     *     {@code typeParameter.asType()}
    +     * @param capturedTypeArgument the wildcard type argument that new type variable captures as part of a capture
    +     *     conversion (§5.1.10 JLS), or {@code null} if the new type variable is not the result of a capture conversion
    +     * @return the new type variable
    +     * @throws NullPointerException if any of the first three arguments is null
    +     */
    +    protected TypeVariable getTypeVariable(TypeParameterElement typeParameter, TypeMirror upperBound,
    +            TypeMirror lowerBound, @Nullable WildcardType capturedTypeArgument) {
    +<span class="fc" id="L1155">        Objects.requireNonNull(typeParameter);</span>
    +<span class="fc" id="L1156">        Objects.requireNonNull(upperBound);</span>
    +<span class="fc" id="L1157">        Objects.requireNonNull(lowerBound);</span>
    +<span class="fc" id="L1158">        requireValidType(upperBound);</span>
    +<span class="fc" id="L1159">        requireValidType(lowerBound);</span>
    +<span class="fc" id="L1160">        requireValidType(capturedTypeArgument);</span>
    +
    +<span class="fc" id="L1162">        TypeVariable typeVariable = createTypeVariable(typeParameter, capturedTypeArgument);</span>
    +<span class="fc" id="L1163">        setTypeVariableBounds(typeVariable, upperBound, lowerBound);</span>
    +<span class="fc" id="L1164">        return typeVariable;</span>
    +    }
    +
    +    /**
    +     * Creates a new &lt;em&gt;unfinished&lt;/em&gt; type variable for the given formal parameter.
    +     *
    +     * &lt;p&gt;Whenever this method is called within this class, the returned type variable is guaranteed to be passed to
    +     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} before being used as a {@link TypeVariable}
    +     * instance. That is, the returned type variable is considered to be under construction until being passed to
    +     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)}, and only after that method call, the type
    +     * variable will have to satisfy the contract specified by interface {@link TypeVariable} and its super-interfaces.
    +     *
    +     * &lt;p&gt;Before {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} is called on the returned
    +     * {@link TypeVariable}, calling either {@link TypeVariable#getUpperBound()} or {@link TypeVariable#getLowerBound()}
    +     * must trigger an {@link IllegalStateException}.
    +     *
    +     * &lt;p&gt;Note that the previous paragraph does not guarantee that
    +     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} is always called on the newly returned
    +     * type-variable instance. If any exception occurs before the new type-variable could be used, then
    +     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} may not be called (even if the exception is
    +     * unrelated to the construction of the new type-variable instance).
    +     *
    +     * &lt;p&gt;The {@link TypeVariable} interface does not provide access to captured wildcard type arguments. It can be
    +     * retrieved by calling {@link #capturedTypeArgument(TypeVariable)} instead.
    +     *
    +     * @param typeParameter the formal type parameter
    +     * @param capturedTypeArgument the wildcard type argument that new type variable captures as part of a capture
    +     *     conversion (§5.1.10 JLS), or {@code null} if the new type variable is not the result of a capture conversion
    +     * @return new unfinished type variable for the given formal parameter, which may not yet satisfy the contracts
    +     *     of {@link TypeVariable}
    +     * @see #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)
    +     * @see #capturedTypeArgument(TypeVariable)
    +     * @throws NullPointerException if {@code typeParameter} is null
    +     */
    +    protected abstract TypeVariable createTypeVariable(TypeParameterElement typeParameter,
    +        @Nullable WildcardType capturedTypeArgument);
    +
    +    /**
    +     * Sets the bounds of a type variable previously returned by
    +     * {@link #createTypeVariable(TypeParameterElement, WildcardType)}.
    +     *
    +     * &lt;p&gt;Before an (unfinished) type-variable instance returned by
    +     * {@link #createTypeVariable(TypeParameterElement, WildcardType)} is used by this class, this method is guaranteed
    +     * to be called exactly once.
    +     *
    +     * &lt;p&gt;Implementations that create effectively immutable {@link TypeMirror} instances may use this method to &quot;freeze&quot;
    +     * the given type-variable instance.
    +     *
    +     * @param typeVariable type variable previously returned by
    +     *     {@link #createTypeVariable(TypeParameterElement, WildcardType)}
    +     * @param upperBound Upper bound for the given type variable. If no explicit upper bound is used, a
    +     *     {@link DeclaredType} representing {@link Object} will be passed.
    +     * @param lowerBound Lower bound for the given type variable. This may a {@link NullType} instance, unless capture
    +     *     conversion produced a type variable with a non-trivial lower bound.
    +     * @see #createTypeVariable(TypeParameterElement, WildcardType)
    +     */
    +    protected abstract void setTypeVariableBounds(TypeVariable typeVariable, TypeMirror upperBound,
    +        TypeMirror lowerBound);
    +
    +    /**
    +     * Returns the captured wildcard type argument of the given type variable, or null if the given type variable is not
    +     * the result of a capture conversion.
    +     *
    +     * &lt;p&gt;This method returns the wildcard type argument that was previously passed to
    +     * {@link #createTypeVariable(TypeParameterElement, WildcardType)}.
    +     *
    +     * @param typeVariable the type variable that may be the result of a capture conversion
    +     * @return the captured wildcard type argument, or null if not applicable
    +     */
    +    @Nullable
    +    protected abstract WildcardType capturedTypeArgument(TypeVariable typeVariable);
    +
    +    /**
    +     * Returns a new intersection type. At least one bounds needs to be given.
    +     *
    +     * @param bounds the bounds of the new intersection type
    +     * @return the new intersection type
    +     * @throws IllegalArgumentException if the given array is empty
    +     */
    +    public abstract IntersectionType getIntersectionType(TypeMirror... bounds);
    +
    +    /**
    +     * Visitor of {@link TypeMirror} instances that appends the {@link String} representation to the
    +     * {@link StringBuilder} instance passed as visitor argument.
    +     *
    +     * &lt;p&gt;This visitor is only used within this class and only on &lt;em&gt;valid&lt;/em&gt; {@link TypeMirror} instances. Hence, it
    +     * can be asserted that the visitor parameter is always non-null.
    +     *
    +     * @see #requireValidType(TypeMirror)
    +     */
    +<span class="pc bpc" id="L1254" title="1 of 2 branches missed.">    private final class ToStringVisitor extends ExtendedTypeKindVisitor7&lt;Void, StringBuilder&gt; {</span>
    +        @Override
    +        public Void visitPrimitive(PrimitiveType primitiveType, @Nullable StringBuilder stringBuilder) {
    +<span class="pc bpc" id="L1257" title="2 of 4 branches missed.">            assert stringBuilder != null;</span>
    +<span class="fc" id="L1258">            stringBuilder.append(primitiveType.getKind().toString().toLowerCase());</span>
    +<span class="fc" id="L1259">            return null;</span>
    +        }
    +
    +        @Override
    +        public Void visitNull(NullType nullType, @Nullable StringBuilder stringBuilder) {
    +<span class="pc bpc" id="L1264" title="2 of 4 branches missed.">            assert stringBuilder != null;</span>
    +<span class="fc" id="L1265">            stringBuilder.append(&quot;null&quot;);</span>
    +<span class="fc" id="L1266">            return null;</span>
    +        }
    +
    +        @Override
    +        public Void visitNoType(NoType noType, @Nullable StringBuilder stringBuilder) {
    +<span class="pc bpc" id="L1271" title="2 of 4 branches missed.">            assert stringBuilder != null;</span>
    +<span class="fc" id="L1272">            stringBuilder.append(noType.getKind().toString().toLowerCase());</span>
    +<span class="fc" id="L1273">            return null;</span>
    +        }
    +
    +        @Override
    +        public Void visitDeclared(DeclaredType declaredType, @Nullable StringBuilder stringBuilder) {
    +<span class="pc bpc" id="L1278" title="2 of 4 branches missed.">            assert stringBuilder != null;</span>
    +<span class="fc" id="L1279">            TypeMirror enclosingType = declaredType.getEnclosingType();</span>
    +<span class="fc" id="L1280">            TypeElement typeElement = (TypeElement) declaredType.asElement();</span>
    +<span class="fc bfc" id="L1281" title="All 2 branches covered.">            if (enclosingType.getKind() == TypeKind.DECLARED) {</span>
    +<span class="fc" id="L1282">                visitDeclared((DeclaredType) enclosingType, stringBuilder);</span>
    +<span class="fc" id="L1283">                stringBuilder.append('.').append(typeElement.getSimpleName());</span>
    +            } else {
    +<span class="fc" id="L1285">                stringBuilder.append(typeElement.getQualifiedName());</span>
    +            }
    +
    +<span class="fc" id="L1288">            List&lt;? extends TypeMirror&gt; typeArguments = declaredType.getTypeArguments();</span>
    +<span class="fc bfc" id="L1289" title="All 2 branches covered.">            if (!typeArguments.isEmpty()) {</span>
    +<span class="fc" id="L1290">                stringBuilder.append('&lt;');</span>
    +<span class="fc" id="L1291">                appendList(stringBuilder, typeArguments, &quot;, &quot;);</span>
    +<span class="fc" id="L1292">                stringBuilder.append('&gt;');</span>
    +            }
    +<span class="fc" id="L1294">            return null;</span>
    +        }
    +
    +        @Override
    +        public Void visitArray(ArrayType arrayType, @Nullable StringBuilder stringBuilder) {
    +<span class="pc bpc" id="L1299" title="2 of 4 branches missed.">            assert stringBuilder != null;</span>
    +<span class="fc" id="L1300">            arrayType.getComponentType().accept(this, stringBuilder);</span>
    +<span class="fc" id="L1301">            stringBuilder.append(&quot;[]&quot;);</span>
    +<span class="fc" id="L1302">            return null;</span>
    +        }
    +
    +        @Override
    +        public Void visitTypeVariable(TypeVariable typeVariable, @Nullable StringBuilder stringBuilder) {
    +<span class="pc bpc" id="L1307" title="2 of 4 branches missed.">            assert stringBuilder != null;</span>
    +<span class="fc" id="L1308">            @Nullable WildcardType capturedTypeArgument = capturedTypeArgument(typeVariable);</span>
    +<span class="fc bfc" id="L1309" title="All 2 branches covered.">            if (capturedTypeArgument != null) {</span>
    +<span class="fc" id="L1310">                stringBuilder.append(&quot;capture&lt;&quot;);</span>
    +<span class="fc" id="L1311">                capturedTypeArgument.accept(this, stringBuilder);</span>
    +<span class="fc" id="L1312">                stringBuilder.append('&gt;');</span>
    +            } else {
    +<span class="fc" id="L1314">                stringBuilder.append(typeVariable.asElement().getSimpleName());</span>
    +            }
    +<span class="fc" id="L1316">            return null;</span>
    +        }
    +
    +        @Override
    +        public Void visitWildcard(WildcardType wildcardTypeArgument, @Nullable StringBuilder stringBuilder) {
    +<span class="pc bpc" id="L1321" title="2 of 4 branches missed.">            assert stringBuilder != null;</span>
    +<span class="fc" id="L1322">            stringBuilder.append('?');</span>
    +<span class="fc" id="L1323">            @Nullable TypeMirror extendsBound = wildcardTypeArgument.getExtendsBound();</span>
    +<span class="fc bfc" id="L1324" title="All 2 branches covered.">            if (extendsBound != null) {</span>
    +<span class="fc" id="L1325">                stringBuilder.append(&quot; extends &quot;);</span>
    +<span class="fc" id="L1326">                extendsBound.accept(this, stringBuilder);</span>
    +            }
    +<span class="fc" id="L1328">            @Nullable TypeMirror superBound = wildcardTypeArgument.getSuperBound();</span>
    +<span class="fc bfc" id="L1329" title="All 2 branches covered.">            if (superBound != null) {</span>
    +<span class="fc" id="L1330">                stringBuilder.append(&quot; super &quot;);</span>
    +<span class="fc" id="L1331">                superBound.accept(this, stringBuilder);</span>
    +            }
    +<span class="fc" id="L1333">            return null;</span>
    +        }
    +
    +        @Override
    +        public Void visitIntersection(IntersectionType intersectionType, @Nullable StringBuilder stringBuilder) {
    +<span class="pc bpc" id="L1338" title="2 of 4 branches missed.">            assert stringBuilder != null;</span>
    +<span class="fc" id="L1339">            appendList(stringBuilder, intersectionType.getBounds(), &quot; &amp; &quot;);</span>
    +<span class="fc" id="L1340">            return null;</span>
    +        }
    +
    +        private void appendList(StringBuilder stringBuilder, List&lt;? extends TypeMirror&gt; types, String glue) {
    +<span class="pc bpc" id="L1344" title="2 of 4 branches missed.">            assert !types.isEmpty();</span>
    +
    +<span class="fc" id="L1346">            boolean first = true;</span>
    +<span class="fc bfc" id="L1347" title="All 2 branches covered.">            for (TypeMirror type: types) {</span>
    +<span class="fc bfc" id="L1348" title="All 2 branches covered.">                if (first) {</span>
    +<span class="fc" id="L1349">                    first = false;</span>
    +                } else {
    +<span class="fc" id="L1351">                    stringBuilder.append(glue);</span>
    +                }
    +<span class="fc" id="L1353">                type.accept(this, stringBuilder);</span>
    +<span class="fc" id="L1354">            }</span>
    +<span class="fc" id="L1355">        }</span>
    +    }
    +
    +    /**
    +     * Returns the canonical string representation of the given type.
    +     *
    +     * @param type type
    +     * @return canonical string representation of the given type
    +     */
    +    public final String toString(TypeMirror type) {
    +<span class="fc" id="L1365">        requireValidType(Objects.requireNonNull(type));</span>
    +
    +<span class="fc" id="L1367">        StringBuilder stringBuilder = new StringBuilder(DEFAULT_STRING_BUILDER_SIZE);</span>
    +<span class="fc" id="L1368">        type.accept(toStringVisitor, stringBuilder);</span>
    +<span class="fc" id="L1369">        return stringBuilder.toString();</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/ExtendedTypeKindVisitor7.html b/jacoco/net.florianschoppmann.java.type/ExtendedTypeKindVisitor7.html
    new file mode 100644
    index 0000000..5915ffb
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/ExtendedTypeKindVisitor7.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>ExtendedTypeKindVisitor7</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.html" class="el_package">net.florianschoppmann.java.type</a> &gt; <span class="el_class">ExtendedTypeKindVisitor7</span></div><h1>ExtendedTypeKindVisitor7</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 40</td><td class="ctr2">100%</td><td class="bar">0 of 4</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">7</td><td class="ctr1">0</td><td class="ctr2">10</td><td class="ctr1">0</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a4"><a href="ExtendedTypeKindVisitor7.java.html#L57" class="el_method">visitUnknown(TypeMirror, Object)</a></td><td class="bar" id="b0"><img src="../.resources/greenbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../.resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="ExtendedTypeKindVisitor7.java.html#L79" class="el_method">visitOther(TypeMirror, Object)</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="34" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="ExtendedTypeKindVisitor7.java.html#L91" class="el_method">visitIntersection(IntersectionType, Object)</a></td><td class="bar" id="b2"><img src="../.resources/greenbar.gif" width="28" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="ExtendedTypeKindVisitor7.java.html#L30" class="el_method">ExtendedTypeKindVisitor7()</a></td><td class="bar" id="b3"><img src="../.resources/greenbar.gif" width="22" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="ExtendedTypeKindVisitor7.java.html#L39" class="el_method">ExtendedTypeKindVisitor7(Object)</a></td><td class="bar" id="b4"><img src="../.resources/greenbar.gif" width="22" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/ExtendedTypeKindVisitor7.java.html b/jacoco/net.florianschoppmann.java.type/ExtendedTypeKindVisitor7.java.html
    new file mode 100644
    index 0000000..fcbdacc
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/ExtendedTypeKindVisitor7.java.html
    @@ -0,0 +1,94 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>ExtendedTypeKindVisitor7.java</title><link rel="stylesheet" href="../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <a href="index.source.html" class="el_package">net.florianschoppmann.java.type</a> &gt; <span class="el_source">ExtendedTypeKindVisitor7.java</span></div><h1>ExtendedTypeKindVisitor7.java</h1><pre class="source lang-java linenums">package net.florianschoppmann.java.type;
    +
    +import javax.annotation.Nullable;
    +import javax.annotation.processing.SupportedSourceVersion;
    +import javax.lang.model.type.TypeMirror;
    +import javax.lang.model.type.UnknownTypeException;
    +import javax.lang.model.util.TypeKindVisitor7;
    +import java.util.Objects;
    +
    +import static javax.lang.model.SourceVersion.RELEASE_7;
    +
    +/**
    + * A visitor of types that supports {@link IntersectionType}, but otherwise behaves as {@link TypeKindVisitor7}.
    + *
    + * &lt;p&gt;This visitor provides a new method {@link #visitIntersection(IntersectionType, Object)} in order to visit
    + * instances of {@link IntersectionType}. At some time in the future, when Java 7 compatibility is no longer
    + * required, {@link IntersectionType} and this class will be removed and replaced by their Java 8 equivalents.
    + *
    + * @param &lt;R&gt; The return type of this visitor's methods. Use {@link Void} for visitors that do not need to return
    + *     results.
    + * @param &lt;P&gt; The type of the additional parameter to this visitor's methods. Use {@code Void} for visitors that do
    + *     not need an additional parameter.
    + */
    +@SupportedSourceVersion(RELEASE_7)
    +public class ExtendedTypeKindVisitor7&lt;R, P&gt; extends TypeKindVisitor7&lt;R, P&gt; {
    +    /**
    +     * Constructor for concrete subclasses to call; uses {@code null} for the default value.
    +     */
    +    protected ExtendedTypeKindVisitor7() {
    +<span class="fc" id="L30">        super(null);</span>
    +<span class="fc" id="L31">    }</span>
    +
    +    /**
    +     * Constructor for concrete subclasses to call; uses the argument for the default value.
    +     *
    +     * @param defaultValue the value to assign to {@link #DEFAULT_VALUE}
    +     */
    +    protected ExtendedTypeKindVisitor7(R defaultValue) {
    +<span class="fc" id="L39">        super(defaultValue);</span>
    +<span class="fc" id="L40">    }</span>
    +
    +    /**
    +     * Visits an unknown kind of type or an {@link IntersectionType}, which did not exist in the {@link TypeMirror}
    +     * hierarchy of Java 7.
    +     *
    +     * &lt;p&gt;This method is final. Use {@link #visitOther(TypeMirror, Object)} to override the default behavior when
    +     * visiting an unknown type.
    +     *
    +     * @param typeMirror the type to visit
    +     * @param parameter a visitor-specified parameter
    +     * @return a visitor-specified result
    +     * @throws UnknownTypeException a visitor implementation may optionally throw this exception
    +     */
    +    @Override
    +    @Nullable
    +    public final R visitUnknown(TypeMirror typeMirror, @Nullable P parameter) {
    +<span class="fc" id="L57">        Objects.requireNonNull(typeMirror);</span>
    +<span class="fc bfc" id="L58" title="All 4 branches covered.">        if (typeMirror instanceof IntersectionType &amp;&amp; ((IntersectionType) typeMirror).isIntersectionType()) {</span>
    +<span class="fc" id="L59">            return visitIntersection((IntersectionType) typeMirror, parameter);</span>
    +        } else {
    +<span class="fc" id="L61">            return visitOther(typeMirror, parameter);</span>
    +        }
    +    }
    +
    +    /**
    +     * Visits an unknown kind of type. This can occur if the language evolves and new kinds of types are added to the
    +     * {@link TypeMirror} hierarchy.
    +     *
    +     * &lt;p&gt;The default implementation of this method in {@code TypeKindVisitor7WithIntersectionType} will always throw
    +     * {@link UnknownTypeException}. This behavior is not required of a subclass.
    +     *
    +     * @param typeMirror the type to visit
    +     * @param parameter a visitor-specified parameter
    +     * @return a visitor-specified result
    +     * @throws UnknownTypeException a visitor implementation may optionally throw this exception
    +     */
    +    @Nullable
    +    public R visitOther(TypeMirror typeMirror, @Nullable P parameter) {
    +<span class="fc" id="L79">        throw new UnknownTypeException(typeMirror, parameter);</span>
    +    }
    +
    +    /**
    +     * Visits an intersection type by calling {@link #defaultAction(TypeMirror, Object)}.
    +     *
    +     * @param intersectionType the intersection type to visit
    +     * @param parameter a visitor-specified parameter
    +     * @return the result of {@code defaultAction}
    +     */
    +    @Nullable
    +    public R visitIntersection(IntersectionType intersectionType, @Nullable P parameter) {
    +<span class="fc" id="L91">        return defaultAction(intersectionType, parameter);</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/index.html b/jacoco/net.florianschoppmann.java.type/index.html
    new file mode 100644
    index 0000000..a9a6e30
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>net.florianschoppmann.java.type</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <span class="el_package">net.florianschoppmann.java.type</span></div><h1>net.florianschoppmann.java.type</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">120 of 2,016</td><td class="ctr2">94%</td><td class="bar">64 of 312</td><td class="ctr2">79%</td><td class="ctr1">64</td><td class="ctr2">220</td><td class="ctr1">0</td><td class="ctr2">416</td><td class="ctr1">0</td><td class="ctr2">64</td><td class="ctr1">0</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a6"><a href="AbstractTypes$ToStringVisitor.html" class="el_class">AbstractTypes.ToStringVisitor</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="4" height="10" title="38" alt="38"/><img src="../.resources/greenbar.gif" width="27" height="10" title="235" alt="235"/></td><td class="ctr2" id="c8">86%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="16" height="10" title="19" alt="19"/><img src="../.resources/greenbar.gif" width="29" height="10" title="33" alt="33"/></td><td class="ctr2" id="e7">63%</td><td class="ctr1" id="f0">19</td><td class="ctr2" id="g1">37</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i1">58</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k1">11</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a4"><a href="AbstractTypes$SubstitutionVisitor.html" class="el_class">AbstractTypes.SubstitutionVisitor</a></td><td class="bar" id="b1"><img src="../.resources/redbar.gif" width="3" height="10" title="28" alt="28"/><img src="../.resources/greenbar.gif" width="21" height="10" title="184" alt="184"/></td><td class="ctr2" id="c7">87%</td><td class="bar" id="d1"><img src="../.resources/redbar.gif" width="11" height="10" title="13" alt="13"/><img src="../.resources/greenbar.gif" width="20" height="10" title="23" alt="23"/></td><td class="ctr2" id="e6">64%</td><td class="ctr1" id="f1">13</td><td class="ctr2" id="g2">27</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i2">38</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k2">9</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a5"><a href="AbstractTypes$SubtypeVisitor.html" class="el_class">AbstractTypes.SubtypeVisitor</a></td><td class="bar" id="b2"><img src="../.resources/redbar.gif" width="2" height="10" title="22" alt="22"/><img src="../.resources/greenbar.gif" width="17" height="10" title="152" alt="152"/></td><td class="ctr2" id="c6">87%</td><td class="bar" id="d2"><img src="../.resources/redbar.gif" width="10" height="10" title="12" alt="12"/><img src="../.resources/greenbar.gif" width="22" height="10" title="26" alt="26"/></td><td class="ctr2" id="e5">68%</td><td class="ctr1" id="f2">12</td><td class="ctr2" id="g4">26</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i4">21</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k3">7</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a1"><a href="AbstractTypes$DeclaredTypeSubtypeVisitor.html" class="el_class">AbstractTypes.DeclaredTypeSubtypeVisitor</a></td><td class="bar" id="b3"><img src="../.resources/redbar.gif" width="2" height="10" title="18" alt="18"/><img src="../.resources/greenbar.gif" width="20" height="10" title="170" alt="170"/></td><td class="ctr2" id="c5">90%</td><td class="bar" id="d4"><img src="../.resources/redbar.gif" width="7" height="10" title="9" alt="9"/><img src="../.resources/greenbar.gif" width="29" height="10" title="33" alt="33"/></td><td class="ctr2" id="e4">79%</td><td class="ctr1" id="f4">9</td><td class="ctr2" id="g3">27</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">38</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k4">6</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a0"><a href="AbstractTypes.html" class="el_class">AbstractTypes</a></td><td class="bar" id="b4"><img src="../.resources/redbar.gif" width="1" height="10" title="14" alt="14"/><img src="../.resources/greenbar.gif" width="118" height="10" title="1,002" alt="1,002"/></td><td class="ctr2" id="c4">99%</td><td class="bar" id="d3"><img src="../.resources/redbar.gif" width="9" height="10" title="11" alt="11"/><img src="../.resources/greenbar.gif" width="110" height="10" title="125" alt="125"/></td><td class="ctr2" id="e3">92%</td><td class="ctr1" id="f3">11</td><td class="ctr2" id="g0">85</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i0">224</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k0">17</td><td class="ctr1" id="l4">0</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a2"><a href="AbstractTypes$ErasureVisitor.html" class="el_class">AbstractTypes.ErasureVisitor</a></td><td class="bar" id="b5"><img src="../.resources/greenbar.gif" width="6" height="10" title="58" alt="58"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d6"><img src="../.resources/greenbar.gif" width="1" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">7</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i7">9</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">6</td><td class="ctr1" id="l5">0</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a7"><a href="AbstractTypes$TypeDeclarationVertexState.html" class="el_class">AbstractTypes.TypeDeclarationVertexState</a></td><td class="bar" id="b6"><img src="../.resources/greenbar.gif" width="5" height="10" title="46" alt="46"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d7"><img src="../.resources/greenbar.gif" width="1" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i5">15</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k7">2</td><td class="ctr1" id="l6">0</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a8"><a href="ExtendedTypeKindVisitor7.html" class="el_class">ExtendedTypeKindVisitor7</a></td><td class="bar" id="b7"><img src="../.resources/greenbar.gif" width="4" height="10" title="40" alt="40"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d5"><img src="../.resources/greenbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g6">7</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i6">10</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k6">5</td><td class="ctr1" id="l7">0</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a3"><a href="AbstractTypes$Substitutions.html" class="el_class">AbstractTypes.Substitutions</a></td><td class="bar" id="b8"><img src="../.resources/greenbar.gif" width="1" height="10" title="9" alt="9"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">4</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td><td class="ctr1" id="l8">0</td><td class="ctr2" id="m8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/jacoco/net.florianschoppmann.java.type/index.source.html b/jacoco/net.florianschoppmann.java.type/index.source.html
    new file mode 100644
    index 0000000..04826a2
    --- /dev/null
    +++ b/jacoco/net.florianschoppmann.java.type/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>net.florianschoppmann.java.type</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Java Types</a> &gt; <span class="el_package">net.florianschoppmann.java.type</span></div><h1>net.florianschoppmann.java.type</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">120 of 2,016</td><td class="ctr2">94%</td><td class="bar">64 of 312</td><td class="ctr2">79%</td><td class="ctr1">64</td><td class="ctr2">220</td><td class="ctr1">0</td><td class="ctr2">416</td><td class="ctr1">0</td><td class="ctr2">64</td><td class="ctr1">0</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a0"><a href="AbstractTypes.java.html" class="el_source">AbstractTypes.java</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="7" height="10" title="120" alt="120"/><img src="../.resources/greenbar.gif" width="112" height="10" title="1,856" alt="1,856"/></td><td class="ctr2" id="c1">94%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="24" height="10" title="64" alt="64"/><img src="../.resources/greenbar.gif" width="95" height="10" title="244" alt="244"/></td><td class="ctr2" id="e1">79%</td><td class="ctr1" id="f0">64</td><td class="ctr2" id="g0">213</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">406</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">59</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">8</td></tr><tr><td id="a1"><a href="ExtendedTypeKindVisitor7.java.html" class="el_source">ExtendedTypeKindVisitor7.java</a></td><td class="bar" id="b1"><img src="../.resources/greenbar.gif" width="2" height="10" title="40" alt="40"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"><img src="../.resources/greenbar.gif" width="1" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">7</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">10</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">5</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.4.201502262128</span></div></body></html>
    \ No newline at end of file
    diff --git a/license.html b/license.html
    new file mode 100644
    index 0000000..ddd57e4
    --- /dev/null
    +++ b/license.html
    @@ -0,0 +1,156 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<!-- Generated by Apache Maven Doxia Site Renderer 1.4 at 2015-05-25 -->
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    +    <title>Java Types - Project License</title>
    +    <style type="text/css" media="all">
    +      @import url("./css/maven-base.css");
    +      @import url("./css/maven-theme.css");
    +      @import url("./css/site.css");
    +    </style>
    +    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
    +    <meta name="Date-Revision-yyyymmdd" content="20150525" />
    +    <meta http-equiv="Content-Language" content="en" />
    +        
    +        </head>
    +  <body class="composite">
    +    <div id="banner">
    +                    <div id="bannerLeft">
    +                Java Types
    +                </div>
    +                    <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="breadcrumbs">
    +            
    +                    
    +                <div class="xleft">
    +        <span id="publishDate">Last Published: 2015-05-25</span>
    +                  &nbsp;| <span id="projectVersion">Version: 1.0.1</span>
    +                      </div>
    +            <div class="xright">                    <a href="./" title="Java Types">Java Types</a>
    +              
    +                    
    +      </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="leftColumn">
    +      <div id="navcolumn">
    +             
    +                    
    +                                          <h5>Project Documentation</h5>
    +                  <ul>
    +                                                                                                                                                                                                                                                                                                      <li class="expanded">
    +                          <a href="project-info.html" title="Project Information">Project Information</a>
    +                    <ul>
    +                      <li class="none">
    +                          <a href="integration.html" title="Continuous Integration">Continuous Integration</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependencies.html" title="Dependencies">Dependencies</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-convergence.html" title="Dependency Convergence">Dependency Convergence</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-info.html" title="Dependency Information">Dependency Information</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="distribution-management.html" title="Distribution Management">Distribution Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="index.html" title="About">About</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
    +            </li>
    +                      <li class="none">
    +            <strong>Project License</strong>
    +          </li>
    +                      <li class="none">
    +                          <a href="plugin-management.html" title="Plugin Management">Plugin Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="plugins.html" title="Project Plugins">Project Plugins</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="team-list.html" title="Project Team">Project Team</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="source-repository.html" title="Source Repository">Source Repository</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="project-summary.html" title="Project Summary">Project Summary</a>
    +            </li>
    +              </ul>
    +        </li>
    +                                                                                                                                                                                <li class="collapsed">
    +                          <a href="project-reports.html" title="Project Reports">Project Reports</a>
    +                  </li>
    +          </ul>
    +                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
    +        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
    +      </a>
    +                   
    +                    
    +            </div>
    +    </div>
    +    <div id="bodyColumn">
    +      <div id="contentBox">
    +        <div class="section">
    +<h2>Overview<a name="Overview"></a></h2><a name="Overview"></a>
    +<p>Typically the licenses listed for the project are that of the project itself, and not of dependencies.</p></div>
    +<div class="section">
    +<h2>Project License<a name="Project_License"></a></h2><a name="Project_License"></a>
    +<div class="section">
    +<h3>Revised BSD (3-Clause) License<a name="Revised_BSD_3-Clause_License"></a></h3><a name="Revised_BSD_3-Clause_License"></a>
    +<div class="source">
    +<pre>Copyright (c) 2014, Florian Schoppmann
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice, this
    +  list of conditions and the following disclaimer.
    +
    +* Redistributions in binary form must reproduce the above copyright notice,
    +  this list of conditions and the following disclaimer in the documentation
    +  and/or other materials provided with the distribution.
    +
    +* Neither the name of the java-types project nor the names of its
    +  contributors may be used to endorse or promote products derived from
    +  this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +</pre></div></div></div>
    +      </div>
    +    </div>
    +    <div class="clear">
    +      <hr/>
    +    </div>
    +    <div id="footer">
    +      <div class="xright">
    +              Copyright &#169;                   2014-2015.
    +          All Rights Reserved.      
    +                    
    +                  </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +  </body>
    +</html>
    diff --git a/plugin-management.html b/plugin-management.html
    new file mode 100644
    index 0000000..03ce4d7
    --- /dev/null
    +++ b/plugin-management.html
    @@ -0,0 +1,167 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<!-- Generated by Apache Maven Doxia Site Renderer 1.4 at 2015-05-25 -->
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    +    <title>Java Types - Project Plugin Management</title>
    +    <style type="text/css" media="all">
    +      @import url("./css/maven-base.css");
    +      @import url("./css/maven-theme.css");
    +      @import url("./css/site.css");
    +    </style>
    +    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
    +    <meta name="Date-Revision-yyyymmdd" content="20150525" />
    +    <meta http-equiv="Content-Language" content="en" />
    +        
    +        </head>
    +  <body class="composite">
    +    <div id="banner">
    +                    <div id="bannerLeft">
    +                Java Types
    +                </div>
    +                    <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="breadcrumbs">
    +            
    +                    
    +                <div class="xleft">
    +        <span id="publishDate">Last Published: 2015-05-25</span>
    +                  &nbsp;| <span id="projectVersion">Version: 1.0.1</span>
    +                      </div>
    +            <div class="xright">                    <a href="./" title="Java Types">Java Types</a>
    +              
    +                    
    +      </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="leftColumn">
    +      <div id="navcolumn">
    +             
    +                    
    +                                          <h5>Project Documentation</h5>
    +                  <ul>
    +                                                                                                                                                                                                                                                                                                      <li class="expanded">
    +                          <a href="project-info.html" title="Project Information">Project Information</a>
    +                    <ul>
    +                      <li class="none">
    +                          <a href="integration.html" title="Continuous Integration">Continuous Integration</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependencies.html" title="Dependencies">Dependencies</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-convergence.html" title="Dependency Convergence">Dependency Convergence</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-info.html" title="Dependency Information">Dependency Information</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="distribution-management.html" title="Distribution Management">Distribution Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="index.html" title="About">About</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="license.html" title="Project License">Project License</a>
    +            </li>
    +                      <li class="none">
    +            <strong>Plugin Management</strong>
    +          </li>
    +                      <li class="none">
    +                          <a href="plugins.html" title="Project Plugins">Project Plugins</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="team-list.html" title="Project Team">Project Team</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="source-repository.html" title="Source Repository">Source Repository</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="project-summary.html" title="Project Summary">Project Summary</a>
    +            </li>
    +              </ul>
    +        </li>
    +                                                                                                                                                                                <li class="collapsed">
    +                          <a href="project-reports.html" title="Project Reports">Project Reports</a>
    +                  </li>
    +          </ul>
    +                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
    +        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
    +      </a>
    +                   
    +                    
    +            </div>
    +    </div>
    +    <div id="bodyColumn">
    +      <div id="contentBox">
    +        <div class="section">
    +<h2>Project Plugin Management<a name="Project_Plugin_Management"></a></h2><a name="Project_Plugin_Management"></a>
    +<table border="0" class="bodyTable">
    +<tr class="a">
    +<th>GroupId</th>
    +<th>ArtifactId</th>
    +<th>Version</th></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-antrun-plugin/">maven-antrun-plugin</a></td>
    +<td>1.3</td></tr>
    +<tr class="a">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-assembly-plugin/">maven-assembly-plugin</a></td>
    +<td>2.2-beta-5</td></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-checkstyle-plugin/">maven-checkstyle-plugin</a></td>
    +<td>2.15</td></tr>
    +<tr class="a">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-dependency-plugin/">maven-dependency-plugin</a></td>
    +<td>2.8</td></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-javadoc-plugin/">maven-javadoc-plugin</a></td>
    +<td>2.10.3</td></tr>
    +<tr class="a">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/jxr/maven-jxr-plugin/">maven-jxr-plugin</a></td>
    +<td>2.5</td></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-pmd-plugin/">maven-pmd-plugin</a></td>
    +<td>3.4</td></tr>
    +<tr class="a">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-release-plugin/">maven-release-plugin</a></td>
    +<td>2.3.2</td></tr>
    +<tr class="b">
    +<td>org.codehaus.mojo</td>
    +<td><a class="externalLink" href="http://gleclaire.github.io/findbugs-maven-plugin/">findbugs-maven-plugin</a></td>
    +<td>3.0.1</td></tr>
    +<tr class="a">
    +<td>org.jacoco</td>
    +<td>http://jacoco-maven-plugin</td>
    +<td>0.7.4.201502262128</td></tr></table></div>
    +      </div>
    +    </div>
    +    <div class="clear">
    +      <hr/>
    +    </div>
    +    <div id="footer">
    +      <div class="xright">
    +              Copyright &#169;                   2014-2015.
    +          All Rights Reserved.      
    +                    
    +                  </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +  </body>
    +</html>
    diff --git a/plugins.html b/plugins.html
    new file mode 100644
    index 0000000..9e0539c
    --- /dev/null
    +++ b/plugins.html
    @@ -0,0 +1,206 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<!-- Generated by Apache Maven Doxia Site Renderer 1.4 at 2015-05-25 -->
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    +    <title>Java Types - Project Build Plugins</title>
    +    <style type="text/css" media="all">
    +      @import url("./css/maven-base.css");
    +      @import url("./css/maven-theme.css");
    +      @import url("./css/site.css");
    +    </style>
    +    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
    +    <meta name="Date-Revision-yyyymmdd" content="20150525" />
    +    <meta http-equiv="Content-Language" content="en" />
    +        
    +        </head>
    +  <body class="composite">
    +    <div id="banner">
    +                    <div id="bannerLeft">
    +                Java Types
    +                </div>
    +                    <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="breadcrumbs">
    +            
    +                    
    +                <div class="xleft">
    +        <span id="publishDate">Last Published: 2015-05-25</span>
    +                  &nbsp;| <span id="projectVersion">Version: 1.0.1</span>
    +                      </div>
    +            <div class="xright">                    <a href="./" title="Java Types">Java Types</a>
    +              
    +                    
    +      </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="leftColumn">
    +      <div id="navcolumn">
    +             
    +                    
    +                                          <h5>Project Documentation</h5>
    +                  <ul>
    +                                                                                                                                                                                                                                                                                                      <li class="expanded">
    +                          <a href="project-info.html" title="Project Information">Project Information</a>
    +                    <ul>
    +                      <li class="none">
    +                          <a href="integration.html" title="Continuous Integration">Continuous Integration</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependencies.html" title="Dependencies">Dependencies</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-convergence.html" title="Dependency Convergence">Dependency Convergence</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-info.html" title="Dependency Information">Dependency Information</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="distribution-management.html" title="Distribution Management">Distribution Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="index.html" title="About">About</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="license.html" title="Project License">Project License</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="plugin-management.html" title="Plugin Management">Plugin Management</a>
    +            </li>
    +                      <li class="none">
    +            <strong>Project Plugins</strong>
    +          </li>
    +                      <li class="none">
    +                          <a href="team-list.html" title="Project Team">Project Team</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="source-repository.html" title="Source Repository">Source Repository</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="project-summary.html" title="Project Summary">Project Summary</a>
    +            </li>
    +              </ul>
    +        </li>
    +                                                                                                                                                                                <li class="collapsed">
    +                          <a href="project-reports.html" title="Project Reports">Project Reports</a>
    +                  </li>
    +          </ul>
    +                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
    +        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
    +      </a>
    +                   
    +                    
    +            </div>
    +    </div>
    +    <div id="bodyColumn">
    +      <div id="contentBox">
    +        <div class="section">
    +<h2>Project Build Plugins<a name="Project_Build_Plugins"></a></h2><a name="Project_Build_Plugins"></a>
    +<table border="0" class="bodyTable">
    +<tr class="a">
    +<th>GroupId</th>
    +<th>ArtifactId</th>
    +<th>Version</th></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-clean-plugin/">maven-clean-plugin</a></td>
    +<td>2.5</td></tr>
    +<tr class="a">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-compiler-plugin/">maven-compiler-plugin</a></td>
    +<td>3.3</td></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-dependency-plugin/">maven-dependency-plugin</a></td>
    +<td>2.8</td></tr>
    +<tr class="a">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-deploy-plugin/">maven-deploy-plugin</a></td>
    +<td>2.7</td></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-install-plugin/">maven-install-plugin</a></td>
    +<td>2.4</td></tr>
    +<tr class="a">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-jar-plugin/">maven-jar-plugin</a></td>
    +<td>2.6</td></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/maven-release/maven-release-plugin/">maven-release-plugin</a></td>
    +<td>2.5.2</td></tr>
    +<tr class="a">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-resources-plugin/">maven-resources-plugin</a></td>
    +<td>2.6</td></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-site-plugin/">maven-site-plugin</a></td>
    +<td>3.3</td></tr>
    +<tr class="a">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/surefire/maven-surefire-plugin">maven-surefire-plugin</a></td>
    +<td>2.12.4</td></tr>
    +<tr class="b">
    +<td>org.jacoco</td>
    +<td>http://jacoco-maven-plugin</td>
    +<td>0.7.4.201502262128</td></tr></table></div>
    +<div class="section">
    +<h2>Project Report Plugins<a name="Project_Report_Plugins"></a></h2><a name="Project_Report_Plugins"></a>
    +<table border="0" class="bodyTable">
    +<tr class="a">
    +<th>GroupId</th>
    +<th>ArtifactId</th>
    +<th>Version</th></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-checkstyle-plugin/">maven-checkstyle-plugin</a></td>
    +<td>2.15</td></tr>
    +<tr class="a">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-javadoc-plugin/">maven-javadoc-plugin</a></td>
    +<td>2.10.3</td></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/jxr/maven-jxr-plugin/">maven-jxr-plugin</a></td>
    +<td>2.5</td></tr>
    +<tr class="a">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-pmd-plugin/">maven-pmd-plugin</a></td>
    +<td>3.4</td></tr>
    +<tr class="b">
    +<td>org.apache.maven.plugins</td>
    +<td><a class="externalLink" href="http://maven.apache.org/plugins/maven-project-info-reports-plugin/">maven-project-info-reports-plugin</a></td>
    +<td>2.8</td></tr>
    +<tr class="a">
    +<td>org.codehaus.mojo</td>
    +<td><a class="externalLink" href="http://mojo.codehaus.org/findbugs-maven-plugin">findbugs-maven-plugin</a></td>
    +<td>3.0.0</td></tr>
    +<tr class="b">
    +<td>org.jacoco</td>
    +<td>http://jacoco-maven-plugin</td>
    +<td>0.7.4.201502262128</td></tr></table></div>
    +      </div>
    +    </div>
    +    <div class="clear">
    +      <hr/>
    +    </div>
    +    <div id="footer">
    +      <div class="xright">
    +              Copyright &#169;                   2014-2015.
    +          All Rights Reserved.      
    +                    
    +                  </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +  </body>
    +</html>
    diff --git a/pom.xml b/pom.xml
    deleted file mode 100644
    index f45c6ac..0000000
    --- a/pom.xml
    +++ /dev/null
    @@ -1,365 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?>
    -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    -    <modelVersion>4.0.0</modelVersion>
    -
    -    <groupId>net.florianschoppmann.java</groupId>
    -    <artifactId>java-types</artifactId>
    -    <version>1.0.2-SNAPSHOT</version>
    -    <packaging>jar</packaging>
    -
    -    <name>Java Types</name>
    -    <description>
    -        Skeletal implementation of interface javax.lang.model.util.Types, plus concrete realization backed by core
    -        Java Reflection API, akin to JEP 119.
    -
    -        This module implements those methods in interface javax.lang.model.util.Types that pertain to the Java type
    -        system, plus it provides a method for resolving formal type parameters to actual type arguments. These methods
    -        have no equivalent in the Java Reflection API.
    -
    -        The abstract skeletal implementation in this module is meant to be specialized for a particular javax.lang.model
    -        implementation. The abstraction makes this module well-suited to be used in projects that contain
    -        javax.lang.model as part of their domain model (for instance, implementations of alternative languages on top of
    -        the JVM).
    -    </description>
    -    <url>https://github.com/fschopp/java-types</url>
    -
    -    <licenses>
    -        <license>
    -            <name>Revised BSD (3-Clause) License</name>
    -            <url>https://raw.github.com/fschopp/java-types/master/LICENSE</url>
    -            <distribution>repo</distribution>
    -        </license>
    -    </licenses>
    -
    -    <scm>
    -        <url>https://github.com/fschopp/java-types</url>
    -        <connection>scm:git:https://github.com/fschopp/java-types.git</connection>
    -        <developerConnection>scm:git:https://github.com/fschopp/java-types.git</developerConnection>
    -        <tag>master</tag>
    -    </scm>
    -
    -    <issueManagement>
    -        <system>GitHub</system>
    -        <url>https://github.com/fschopp/java-types/issues</url>
    -    </issueManagement>
    -
    -    <ciManagement>
    -        <system>Travis</system>
    -        <url>https://travis-ci.org/fschopp/java-types</url>
    -    </ciManagement>
    -
    -    <developers>
    -        <developer>
    -            <id>fschopp</id>
    -            <name>Florian Schoppmann</name>
    -            <email>mail@florian-schoppmann.net</email>
    -            <url>http://www.florian-schoppmann.net</url>
    -        </developer>
    -    </developers>
    -
    -    <inceptionYear>2014</inceptionYear>
    -
    -    <properties>
    -        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    -        <findbugs.annotations.version>3.0.0</findbugs.annotations.version>
    -        <findbugs.plugin.version>3.0.1</findbugs.plugin.version>
    -        <github.maven.version>0.11</github.maven.version>
    -        <jacoco.version>0.7.4.201502262128</jacoco.version>
    -        <java.version>1.7</java.version>
    -        <jsr305.version>3.0.0</jsr305.version>
    -        <maven.compiler.version>3.3</maven.compiler.version>
    -        <maven.checkstyle.version>2.15</maven.checkstyle.version>
    -        <maven.javadoc.version>2.10.3</maven.javadoc.version>
    -        <maven.jar.version>2.6</maven.jar.version>
    -        <maven.jxr.version>2.5</maven.jxr.version>
    -        <maven.pmd.version>3.4</maven.pmd.version>
    -        <maven.gpg.version>1.6</maven.gpg.version>
    -        <maven.project-info-reports.version>2.8</maven.project-info-reports.version>
    -        <maven.release.version>2.5.2</maven.release.version>
    -        <maven.source.version>2.4</maven.source.version>
    -        <nexus.staging.version>1.6.5</nexus.staging.version>
    -        <testng.version>6.9.4</testng.version>
    -    </properties>
    -
    -    <dependencies>
    -        <dependency>
    -            <groupId>com.google.code.findbugs</groupId>
    -            <artifactId>jsr305</artifactId>
    -            <version>${jsr305.version}</version>
    -            <!-- Needed only for annotations -->
    -            <optional>true</optional>
    -        </dependency>
    -        <dependency>
    -            <groupId>org.testng</groupId>
    -            <artifactId>testng</artifactId>
    -            <version>${testng.version}</version>
    -            <scope>test</scope>
    -        </dependency>
    -    </dependencies>
    -
    -    <distributionManagement>
    -        <site>
    -            <url>scm:git:https://github.com/fschopp/java-types.git</url>
    -        </site>
    -        <snapshotRepository>
    -            <id>ossrh</id>
    -            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    -        </snapshotRepository>
    -    </distributionManagement>
    -
    -    <build>
    -        <pluginManagement>
    -            <plugins>
    -                <plugin>
    -                    <groupId>org.apache.maven.plugins</groupId>
    -                    <artifactId>maven-javadoc-plugin</artifactId>
    -                    <version>${maven.javadoc.version}</version>
    -                </plugin>
    -                <plugin>
    -                    <groupId>org.jacoco</groupId>
    -                    <artifactId>jacoco-maven-plugin</artifactId>
    -                    <version>${jacoco.version}</version>
    -                </plugin>
    -                <plugin>
    -                    <groupId>org.apache.maven.plugins</groupId>
    -                    <artifactId>maven-jxr-plugin</artifactId>
    -                    <version>${maven.jxr.version}</version>
    -                </plugin>
    -                <plugin>
    -                    <groupId>org.apache.maven.plugins</groupId>
    -                    <artifactId>maven-pmd-plugin</artifactId>
    -                    <version>${maven.pmd.version}</version>
    -                </plugin>
    -                <plugin>
    -                    <groupId>org.apache.maven.plugins</groupId>
    -                    <artifactId>maven-checkstyle-plugin</artifactId>
    -                    <version>${maven.checkstyle.version}</version>
    -                </plugin>
    -                <plugin>
    -                    <groupId>org.codehaus.mojo</groupId>
    -                    <artifactId>findbugs-maven-plugin</artifactId>
    -                    <version>${findbugs.plugin.version}</version>
    -                </plugin>
    -            </plugins>
    -        </pluginManagement>
    -
    -        <plugins>
    -            <plugin>
    -                <groupId>org.apache.maven.plugins</groupId>
    -                <artifactId>maven-compiler-plugin</artifactId>
    -                <version>${maven.compiler.version}</version>
    -                <configuration>
    -                    <source>${java.version}</source>
    -                    <target>${java.version}</target>
    -                </configuration>
    -            </plugin>
    -            <plugin>
    -                <groupId>org.apache.maven.plugins</groupId>
    -                <artifactId>maven-dependency-plugin</artifactId>
    -                <executions>
    -                    <execution>
    -                        <goals>
    -                            <goal>analyze-only</goal>
    -                        </goals>
    -                        <configuration>
    -                            <failOnWarning>true</failOnWarning>
    -                            <outputXML>true</outputXML>
    -                        </configuration>
    -                    </execution>
    -                </executions>
    -            </plugin>
    -            <plugin>
    -                <groupId>org.apache.maven.plugins</groupId>
    -                <artifactId>maven-jar-plugin</artifactId>
    -                <version>${maven.jar.version}</version>
    -                <executions>
    -                    <execution>
    -                        <goals>
    -                            <goal>test-jar</goal>
    -                        </goals>
    -                    </execution>
    -                </executions>
    -            </plugin>
    -            <plugin>
    -                <groupId>org.jacoco</groupId>
    -                <artifactId>jacoco-maven-plugin</artifactId>
    -                <executions>
    -                    <execution>
    -                        <phase>initialize</phase>
    -                        <goals>
    -                            <!-- Prepares property "argLine" pointing to the JaCoCo runtime agent that can be
    -                                 passed as a VM argument to the application under test. This property needs to
    -                                 be used by the surefire and failsafe plugins. -->
    -                            <goal>prepare-agent</goal>
    -                        </goals>
    -                    </execution>
    -                </executions>
    -            </plugin>
    -            <plugin>
    -                <groupId>org.apache.maven.plugins</groupId>
    -                <artifactId>maven-release-plugin</artifactId>
    -                <version>${maven.release.version}</version>
    -                <configuration>
    -                    <pushChanges>false</pushChanges>
    -                    <tagNameFormat>v@{project.version}</tagNameFormat>
    -                    <!-- Disable the release profile that is part of the Maven Super POM -->
    -                    <useReleaseProfile>false</useReleaseProfile>
    -                    <!-- During release:perform, enable the "release" and "ghpages" profiles -->
    -                    <releaseProfiles>release,ghpages</releaseProfiles>
    -                    <goals>deploy site</goals>
    -                </configuration>
    -            </plugin>
    -        </plugins>
    -    </build>
    -
    -    <reporting>
    -        <plugins>
    -            <!-- Maven 3.2.1 seems not to honor the configured versions from build -> pluginManagement.  -->
    -            <plugin>
    -                <groupId>org.apache.maven.plugins</groupId>
    -                <artifactId>maven-project-info-reports-plugin</artifactId>
    -                <version>${maven.project-info-reports.version}</version>
    -            </plugin>
    -            <plugin>
    -                <groupId>org.apache.maven.plugins</groupId>
    -                <artifactId>maven-javadoc-plugin</artifactId>
    -                <version>${maven.javadoc.version}</version>
    -            </plugin>
    -            <plugin>
    -                <groupId>org.apache.maven.plugins</groupId>
    -                <artifactId>maven-jxr-plugin</artifactId>
    -                <version>${maven.jxr.version}</version>
    -            </plugin>
    -            <plugin>
    -                <groupId>org.apache.maven.plugins</groupId>
    -                <artifactId>maven-checkstyle-plugin</artifactId>
    -                <version>${maven.checkstyle.version}</version>
    -                <reportSets>
    -                    <reportSet>
    -                        <reports>
    -                            <report>checkstyle</report>
    -                        </reports>
    -                    </reportSet>
    -                </reportSets>
    -                <configuration>
    -                    <consoleOutput>true</consoleOutput>
    -                    <configLocation>${project.basedir}/src/main/config/checkstyle.xml</configLocation>
    -                </configuration>
    -            </plugin>
    -            <plugin>
    -                <groupId>org.apache.maven.plugins</groupId>
    -                <artifactId>maven-pmd-plugin</artifactId>
    -                <version>${maven.pmd.version}</version>
    -                <configuration>
    -                    <printFailingErrors>true</printFailingErrors>
    -                    <targetJdk>${java.version}</targetJdk>
    -                    <rulesets>
    -                        <ruleset>${project.basedir}/src/main/config/pmd.xml</ruleset>
    -                    </rulesets>
    -                </configuration>
    -            </plugin>
    -            <plugin>
    -                <groupId>org.codehaus.mojo</groupId>
    -                <artifactId>findbugs-maven-plugin</artifactId>
    -                <version>${findbugs.annotations.version}</version>
    -                <configuration>
    -                    <effort>Max</effort>
    -                    <xmlOutput>true</xmlOutput>
    -                    <excludeFilterFile>${project.basedir}/src/main/config/findbugs-exclude.xml</excludeFilterFile>
    -                </configuration>
    -            </plugin>
    -            <plugin>
    -                <groupId>org.jacoco</groupId>
    -                <artifactId>jacoco-maven-plugin</artifactId>
    -                <version>${jacoco.version}</version>
    -            </plugin>
    -        </plugins>
    -    </reporting>
    -
    -    <profiles>
    -        <profile>
    -            <id>release</id>
    -            <build>
    -                <plugins>
    -                    <plugin>
    -                        <groupId>org.apache.maven.plugins</groupId>
    -                        <artifactId>maven-javadoc-plugin</artifactId>
    -                        <executions>
    -                            <execution>
    -                                <goals>
    -                                    <goal>jar</goal>
    -                                    <goal>test-jar</goal>
    -                                </goals>
    -                            </execution>
    -                        </executions>
    -                    </plugin>
    -                    <plugin>
    -                        <groupId>org.apache.maven.plugins</groupId>
    -                        <artifactId>maven-source-plugin</artifactId>
    -                        <version>${maven.source.version}</version>
    -                        <executions>
    -                            <execution>
    -                                <goals>
    -                                    <goal>jar-no-fork</goal>
    -                                    <goal>test-jar-no-fork</goal>
    -                                </goals>
    -                            </execution>
    -                        </executions>
    -                    </plugin>
    -                    <plugin>
    -                        <groupId>org.sonatype.plugins</groupId>
    -                        <artifactId>nexus-staging-maven-plugin</artifactId>
    -                        <version>${nexus.staging.version}</version>
    -                        <extensions>true</extensions>
    -                        <configuration>
    -                            <serverId>ossrh</serverId>
    -                            <nexusUrl>https://oss.sonatype.org/</nexusUrl>
    -                            <autoReleaseAfterClose>false</autoReleaseAfterClose>
    -                        </configuration>
    -                    </plugin>
    -                    <plugin>
    -                        <groupId>org.apache.maven.plugins</groupId>
    -                        <artifactId>maven-gpg-plugin</artifactId>
    -                        <version>${maven.gpg.version}</version>
    -                        <executions>
    -                            <execution>
    -                                <phase>verify</phase>
    -                                <goals>
    -                                    <goal>sign</goal>
    -                                </goals>
    -                            </execution>
    -                        </executions>
    -                    </plugin>
    -                </plugins>
    -            </build>
    -        </profile>
    -        <profile>
    -            <id>ghpages</id>
    -            <build>
    -                <plugins>
    -                    <plugin>
    -                        <groupId>com.github.github</groupId>
    -                        <artifactId>site-maven-plugin</artifactId>
    -                        <version>${github.maven.version}</version>
    -                        <configuration>
    -                            <message>Site for version '${project.version}'.</message>
    -                            <oauth2Token>${env.GH_TOKEN}</oauth2Token>
    -                            <force>true</force>
    -                            <!-- Create a .nojekyll file at the root of the site. This setting is enabled because JaCoCo
    -                                 creates a directory that begins with an underscore. -->
    -                            <noJekyll>true</noJekyll>
    -                        </configuration>
    -                        <executions>
    -                            <execution>
    -                                <goals>
    -                                    <goal>site</goal>
    -                                </goals>
    -                                <phase>site</phase>
    -                            </execution>
    -                        </executions>
    -                    </plugin>
    -                </plugins>
    -            </build>
    -        </profile>
    -    </profiles>
    -</project>
    diff --git a/project-info.html b/project-info.html
    new file mode 100644
    index 0000000..7033930
    --- /dev/null
    +++ b/project-info.html
    @@ -0,0 +1,178 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<!-- Generated by Apache Maven Doxia Site Renderer 1.4 at 2015-05-25 -->
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    +    <title>Java Types - Project Information</title>
    +    <style type="text/css" media="all">
    +      @import url("./css/maven-base.css");
    +      @import url("./css/maven-theme.css");
    +      @import url("./css/site.css");
    +    </style>
    +    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
    +    <meta name="Date-Revision-yyyymmdd" content="20150525" />
    +    <meta http-equiv="Content-Language" content="en" />
    +        
    +        </head>
    +  <body class="composite">
    +    <div id="banner">
    +                    <div id="bannerLeft">
    +                Java Types
    +                </div>
    +                    <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="breadcrumbs">
    +            
    +                    
    +                <div class="xleft">
    +        <span id="publishDate">Last Published: 2015-05-25</span>
    +                  &nbsp;| <span id="projectVersion">Version: 1.0.1</span>
    +                      </div>
    +            <div class="xright">                    <a href="./" title="Java Types">Java Types</a>
    +              
    +                    
    +      </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="leftColumn">
    +      <div id="navcolumn">
    +             
    +                    
    +                                          <h5>Project Documentation</h5>
    +                  <ul>
    +                                                                                                                                                                                                                                                                                                <li class="expanded">
    +            <strong>Project Information</strong>
    +                  <ul>
    +                      <li class="none">
    +                          <a href="integration.html" title="Continuous Integration">Continuous Integration</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependencies.html" title="Dependencies">Dependencies</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-convergence.html" title="Dependency Convergence">Dependency Convergence</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-info.html" title="Dependency Information">Dependency Information</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="distribution-management.html" title="Distribution Management">Distribution Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="index.html" title="About">About</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="license.html" title="Project License">Project License</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="plugin-management.html" title="Plugin Management">Plugin Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="plugins.html" title="Project Plugins">Project Plugins</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="team-list.html" title="Project Team">Project Team</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="source-repository.html" title="Source Repository">Source Repository</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="project-summary.html" title="Project Summary">Project Summary</a>
    +            </li>
    +              </ul>
    +        </li>
    +                                                                                                                                                                                <li class="collapsed">
    +                          <a href="project-reports.html" title="Project Reports">Project Reports</a>
    +                  </li>
    +          </ul>
    +                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
    +        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
    +      </a>
    +                   
    +                    
    +            </div>
    +    </div>
    +    <div id="bodyColumn">
    +      <div id="contentBox">
    +        <div class="section">
    +<h2>Project Information<a name="Project_Information"></a></h2>
    +<p>This document provides an overview of the various documents and links that are part of this project's general information. All of this content is automatically generated by <a class="externalLink" href="http://maven.apache.org">Maven</a> on behalf of the project.</p>
    +<div class="section">
    +<h3>Overview<a name="Overview"></a></h3>
    +<table border="0" class="bodyTable">
    +<tr class="a">
    +<th>Document</th>
    +<th>Description</th></tr>
    +<tr class="b">
    +<td><a href="integration.html">Continuous Integration</a></td>
    +<td>This is a link to the definitions of all continuous integration processes that builds and tests code on a frequent, regular basis.</td></tr>
    +<tr class="a">
    +<td><a href="dependencies.html">Dependencies</a></td>
    +<td>This document lists the project's dependencies and provides information on each dependency.</td></tr>
    +<tr class="b">
    +<td><a href="dependency-convergence.html">Dependency Convergence</a></td>
    +<td>This document presents the convergence of dependency versions across the entire project, and its sub modules.</td></tr>
    +<tr class="a">
    +<td><a href="dependency-info.html">Dependency Information</a></td>
    +<td>This document describes how to to include this project as a dependency using various dependency management tools.</td></tr>
    +<tr class="b">
    +<td><a href="distribution-management.html">Distribution Management</a></td>
    +<td>This document provides informations on the distribution management of this project.</td></tr>
    +<tr class="a">
    +<td><a href="index.html">About</a></td>
    +<td>Skeletal implementation of interface javax.lang.model.util.Types, plus concrete realization backed by core
    +        Java Reflection API, akin to JEP 119.
    +
    +        This module implements those methods in interface javax.lang.model.util.Types that pertain to the Java type
    +        system, plus it provides a method for resolving formal type parameters to actual type arguments. These methods
    +        have no equivalent in the Java Reflection API.
    +
    +        The abstract skeletal implementation in this module is meant to be specialized for a particular javax.lang.model
    +        implementation. The abstraction makes this module well-suited to be used in projects that contain
    +        javax.lang.model as part of their domain model (for instance, implementations of alternative languages on top of
    +        the JVM).</td></tr>
    +<tr class="b">
    +<td><a href="issue-tracking.html">Issue Tracking</a></td>
    +<td>This document provides information on the issue management system used in this project.</td></tr>
    +<tr class="a">
    +<td><a href="license.html">Project License</a></td>
    +<td>This document lists the project license(s).</td></tr>
    +<tr class="b">
    +<td><a href="plugin-management.html">Plugin Management</a></td>
    +<td>This document lists the plugins that are defined through pluginManagement.</td></tr>
    +<tr class="a">
    +<td><a href="plugins.html">Project Plugins</a></td>
    +<td>This document lists the build plugins and the report plugins used by this project.</td></tr>
    +<tr class="b">
    +<td><a href="team-list.html">Project Team</a></td>
    +<td>This document provides information on the members of this project. These are the individuals who have contributed to the project in one form or another.</td></tr>
    +<tr class="a">
    +<td><a href="source-repository.html">Source Repository</a></td>
    +<td>This document lists ways to access the online source repository.</td></tr>
    +<tr class="b">
    +<td><a href="project-summary.html">Project Summary</a></td>
    +<td>This document lists other related information of this project</td></tr></table></div></div>
    +      </div>
    +    </div>
    +    <div class="clear">
    +      <hr/>
    +    </div>
    +    <div id="footer">
    +      <div class="xright">
    +              Copyright &#169;                   2014-2015.
    +          All Rights Reserved.      
    +                    
    +                  </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +  </body>
    +</html>
    diff --git a/project-reports.html b/project-reports.html
    new file mode 100644
    index 0000000..6354986
    --- /dev/null
    +++ b/project-reports.html
    @@ -0,0 +1,132 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<!-- Generated by Apache Maven Doxia Site Renderer 1.4 at 2015-05-25 -->
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    +    <title>Java Types - Generated Reports</title>
    +    <style type="text/css" media="all">
    +      @import url("./css/maven-base.css");
    +      @import url("./css/maven-theme.css");
    +      @import url("./css/site.css");
    +    </style>
    +    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
    +    <meta name="Date-Revision-yyyymmdd" content="20150525" />
    +    <meta http-equiv="Content-Language" content="en" />
    +        
    +        </head>
    +  <body class="composite">
    +    <div id="banner">
    +                    <div id="bannerLeft">
    +                Java Types
    +                </div>
    +                    <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="breadcrumbs">
    +            
    +                    
    +                <div class="xleft">
    +        <span id="publishDate">Last Published: 2015-05-25</span>
    +                  &nbsp;| <span id="projectVersion">Version: 1.0.1</span>
    +                      </div>
    +            <div class="xright">                    <a href="./" title="Java Types">Java Types</a>
    +              
    +                    
    +      </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="leftColumn">
    +      <div id="navcolumn">
    +             
    +                    
    +                                          <h5>Project Documentation</h5>
    +                  <ul>
    +                                                                                                                                                                                                                                                                                            <li class="collapsed">
    +                          <a href="project-info.html" title="Project Information">Project Information</a>
    +                  </li>
    +                                                                                                                                                                                    <li class="expanded">
    +            <strong>Project Reports</strong>
    +                  <ul>
    +                      <li class="none">
    +                          <a href="apidocs/index.html" title="JavaDocs">JavaDocs</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="testapidocs/index.html" title="Test JavaDocs">Test JavaDocs</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="xref/index.html" title="Source Xref">Source Xref</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="xref-test/index.html" title="Test Source Xref">Test Source Xref</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="checkstyle.html" title="Checkstyle">Checkstyle</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="findbugs.html" title="FindBugs">FindBugs</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="jacoco/index.html" title="JaCoCo Test">JaCoCo Test</a>
    +            </li>
    +              </ul>
    +        </li>
    +          </ul>
    +                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
    +        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
    +      </a>
    +                   
    +                    
    +            </div>
    +    </div>
    +    <div id="bodyColumn">
    +      <div id="contentBox">
    +        <div class="section">
    +<h2>Generated Reports<a name="Generated_Reports"></a></h2>
    +<p>This document provides an overview of the various reports that are automatically generated by <a class="externalLink" href="http://maven.apache.org">Maven</a> . Each report is briefly described below.</p>
    +<div class="section">
    +<h3>Overview<a name="Overview"></a></h3>
    +<table border="0" class="bodyTable">
    +<tr class="a">
    +<th>Document</th>
    +<th>Description</th></tr>
    +<tr class="b">
    +<td><a href="apidocs/index.html">JavaDocs</a></td>
    +<td>JavaDoc API documentation.</td></tr>
    +<tr class="a">
    +<td><a href="testapidocs/index.html">Test JavaDocs</a></td>
    +<td>Test JavaDoc API documentation.</td></tr>
    +<tr class="b">
    +<td><a href="xref/index.html">Source Xref</a></td>
    +<td>HTML based, cross-reference version of Java source code.</td></tr>
    +<tr class="a">
    +<td><a href="xref-test/index.html">Test Source Xref</a></td>
    +<td>HTML based, cross-reference version of Java test source code.</td></tr>
    +<tr class="b">
    +<td><a href="checkstyle.html">Checkstyle</a></td>
    +<td>Report on coding style conventions.</td></tr>
    +<tr class="a">
    +<td><a href="findbugs.html">FindBugs</a></td>
    +<td>Generates a source code report with the FindBugs Library.</td></tr>
    +<tr class="b">
    +<td><a href="jacoco/index.html">JaCoCo Test</a></td>
    +<td>JaCoCo Test Coverage Report.</td></tr></table></div></div>
    +      </div>
    +    </div>
    +    <div class="clear">
    +      <hr/>
    +    </div>
    +    <div id="footer">
    +      <div class="xright">
    +              Copyright &#169;                   2014-2015.
    +          All Rights Reserved.      
    +                    
    +                  </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +  </body>
    +</html>
    diff --git a/project-summary.html b/project-summary.html
    new file mode 100644
    index 0000000..ad3eb4b
    --- /dev/null
    +++ b/project-summary.html
    @@ -0,0 +1,171 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<!-- Generated by Apache Maven Doxia Site Renderer 1.4 at 2015-05-25 -->
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    +    <title>Java Types - Project Summary</title>
    +    <style type="text/css" media="all">
    +      @import url("./css/maven-base.css");
    +      @import url("./css/maven-theme.css");
    +      @import url("./css/site.css");
    +    </style>
    +    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
    +    <meta name="Date-Revision-yyyymmdd" content="20150525" />
    +    <meta http-equiv="Content-Language" content="en" />
    +        
    +        </head>
    +  <body class="composite">
    +    <div id="banner">
    +                    <div id="bannerLeft">
    +                Java Types
    +                </div>
    +                    <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="breadcrumbs">
    +            
    +                    
    +                <div class="xleft">
    +        <span id="publishDate">Last Published: 2015-05-25</span>
    +                  &nbsp;| <span id="projectVersion">Version: 1.0.1</span>
    +                      </div>
    +            <div class="xright">                    <a href="./" title="Java Types">Java Types</a>
    +              
    +                    
    +      </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="leftColumn">
    +      <div id="navcolumn">
    +             
    +                    
    +                                          <h5>Project Documentation</h5>
    +                  <ul>
    +                                                                                                                                                                                                                                                                                                      <li class="expanded">
    +                          <a href="project-info.html" title="Project Information">Project Information</a>
    +                    <ul>
    +                      <li class="none">
    +                          <a href="integration.html" title="Continuous Integration">Continuous Integration</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependencies.html" title="Dependencies">Dependencies</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-convergence.html" title="Dependency Convergence">Dependency Convergence</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-info.html" title="Dependency Information">Dependency Information</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="distribution-management.html" title="Distribution Management">Distribution Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="index.html" title="About">About</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="license.html" title="Project License">Project License</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="plugin-management.html" title="Plugin Management">Plugin Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="plugins.html" title="Project Plugins">Project Plugins</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="team-list.html" title="Project Team">Project Team</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="source-repository.html" title="Source Repository">Source Repository</a>
    +            </li>
    +                      <li class="none">
    +            <strong>Project Summary</strong>
    +          </li>
    +              </ul>
    +        </li>
    +                                                                                                                                                                                <li class="collapsed">
    +                          <a href="project-reports.html" title="Project Reports">Project Reports</a>
    +                  </li>
    +          </ul>
    +                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
    +        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
    +      </a>
    +                   
    +                    
    +            </div>
    +    </div>
    +    <div id="bodyColumn">
    +      <div id="contentBox">
    +        <div class="section">
    +<h2>Project Summary<a name="Project_Summary"></a></h2><a name="Project_Summary"></a>
    +<div class="section">
    +<h3>Project Information<a name="Project_Information"></a></h3><a name="Project_Information"></a>
    +<table border="0" class="bodyTable">
    +<tr class="a">
    +<th>Field</th>
    +<th>Value</th></tr>
    +<tr class="b">
    +<td>Name</td>
    +<td>Java Types</td></tr>
    +<tr class="a">
    +<td>Description</td>
    +<td>Skeletal implementation of interface javax.lang.model.util.Types, plus concrete realization backed by core
    +        Java Reflection API, akin to JEP 119.
    +
    +        This module implements those methods in interface javax.lang.model.util.Types that pertain to the Java type
    +        system, plus it provides a method for resolving formal type parameters to actual type arguments. These methods
    +        have no equivalent in the Java Reflection API.
    +
    +        The abstract skeletal implementation in this module is meant to be specialized for a particular javax.lang.model
    +        implementation. The abstraction makes this module well-suited to be used in projects that contain
    +        javax.lang.model as part of their domain model (for instance, implementations of alternative languages on top of
    +        the JVM).</td></tr>
    +<tr class="b">
    +<td>Homepage</td>
    +<td><a class="externalLink" href="https://github.com/fschopp/java-types">https://github.com/fschopp/java-types</a></td></tr></table></div>
    +<div class="section">
    +<h3>Project Organization<a name="Project_Organization"></a></h3><a name="Project_Organization"></a>
    +<p>This project does not belong to an organization.</p></div>
    +<div class="section">
    +<h3>Build Information<a name="Build_Information"></a></h3><a name="Build_Information"></a>
    +<table border="0" class="bodyTable">
    +<tr class="a">
    +<th>Field</th>
    +<th>Value</th></tr>
    +<tr class="b">
    +<td>GroupId</td>
    +<td>net.florianschoppmann.java</td></tr>
    +<tr class="a">
    +<td>ArtifactId</td>
    +<td>java-types</td></tr>
    +<tr class="b">
    +<td>Version</td>
    +<td>1.0.1</td></tr>
    +<tr class="a">
    +<td>Type</td>
    +<td>jar</td></tr>
    +<tr class="b">
    +<td>Java Version</td>
    +<td>1.7</td></tr></table></div></div>
    +      </div>
    +    </div>
    +    <div class="clear">
    +      <hr/>
    +    </div>
    +    <div id="footer">
    +      <div class="xright">
    +              Copyright &#169;                   2014-2015.
    +          All Rights Reserved.      
    +                    
    +                  </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +  </body>
    +</html>
    diff --git a/source-repository.html b/source-repository.html
    new file mode 100644
    index 0000000..41a194a
    --- /dev/null
    +++ b/source-repository.html
    @@ -0,0 +1,141 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<!-- Generated by Apache Maven Doxia Site Renderer 1.4 at 2015-05-25 -->
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    +    <title>Java Types - Source Repository</title>
    +    <style type="text/css" media="all">
    +      @import url("./css/maven-base.css");
    +      @import url("./css/maven-theme.css");
    +      @import url("./css/site.css");
    +    </style>
    +    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
    +    <meta name="Date-Revision-yyyymmdd" content="20150525" />
    +    <meta http-equiv="Content-Language" content="en" />
    +        
    +        </head>
    +  <body class="composite">
    +    <div id="banner">
    +                    <div id="bannerLeft">
    +                Java Types
    +                </div>
    +                    <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="breadcrumbs">
    +            
    +                    
    +                <div class="xleft">
    +        <span id="publishDate">Last Published: 2015-05-25</span>
    +                  &nbsp;| <span id="projectVersion">Version: 1.0.1</span>
    +                      </div>
    +            <div class="xright">                    <a href="./" title="Java Types">Java Types</a>
    +              
    +                    
    +      </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="leftColumn">
    +      <div id="navcolumn">
    +             
    +                    
    +                                          <h5>Project Documentation</h5>
    +                  <ul>
    +                                                                                                                                                                                                                                                                                                      <li class="expanded">
    +                          <a href="project-info.html" title="Project Information">Project Information</a>
    +                    <ul>
    +                      <li class="none">
    +                          <a href="integration.html" title="Continuous Integration">Continuous Integration</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependencies.html" title="Dependencies">Dependencies</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-convergence.html" title="Dependency Convergence">Dependency Convergence</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-info.html" title="Dependency Information">Dependency Information</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="distribution-management.html" title="Distribution Management">Distribution Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="index.html" title="About">About</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="license.html" title="Project License">Project License</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="plugin-management.html" title="Plugin Management">Plugin Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="plugins.html" title="Project Plugins">Project Plugins</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="team-list.html" title="Project Team">Project Team</a>
    +            </li>
    +                      <li class="none">
    +            <strong>Source Repository</strong>
    +          </li>
    +                      <li class="none">
    +                          <a href="project-summary.html" title="Project Summary">Project Summary</a>
    +            </li>
    +              </ul>
    +        </li>
    +                                                                                                                                                                                <li class="collapsed">
    +                          <a href="project-reports.html" title="Project Reports">Project Reports</a>
    +                  </li>
    +          </ul>
    +                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
    +        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
    +      </a>
    +                   
    +                    
    +            </div>
    +    </div>
    +    <div id="bodyColumn">
    +      <div id="contentBox">
    +        <div class="section">
    +<h2>Overview<a name="Overview"></a></h2><a name="Overview"></a>
    +<p>This project uses <a class="externalLink" href="http://git-scm.com/">Git</a> to manage its source code. Instructions on Git use can be found at <a class="externalLink" href="http://git-scm.com/documentation">http://git-scm.com/documentation</a>.</p></div>
    +<div class="section">
    +<h2>Web Browser Access<a name="Web_Browser_Access"></a></h2><a name="Web_Browser_Access"></a>
    +<p>The following is a link to a browsable version of the source repository:</p>
    +<div class="source">
    +<pre><a class="externalLink" href="https://github.com/fschopp/java-types">https://github.com/fschopp/java-types</a></pre></div></div>
    +<div class="section">
    +<h2>Anonymous Access<a name="Anonymous_Access"></a></h2><a name="Anonymous_Access"></a>
    +<p>The source can be checked out anonymously from Git with this command (See <a class="externalLink" href="http://git-scm.com/docs/git-clone">http://git-scm.com/docs/git-clone</a>):</p>
    +<div class="source">
    +<pre>$ git clone --branch v1.0.1 https://github.com/fschopp/java-types.git</pre></div></div>
    +<div class="section">
    +<h2>Developer Access<a name="Developer_Access"></a></h2><a name="Developer_Access"></a>
    +<p>Only project developers can access the Git tree via this method (See <a class="externalLink" href="http://git-scm.com/docs/git-clone">http://git-scm.com/docs/git-clone</a>).</p>
    +<div class="source">
    +<pre>$ git clone --branch v1.0.1 https://github.com/fschopp/java-types.git</pre></div></div>
    +<div class="section">
    +<h2>Access from Behind a Firewall<a name="Access_from_Behind_a_Firewall"></a></h2><a name="Access_from_Behind_a_Firewall"></a>
    +<p>Refer to the documentation of the SCM used for more information about access behind a firewall.</p></div>
    +      </div>
    +    </div>
    +    <div class="clear">
    +      <hr/>
    +    </div>
    +    <div id="footer">
    +      <div class="xright">
    +              Copyright &#169;                   2014-2015.
    +          All Rights Reserved.      
    +                    
    +                  </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +  </body>
    +</html>
    diff --git a/src/main/config/checkstyle.xml b/src/main/config/checkstyle.xml
    deleted file mode 100644
    index c7a8faa..0000000
    --- a/src/main/config/checkstyle.xml
    +++ /dev/null
    @@ -1,222 +0,0 @@
    -<?xml version="1.0"?>
    -<!DOCTYPE module PUBLIC
    -          "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
    -          "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
    -
    -<!--
    -
    -  ====
    -  Note: This configuration file has been adapted to project "Java Types" from:
    -  https://github.com/checkstyle/checkstyle/blob/master/sun_checks.xml
    -  ====
    -
    -  Checkstyle configuration that checks the sun coding conventions from:
    -
    -    - the Java Language Specification at
    -      http://java.sun.com/docs/books/jls/second_edition/html/index.html
    -
    -    - the Sun Code Conventions at http://java.sun.com/docs/codeconv/
    -
    -    - the Javadoc guidelines at
    -      http://java.sun.com/j2se/javadoc/writingdoccomments/index.html
    -
    -    - the JDK Api documentation http://java.sun.com/j2se/docs/api/index.html
    -
    -    - some best practices
    -
    -  Checkstyle is very configurable. Be sure to read the documentation at
    -  http://checkstyle.sf.net (or in your downloaded distribution).
    -
    -  Most Checks are configurable, be sure to consult the documentation.
    -
    -  To completely disable a check, just comment it out or delete it from the file.
    -
    -  Finally, it is worth reading the documentation.
    -
    --->
    -
    -<module name="Checker">
    -    <!--
    -        If you set the basedir property below, then all reported file
    -        names will be relative to the specified directory. See
    -        http://checkstyle.sourceforge.net/5.x/config.html#Checker
    -
    -        <property name="basedir" value="${basedir}"/>
    -    -->
    -
    -    <!-- Checks that a package-info.java file exists for each package.     -->
    -    <!-- See http://checkstyle.sf.net/config_javadoc.html#JavadocPackage -->
    -    <module name="JavadocPackage"/>
    -
    -    <!-- Checks whether files end with a new line.                        -->
    -    <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
    -    <module name="NewlineAtEndOfFile"/>
    -
    -    <!-- Checks that property files contain the same keys.         -->
    -    <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
    -    <module name="Translation"/>
    -
    -    <!-- Checks for Size Violations.                    -->
    -    <!-- See http://checkstyle.sf.net/config_sizes.html -->
    -    <module name="FileLength"/>
    -
    -    <!-- Checks for whitespace                               -->
    -    <!-- See http://checkstyle.sf.net/config_whitespace.html -->
    -    <module name="FileTabCharacter"/>
    -
    -    <!-- Miscellaneous other checks.                   -->
    -    <!-- See http://checkstyle.sf.net/config_misc.html -->
    -    <module name="RegexpSingleline">
    -       <property name="format" value="\s+$"/>
    -       <property name="minimum" value="0"/>
    -       <property name="maximum" value="0"/>
    -       <property name="message" value="Line has trailing spaces."/>
    -    </module>
    -
    -    <!-- Checks for Headers                                -->
    -    <!-- See http://checkstyle.sf.net/config_header.html   -->
    -    <!-- <module name="Header"> -->
    -    <!--   <property name="headerFile" value="${checkstyle.header.file}"/> -->
    -    <!--   <property name="fileExtensions" value="java"/> -->
    -    <!-- </module> -->
    -
    -    <!-- Allow use of @SuppressWarnings annotation in order to suppress checkstyle warnings. -->
    -    <!-- See http://checkstyle.sourceforge.net/config.html -->
    -    <!-- This filter only works in conjunction with a SuppressWarningsHolder, since that check finds the annotations in
    -         the Java files and makes them available for the filter. Because of that, a configuration that includes this
    -         filter must also include SuppressWarningsHolder as a child module of the TreeWalker. -->
    -    <module name="SuppressWarningsFilter"/>
    -
    -    <module name="TreeWalker">
    -
    -        <!-- Checks for Javadoc comments.                     -->
    -        <!-- See http://checkstyle.sf.net/config_javadoc.html -->
    -        <module name="JavadocMethod">
    -            <property name="scope" value="public"/>
    -            <property name="allowMissingReturnTag" value="true"/>
    -            <property name="allowMissingPropertyJavadoc" value="true"/>
    -            <!-- We do not require JavaDoc comments for constructors. The default is: "METHOD_DEF, CTOR_DEF" -->
    -            <property name="tokens" value="METHOD_DEF"/>
    -            <!-- Allow documenting exceptions that are not declared in the method's 'throws' clause if they are a
    -                 subclass of java.lang.RuntimeException -->
    -            <property name="allowUndeclaredRTE" value="true"/>
    -            <!-- Allow documented exceptions that are subclasses of one of the declared exceptions -->
    -            <property name="allowThrowsTagsForSubclasses" value="true"/>
    -        </module>
    -        <module name="JavadocType">
    -            <property name="scope" value="public"/>
    -        </module>
    -        <module name="JavadocVariable">
    -            <property name="scope" value="public"/>
    -        </module>
    -        <module name="JavadocStyle"/>
    -
    -
    -        <!-- Checks for Naming Conventions.                  -->
    -        <!-- See http://checkstyle.sf.net/config_naming.html -->
    -        <module name="ConstantName"/>
    -        <module name="LocalFinalVariableName"/>
    -        <module name="LocalVariableName"/>
    -        <module name="MemberName"/>
    -        <module name="MethodName"/>
    -        <module name="PackageName">
    -            <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
    -        </module>
    -        <module name="ParameterName"/>
    -        <module name="StaticVariableName"/>
    -        <module name="TypeName"/>
    -
    -
    -        <!-- Checks for imports                              -->
    -        <!-- See http://checkstyle.sf.net/config_import.html -->
    -        <module name="AvoidStarImport"/>
    -        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
    -        <module name="RedundantImport"/>
    -        <module name="UnusedImports"/>
    -
    -
    -        <!-- Checks for Size Violations.                    -->
    -        <!-- See http://checkstyle.sf.net/config_sizes.html -->
    -        <module name="LineLength">
    -            <property name="max" value="120"/>
    -        </module>
    -        <module name="MethodLength"/>
    -        <module name="ParameterNumber"/>
    -
    -
    -        <!-- Checks for whitespace                               -->
    -        <!-- See http://checkstyle.sf.net/config_whitespace.html -->
    -        <module name="EmptyForIteratorPad"/>
    -        <module name="GenericWhitespace"/>
    -        <module name="MethodParamPad"/>
    -        <module name="NoWhitespaceAfter"/>
    -        <module name="NoWhitespaceBefore"/>
    -        <module name="OperatorWrap"/>
    -        <module name="ParenPad"/>
    -        <module name="TypecastParenPad"/>
    -        <module name="WhitespaceAfter"/>
    -        <module name="WhitespaceAround"/>
    -
    -
    -        <!-- Modifier Checks                                    -->
    -        <!-- See http://checkstyle.sf.net/config_modifiers.html -->
    -        <module name="ModifierOrder"/>
    -        <module name="RedundantModifier"/>
    -
    -
    -        <!-- Checks for blocks. You know, those {}'s         -->
    -        <!-- See http://checkstyle.sf.net/config_blocks.html -->
    -        <module name="AvoidNestedBlocks"/>
    -        <module name="EmptyBlock"/>
    -        <module name="LeftCurly"/>
    -        <module name="NeedBraces"/>
    -        <module name="RightCurly"/>
    -
    -
    -        <!-- Checks for common coding problems               -->
    -        <!-- See http://checkstyle.sf.net/config_coding.html -->
    -        <!-- Inline conditionals can actually help readability when used judiciously and they are not nested. -->
    -        <!-- <module name="AvoidInlineConditionals"/> -->
    -        <module name="EmptyStatement"/>
    -        <module name="EqualsHashCode"/>
    -        <module name="HiddenField">
    -            <property name="ignoreConstructorParameter" value="true"/>
    -            <property name="ignoreSetter" value="true"/>
    -        </module>
    -        <module name="IllegalInstantiation"/>
    -        <module name="InnerAssignment"/>
    -        <module name="MagicNumber">
    -            <!-- ignore magic numbers in hashCode methods -->
    -            <property name="ignoreHashCodeMethod" value="true"/>
    -        </module>
    -        <module name="MissingSwitchDefault"/>
    -        <module name="RedundantThrows"/>
    -        <module name="SimplifyBooleanExpression"/>
    -        <module name="SimplifyBooleanReturn"/>
    -
    -        <!-- Checks for class design                         -->
    -        <!-- See http://checkstyle.sf.net/config_design.html -->
    -        <!-- The following would require that nonprivate, nonstatic methods of classes that can be subclassed must
    -             either be abstract or final or have an empty implementation. This is too strict for our taste. -->
    -        <!-- <module name="DesignForExtension"/> -->
    -        <module name="FinalClass"/>
    -        <module name="HideUtilityClassConstructor"/>
    -        <module name="InterfaceIsType"/>
    -        <module name="VisibilityModifier"/>
    -
    -
    -        <!-- Miscellaneous other checks.                   -->
    -        <!-- See http://checkstyle.sf.net/config_misc.html -->
    -        <module name="ArrayTypeStyle"/>
    -        <!-- We decided that requiring the final keyword for each parameter is too verbose -->
    -        <!-- <module name="FinalParameters"/> -->
    -        <module name="TodoComment"/>
    -        <module name="UpperEll"/>
    -
    -        <!-- Maintains a set of check suppressions from @SuppressWarnings annotations. -->
    -        <!-- See http://checkstyle.sourceforge.net/config_annotation.html -->
    -        <!-- Required by module SuppressWarningsFilter above. -->
    -        <module name="SuppressWarningsHolder" />
    -    </module>
    -
    -</module>
    diff --git a/src/main/config/findbugs-exclude.xml b/src/main/config/findbugs-exclude.xml
    deleted file mode 100644
    index 9ff52bc..0000000
    --- a/src/main/config/findbugs-exclude.xml
    +++ /dev/null
    @@ -1,8 +0,0 @@
    -<FindBugsFilter>
    -    <!-- Due to http://sourceforge.net/p/findbugs/bugs/1385/ exclude warnings about tightening nullness annotation on
    -         parameter. -->
    -    <Match>
    -        <Method name="equals" params="java.lang.Object" returns="boolean" />
    -        <Bug pattern="NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION" />
    -    </Match>
    -</FindBugsFilter>
    diff --git a/src/main/config/pmd.xml b/src/main/config/pmd.xml
    deleted file mode 100644
    index 6d81008..0000000
    --- a/src/main/config/pmd.xml
    +++ /dev/null
    @@ -1,16 +0,0 @@
    -<?xml version="1.0"?>
    -<ruleset name="Custom ruleset"
    -    xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
    -    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    -    xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
    -
    -    <description>
    -        PMD Source Code Analyzer configuration for project "Java Types"
    -    </description>
    -
    -    <!-- Use the default Java rulesets that the Maven PMD plugin would use. See
    -         http://maven.apache.org/plugins/maven-pmd-plugin/pmd-mojo.html -->
    -    <rule ref="rulesets/java/basic.xml"/>
    -    <rule ref="rulesets/java/imports.xml"/>
    -    <rule ref="rulesets/java/unusedcode.xml"/>
    -</ruleset>
    diff --git a/src/main/ide/idea-annotations/java/lang/reflect/annotations.xml b/src/main/ide/idea-annotations/java/lang/reflect/annotations.xml
    deleted file mode 100644
    index df06106..0000000
    --- a/src/main/ide/idea-annotations/java/lang/reflect/annotations.xml
    +++ /dev/null
    @@ -1,11 +0,0 @@
    -<root>
    -  <item name='java.lang.reflect.InvocationHandler java.lang.Object invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) 0'>
    -    <annotation name='javax.annotation.Nonnull'/>
    -  </item>
    -  <item name='java.lang.reflect.InvocationHandler java.lang.Object invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) 1'>
    -    <annotation name='javax.annotation.Nonnull'/>
    -  </item>
    -  <item name='java.lang.reflect.InvocationHandler java.lang.Object invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) 2'>
    -    <annotation name='javax.annotation.Nonnull'/>
    -  </item>
    -</root>
    diff --git a/src/main/ide/idea-annotations/javax/lang/model/element/annotations.xml b/src/main/ide/idea-annotations/javax/lang/model/element/annotations.xml
    deleted file mode 100644
    index 5ee7814..0000000
    --- a/src/main/ide/idea-annotations/javax/lang/model/element/annotations.xml
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -<root>
    -  <item name='javax.lang.model.element.Element R accept(javax.lang.model.element.ElementVisitor&lt;R,P&gt;, P) 0'>
    -    <annotation name='javax.annotation.Nonnull'/>
    -  </item>
    -  <item name='javax.lang.model.element.ElementVisitor R visitExecutable(javax.lang.model.element.ExecutableElement, P) 0'>
    -    <annotation name='javax.annotation.Nonnull'/>
    -  </item>
    -  <item name='javax.lang.model.element.ElementVisitor R visitPackage(javax.lang.model.element.PackageElement, P) 0'>
    -    <annotation name='javax.annotation.Nonnull'/>
    -  </item>
    -  <item name='javax.lang.model.element.ElementVisitor R visitType(javax.lang.model.element.TypeElement, P) 0'>
    -    <annotation name='javax.annotation.Nonnull'/>
    -  </item>
    -  <item name='javax.lang.model.element.ElementVisitor R visitTypeParameter(javax.lang.model.element.TypeParameterElement, P) 0'>
    -    <annotation name='javax.annotation.Nonnull'/>
    -  </item>
    -  <item name='javax.lang.model.element.ElementVisitor R visitVariable(javax.lang.model.element.VariableElement, P) 0'>
    -    <annotation name='javax.annotation.Nonnull'/>
    -  </item>
    -  <item name='javax.lang.model.element.Name boolean contentEquals(java.lang.CharSequence) 0'>
    -    <annotation name='javax.annotation.Nonnull'/>
    -  </item>
    -</root>
    diff --git a/src/main/ide/idea-annotations/javax/lang/model/type/annotations.xml b/src/main/ide/idea-annotations/javax/lang/model/type/annotations.xml
    deleted file mode 100644
    index 165db32..0000000
    --- a/src/main/ide/idea-annotations/javax/lang/model/type/annotations.xml
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -<root>
    -  <item name='javax.lang.model.type.TypeMirror R accept(javax.lang.model.type.TypeVisitor&lt;R,P&gt;, P) 0'>
    -    <annotation name='javax.annotation.Nonnull'/>
    -  </item>
    -</root>
    diff --git a/src/main/ide/idea-annotations/javax/lang/model/util/annotations.xml b/src/main/ide/idea-annotations/javax/lang/model/util/annotations.xml
    deleted file mode 100644
    index 71ed36e..0000000
    --- a/src/main/ide/idea-annotations/javax/lang/model/util/annotations.xml
    +++ /dev/null
    @@ -1,98 +0,0 @@
    -<root>
    -    <item name='javax.lang.model.util.AbstractTypeVisitor6 R visitUnknown(javax.lang.model.type.TypeMirror, P) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.SimpleTypeVisitor6 R defaultAction(javax.lang.model.type.TypeMirror, P) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.SimpleTypeVisitor6 R visitArray(javax.lang.model.type.ArrayType, P) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.SimpleTypeVisitor6 R visitDeclared(javax.lang.model.type.DeclaredType, P) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.SimpleTypeVisitor6 R visitNull(javax.lang.model.type.NullType, P) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.SimpleTypeVisitor6 R visitTypeVariable(javax.lang.model.type.TypeVariable, P) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.SimpleTypeVisitor6 R visitWildcard(javax.lang.model.type.WildcardType, P) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types boolean contains(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types boolean contains(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror) 1'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types boolean isAssignable(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types boolean isAssignable(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror) 1'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types boolean isSameType(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types boolean isSameType(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror) 1'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types boolean isSubsignature(javax.lang.model.type.ExecutableType, javax.lang.model.type.ExecutableType) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types boolean isSubsignature(javax.lang.model.type.ExecutableType, javax.lang.model.type.ExecutableType) 1'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types boolean isSubtype(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types boolean isSubtype(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror) 1'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types java.util.List&lt;? extends javax.lang.model.type.TypeMirror&gt; directSupertypes(javax.lang.model.type.TypeMirror) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.element.Element asElement(javax.lang.model.type.TypeMirror) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.element.TypeElement boxedClass(javax.lang.model.type.PrimitiveType) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.ArrayType getArrayType(javax.lang.model.type.TypeMirror) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.DeclaredType getDeclaredType(javax.lang.model.element.TypeElement, javax.lang.model.type.TypeMirror...) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.DeclaredType getDeclaredType(javax.lang.model.element.TypeElement, javax.lang.model.type.TypeMirror...) 1'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.DeclaredType getDeclaredType(javax.lang.model.type.DeclaredType, javax.lang.model.element.TypeElement, javax.lang.model.type.TypeMirror...) 1'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.DeclaredType getDeclaredType(javax.lang.model.type.DeclaredType, javax.lang.model.element.TypeElement, javax.lang.model.type.TypeMirror...) 2'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.NoType getNoType(javax.lang.model.type.TypeKind) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.PrimitiveType getPrimitiveType(javax.lang.model.type.TypeKind) 0'>
    -      <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.PrimitiveType unboxedType(javax.lang.model.type.TypeMirror) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.TypeMirror asMemberOf(javax.lang.model.type.DeclaredType, javax.lang.model.element.Element) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.TypeMirror asMemberOf(javax.lang.model.type.DeclaredType, javax.lang.model.element.Element) 1'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.TypeMirror capture(javax.lang.model.type.TypeMirror) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -    <item name='javax.lang.model.util.Types javax.lang.model.type.TypeMirror erasure(javax.lang.model.type.TypeMirror) 0'>
    -        <annotation name='javax.annotation.Nonnull'/>
    -    </item>
    -</root>
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/AnnotatedConstructImpl.java b/src/main/java/net/florianschoppmann/java/reflect/AnnotatedConstructImpl.java
    deleted file mode 100644
    index d966c60..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/AnnotatedConstructImpl.java
    +++ /dev/null
    @@ -1,30 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import net.florianschoppmann.java.type.AnnotatedConstruct;
    -
    -import javax.lang.model.element.AnnotationMirror;
    -import java.lang.annotation.Annotation;
    -import java.util.List;
    -
    -abstract class AnnotatedConstructImpl implements AnnotatedConstruct {
    -    static UnsupportedOperationException unsupportedException() {
    -        return new UnsupportedOperationException(String.format(
    -            "Annotations not currently supported by %s.", ReflectionTypes.class
    -        ));
    -    }
    -
    -    @Override
    -    public final List<? extends AnnotationMirror> getAnnotationMirrors() {
    -        throw unsupportedException();
    -    }
    -
    -    @Override
    -    public final <A extends Annotation> A getAnnotation(Class<A> annotationType) {
    -        throw unsupportedException();
    -    }
    -
    -    @Override
    -    public final <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) {
    -        throw unsupportedException();
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/ArrayTypeImpl.java b/src/main/java/net/florianschoppmann/java/reflect/ArrayTypeImpl.java
    deleted file mode 100644
    index db48529..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/ArrayTypeImpl.java
    +++ /dev/null
    @@ -1,55 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.type.ArrayType;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeVisitor;
    -import java.util.Objects;
    -
    -final class ArrayTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, ArrayType {
    -    private final ReflectionTypeMirror componentType;
    -
    -    ArrayTypeImpl(ReflectionTypeMirror componentType) {
    -        Objects.requireNonNull(componentType);
    -
    -        this.componentType = componentType;
    -    }
    -
    -    @Override
    -    public boolean equals(@Nullable Object otherObject) {
    -        if (this == otherObject) {
    -            return true;
    -        } else if (otherObject == null || getClass() != otherObject.getClass()) {
    -            return false;
    -        }
    -
    -        return componentType.equals(((ArrayTypeImpl) otherObject).componentType);
    -    }
    -
    -    @Override
    -    public int hashCode() {
    -        // Do not return just componentType.hashCode() because both this instance and componentType are of type
    -        // ReflectionTypeMirror.
    -        return Objects.hash(getClass(), componentType.hashCode());
    -    }
    -
    -    @Override
    -    public String toString() {
    -        return ReflectionTypes.getInstance().toString(this);
    -    }
    -
    -    @Override
    -    public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
    -        return visitor.visitArray(this, parameter);
    -    }
    -
    -    @Override
    -    public ReflectionTypeMirror getComponentType() {
    -        return componentType;
    -    }
    -
    -    @Override
    -    public TypeKind getKind() {
    -        return TypeKind.ARRAY;
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/DeclaredTypeImpl.java b/src/main/java/net/florianschoppmann/java/reflect/DeclaredTypeImpl.java
    deleted file mode 100644
    index 49d366c..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/DeclaredTypeImpl.java
    +++ /dev/null
    @@ -1,74 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.type.DeclaredType;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeVisitor;
    -import java.util.List;
    -import java.util.Objects;
    -
    -final class DeclaredTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, DeclaredType {
    -    private final ReflectionTypeMirror enclosingType;
    -    private final TypeElementImpl typeElement;
    -    private final ImmutableList<? extends ReflectionTypeMirror> typeArguments;
    -
    -    DeclaredTypeImpl(ReflectionTypeMirror enclosingType, TypeElementImpl typeElement,
    -            List<? extends ReflectionTypeMirror> typeArguments) {
    -        Objects.requireNonNull(enclosingType);
    -        Objects.requireNonNull(typeElement);
    -        Objects.requireNonNull(typeArguments);
    -
    -        this.enclosingType = enclosingType;
    -        this.typeElement = typeElement;
    -        this.typeArguments = ImmutableList.copyOf(typeArguments);
    -    }
    -
    -    @Override
    -    public boolean equals(@Nullable Object otherObject) {
    -        if (this == otherObject) {
    -            return true;
    -        } else if (otherObject == null || getClass() != otherObject.getClass()) {
    -            return false;
    -        }
    -
    -        DeclaredTypeImpl other = (DeclaredTypeImpl) otherObject;
    -        return enclosingType.equals(other.enclosingType)
    -            && typeElement.equals(other.typeElement)
    -            && typeArguments.equals(other.typeArguments);
    -    }
    -
    -    @Override
    -    public int hashCode() {
    -        return Objects.hash(enclosingType, typeElement, typeArguments);
    -    }
    -
    -    @Override
    -    public String toString() {
    -        return ReflectionTypes.getInstance().toString(this);
    -    }
    -
    -    @Override
    -    public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
    -        return visitor.visitDeclared(this, parameter);
    -    }
    -
    -    @Override
    -    public TypeElementImpl asElement() {
    -        return typeElement;
    -    }
    -
    -    @Override
    -    public ReflectionTypeMirror getEnclosingType() {
    -        return enclosingType;
    -    }
    -
    -    @Override
    -    public List<? extends ReflectionTypeMirror> getTypeArguments() {
    -        return typeArguments;
    -    }
    -
    -    @Override
    -    public TypeKind getKind() {
    -        return TypeKind.DECLARED;
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/ElementImpl.java b/src/main/java/net/florianschoppmann/java/reflect/ElementImpl.java
    deleted file mode 100644
    index 442066f..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/ElementImpl.java
    +++ /dev/null
    @@ -1,34 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.lang.model.element.Modifier;
    -import java.util.Set;
    -
    -abstract class ElementImpl extends AnnotatedConstructImpl implements ReflectionElement {
    -    private boolean finished = false;
    -
    -    @Override
    -    public final Set<Modifier> getModifiers() {
    -        throw new UnsupportedOperationException(String.format(
    -            "Modifiers not currently supported by %s.", ReflectionTypes.class
    -        ));
    -    }
    -
    -    final void requireFinished() {
    -        if (!finished) {
    -            throw new IllegalStateException(String.format("Instance of %s used before it was ready.", getClass()));
    -        }
    -    }
    -
    -    abstract void finishDerivedFromElement(MirrorContext mirrorContext);
    -
    -    final void finish(MirrorContext mirrorContext) {
    -        if (finished) {
    -            throw new IllegalStateException(String.format(
    -                "Attempt to finish instance of %s more than once.", getClass()
    -            ));
    -        }
    -
    -        finished = true;
    -        finishDerivedFromElement(mirrorContext);
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/ImmutableList.java b/src/main/java/net/florianschoppmann/java/reflect/ImmutableList.java
    deleted file mode 100644
    index 3a29a9b..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/ImmutableList.java
    +++ /dev/null
    @@ -1,40 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import java.util.AbstractList;
    -import java.util.List;
    -
    -final class ImmutableList<E> extends AbstractList<E> {
    -    private static final ImmutableList<?> EMPTY_LIST = new ImmutableList<>(new Object[0]);
    -
    -    private final Object[] array;
    -
    -    private ImmutableList(Object[] array) {
    -        this.array = array;
    -    }
    -
    -    static <E> ImmutableList<E> copyOf(List<E> original) {
    -        if (original instanceof ImmutableList<?>) {
    -            return (ImmutableList<E>) original;
    -        } else {
    -            return new ImmutableList<>(original.toArray(new Object[original.size()]));
    -        }
    -    }
    -
    -    @SuppressWarnings("unchecked")
    -    static <E> ImmutableList<E> emptyList() {
    -        return (ImmutableList<E>) EMPTY_LIST;
    -    }
    -
    -    @Override
    -    @Nullable
    -    @SuppressWarnings("unchecked")
    -    public E get(int index) {
    -        return (E) array[index];
    -    }
    -
    -    @Override
    -    public int size() {
    -        return array.length;
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/IntersectionTypeImpl.java b/src/main/java/net/florianschoppmann/java/reflect/IntersectionTypeImpl.java
    deleted file mode 100644
    index 38feef1..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/IntersectionTypeImpl.java
    +++ /dev/null
    @@ -1,63 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import net.florianschoppmann.java.type.IntersectionType;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeMirror;
    -import javax.lang.model.type.TypeVisitor;
    -import java.util.List;
    -import java.util.Objects;
    -
    -final class IntersectionTypeImpl extends AnnotatedConstructImpl implements IntersectionType, ReflectionTypeMirror {
    -    private final ImmutableList<ReflectionTypeMirror> bounds;
    -
    -    IntersectionTypeImpl(List<ReflectionTypeMirror> bounds) {
    -        Objects.requireNonNull(bounds);
    -
    -        this.bounds = ImmutableList.copyOf(bounds);
    -    }
    -
    -    @Override
    -    public boolean equals(@Nullable Object otherObject) {
    -        if (this == otherObject) {
    -            return true;
    -        } else if (otherObject == null || getClass() != otherObject.getClass()) {
    -            return false;
    -        }
    -
    -        return bounds.equals(((IntersectionTypeImpl) otherObject).bounds);
    -    }
    -
    -    @Override
    -    public int hashCode() {
    -        // Do not return just bounds.hashCode() because both this instance and componentType are of type
    -        // ReflectionTypeMirror.
    -        return Objects.hash(getClass(), bounds.hashCode());
    -    }
    -
    -    @Override
    -    public String toString() {
    -        return ReflectionTypes.getInstance().toString(this);
    -    }
    -
    -    @Override
    -    public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
    -        return visitor.visitUnknown(this, parameter);
    -    }
    -
    -    @Override
    -    public List<? extends TypeMirror> getBounds() {
    -        return bounds;
    -    }
    -
    -    @Override
    -    public TypeKind getKind() {
    -        return TypeKind.OTHER;
    -    }
    -
    -    @Override
    -    public boolean isIntersectionType() {
    -        return true;
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/MirrorContext.java b/src/main/java/net/florianschoppmann/java/reflect/MirrorContext.java
    deleted file mode 100644
    index 94cdcb4..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/MirrorContext.java
    +++ /dev/null
    @@ -1,65 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import java.lang.reflect.Type;
    -import java.util.ArrayList;
    -import java.util.List;
    -import java.util.Map;
    -
    -final class MirrorContext {
    -    private final ReflectionTypes reflectionTypes;
    -    private final Map<Class<?>, TypeElementImpl> typeDeclarations;
    -    private final Map<Class<?>, TypeElementImpl> newTypeDeclarations;
    -
    -    MirrorContext(ReflectionTypes reflectionTypes, Map<Class<?>, TypeElementImpl> typeDeclarations,
    -            Map<Class<?>, TypeElementImpl> newTypeDeclarations) {
    -        this.reflectionTypes = reflectionTypes;
    -        this.typeDeclarations = typeDeclarations;
    -        this.newTypeDeclarations = newTypeDeclarations;
    -    }
    -
    -    ImmutableList<ReflectionTypeMirror> mirror(Type[] types) {
    -        List<ReflectionTypeMirror> typeMirrors = new ArrayList<>();
    -        for (Type type: types) {
    -            typeMirrors.add(reflectionTypes.mirrorInternal(type, this));
    -        }
    -        return ImmutableList.copyOf(typeMirrors);
    -    }
    -
    -    /**
    -     * Returns a type mirror for the given {@link Type} object.
    -     *
    -     * <p>This method creates a type mirror within this mirror context. This is similar, but different, to
    -     * {@link ReflectionTypes#typeMirror(Type)}, which starts a <em>new</em> mirror context.
    -     *
    -     * @param type type as represented by Java Reflection API
    -     * @return type mirror for the given reflection type
    -     */
    -    ReflectionTypeMirror mirror(Type type) {
    -        return reflectionTypes.mirrorInternal(type, this);
    -    }
    -
    -    /**
    -     * Returns a type element for the given {@link Class} object.
    -     *
    -     * <p>This methods provides a type element that has been created within this mirror context. Within a mirror
    -     * context, type elements are always reused. This method is similar, but different, to
    -     * {@link ReflectionTypes#typeElement(Class)}, which starts a <em>new</em> mirror context.
    -     *
    -     * @param clazz class object
    -     * @return type element for the given class
    -     */
    -    TypeElementImpl typeDeclaration(Class<?> clazz) {
    -        @Nullable TypeElementImpl typeDeclaration = typeDeclarations.get(clazz);
    -        if (typeDeclaration != null) {
    -            return typeDeclaration;
    -        }
    -
    -        @Nullable TypeElementImpl newTypeDeclaration = newTypeDeclarations.get(clazz);
    -        if (newTypeDeclaration == null) {
    -            newTypeDeclaration = new TypeElementImpl(clazz);
    -            newTypeDeclarations.put(clazz, newTypeDeclaration);
    -        }
    -        return newTypeDeclaration;
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/NameImpl.java b/src/main/java/net/florianschoppmann/java/reflect/NameImpl.java
    deleted file mode 100644
    index a5e0ff9..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/NameImpl.java
    +++ /dev/null
    @@ -1,54 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.element.Name;
    -import java.util.Objects;
    -
    -final class NameImpl implements Name {
    -    private final String name;
    -
    -    NameImpl(String name) {
    -        this.name = Objects.requireNonNull(name);
    -    }
    -
    -    @Override
    -    public boolean equals(@Nullable Object otherObject) {
    -        if (this == otherObject) {
    -            return true;
    -        } else if (otherObject == null || getClass() != otherObject.getClass()) {
    -            return false;
    -        }
    -
    -        return name.equals(((NameImpl) otherObject).name);
    -    }
    -
    -    @Override
    -    public int hashCode() {
    -        return name.hashCode();
    -    }
    -
    -    @Override
    -    public boolean contentEquals(CharSequence charSequence) {
    -        return name.contentEquals(charSequence);
    -    }
    -
    -    @Override
    -    public int length() {
    -        return name.length();
    -    }
    -
    -    @Override
    -    public char charAt(int index) {
    -        return name.charAt(index);
    -    }
    -
    -    @Override
    -    public CharSequence subSequence(int start, int end) {
    -        return name.subSequence(start, end);
    -    }
    -
    -    @Override
    -    public String toString() {
    -        return name;
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/NoTypeImpl.java b/src/main/java/net/florianschoppmann/java/reflect/NoTypeImpl.java
    deleted file mode 100644
    index 0f4bb6b..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/NoTypeImpl.java
    +++ /dev/null
    @@ -1,32 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.type.NoType;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeVisitor;
    -
    -final class NoTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, NoType {
    -    static final NoTypeImpl VOID = new NoTypeImpl(TypeKind.VOID);
    -    static final NoTypeImpl NONE = new NoTypeImpl(TypeKind.NONE);
    -
    -    private final TypeKind typeKind;
    -
    -    NoTypeImpl(TypeKind typeKind) {
    -        this.typeKind = typeKind;
    -    }
    -
    -    @Override
    -    public String toString() {
    -        return ReflectionTypes.getInstance().toString(this);
    -    }
    -
    -    @Override
    -    public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
    -        return visitor.visitNoType(this, parameter);
    -    }
    -
    -    @Override
    -    public TypeKind getKind() {
    -        return typeKind;
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/NullTypeImpl.java b/src/main/java/net/florianschoppmann/java/reflect/NullTypeImpl.java
    deleted file mode 100644
    index 32c6e5a..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/NullTypeImpl.java
    +++ /dev/null
    @@ -1,25 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.type.NullType;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeVisitor;
    -
    -final class NullTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, NullType {
    -    static final NullTypeImpl INSTANCE = new NullTypeImpl();
    -
    -    @Override
    -    public String toString() {
    -        return ReflectionTypes.getInstance().toString(this);
    -    }
    -
    -    @Override
    -    public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
    -        return visitor.visitNull(this, parameter);
    -    }
    -
    -    @Override
    -    public TypeKind getKind() {
    -        return TypeKind.NULL;
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/PrimitiveTypeImpl.java b/src/main/java/net/florianschoppmann/java/reflect/PrimitiveTypeImpl.java
    deleted file mode 100644
    index da1a161..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/PrimitiveTypeImpl.java
    +++ /dev/null
    @@ -1,38 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.type.PrimitiveType;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeVisitor;
    -
    -final class PrimitiveTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, PrimitiveType {
    -    static final PrimitiveTypeImpl DOUBLE = new PrimitiveTypeImpl(TypeKind.DOUBLE);
    -    static final PrimitiveTypeImpl FLOAT = new PrimitiveTypeImpl(TypeKind.FLOAT);
    -    static final PrimitiveTypeImpl LONG = new PrimitiveTypeImpl(TypeKind.LONG);
    -    static final PrimitiveTypeImpl INT = new PrimitiveTypeImpl(TypeKind.INT);
    -    static final PrimitiveTypeImpl SHORT = new PrimitiveTypeImpl(TypeKind.SHORT);
    -    static final PrimitiveTypeImpl BYTE = new PrimitiveTypeImpl(TypeKind.BYTE);
    -    static final PrimitiveTypeImpl CHAR = new PrimitiveTypeImpl(TypeKind.CHAR);
    -    static final PrimitiveTypeImpl BOOLEAN = new PrimitiveTypeImpl(TypeKind.BOOLEAN);
    -
    -    private final TypeKind typeKind;
    -
    -    PrimitiveTypeImpl(TypeKind typeKind) {
    -        this.typeKind = typeKind;
    -    }
    -
    -    @Override
    -    public String toString() {
    -        return ReflectionTypes.getInstance().toString(this);
    -    }
    -
    -    @Override
    -    public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
    -        return visitor.visitPrimitive(this, parameter);
    -    }
    -
    -    @Override
    -    public TypeKind getKind() {
    -        return typeKind;
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/ReflectionElement.java b/src/main/java/net/florianschoppmann/java/reflect/ReflectionElement.java
    deleted file mode 100644
    index 4645c28..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/ReflectionElement.java
    +++ /dev/null
    @@ -1,19 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import net.florianschoppmann.java.type.AnnotatedConstruct;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.element.Element;
    -import java.util.List;
    -
    -interface ReflectionElement extends Element, AnnotatedConstruct {
    -    @Override
    -    ReflectionTypeMirror asType();
    -
    -    @Override
    -    @Nullable
    -    ReflectionElement getEnclosingElement();
    -
    -    @Override
    -    List<? extends ReflectionElement> getEnclosedElements();
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/ReflectionParameterizable.java b/src/main/java/net/florianschoppmann/java/reflect/ReflectionParameterizable.java
    deleted file mode 100644
    index 45c6b79..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/ReflectionParameterizable.java
    +++ /dev/null
    @@ -1,9 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.lang.model.element.Parameterizable;
    -import java.util.List;
    -
    -interface ReflectionParameterizable extends Parameterizable, ReflectionElement {
    -    @Override
    -    List<TypeParameterElementImpl> getTypeParameters();
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/ReflectionTypeMirror.java b/src/main/java/net/florianschoppmann/java/reflect/ReflectionTypeMirror.java
    deleted file mode 100644
    index 518c9f8..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/ReflectionTypeMirror.java
    +++ /dev/null
    @@ -1,12 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import net.florianschoppmann.java.type.AnnotatedConstruct;
    -
    -import javax.lang.model.type.TypeMirror;
    -
    -/**
    - * Common super-interface of all {@link TypeMirror} implementations in this package.
    - *
    - * <p>This is an interface, and not an abstract class, because some implementations are enums and not classes.
    - */
    -interface ReflectionTypeMirror extends TypeMirror, AnnotatedConstruct { }
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/ReflectionTypes.java b/src/main/java/net/florianschoppmann/java/reflect/ReflectionTypes.java
    deleted file mode 100644
    index 25173f6..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/ReflectionTypes.java
    +++ /dev/null
    @@ -1,470 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import net.florianschoppmann.java.type.AbstractTypes;
    -import net.florianschoppmann.java.type.IntersectionType;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.element.Element;
    -import javax.lang.model.element.Name;
    -import javax.lang.model.element.TypeElement;
    -import javax.lang.model.element.TypeParameterElement;
    -import javax.lang.model.type.ArrayType;
    -import javax.lang.model.type.DeclaredType;
    -import javax.lang.model.type.ExecutableType;
    -import javax.lang.model.type.NoType;
    -import javax.lang.model.type.NullType;
    -import javax.lang.model.type.PrimitiveType;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeMirror;
    -import java.lang.reflect.GenericArrayType;
    -import java.lang.reflect.GenericDeclaration;
    -import java.lang.reflect.ParameterizedType;
    -import java.lang.reflect.Type;
    -import java.lang.reflect.TypeVariable;
    -import java.lang.reflect.WildcardType;
    -import java.util.ArrayList;
    -import java.util.Arrays;
    -import java.util.Collections;
    -import java.util.LinkedHashMap;
    -import java.util.List;
    -import java.util.Map;
    -import java.util.Objects;
    -
    -/**
    - * Implementation of {@link javax.lang.model.util.Types} backed by the Java Reflection API.
    - *
    - * <p>All {@link Element} and {@link TypeMirror} objects returned by this class are immutable and therefore thread-safe.
    - * Likewise, only a stateless (and thus thread-safe) singleton instance of this class is available via
    - * {@link #getInstance()}.
    - *
    - * <p>Currently unsupported are (resulting in an {@link UnsupportedOperationException}):
    - * <ul><li>
    - *     Type parameters in method declarations. See {@link #typeMirror(Type)} for details.
    - * </li><li>
    - *     {@link #directSupertypes(TypeMirror)}
    - * </li><li>
    - *     {@link #asMemberOf(DeclaredType, Element)}
    - * </li><li>
    - *     {@link #isAssignable(TypeMirror, TypeMirror)}
    - * </li><li>
    - *     {@link #isSubsignature(ExecutableType, ExecutableType)}
    - * </li></ul>
    - */
    -public final class ReflectionTypes extends AbstractTypes {
    -    private static final ReflectionTypes INSTANCE = new ReflectionTypes();
    -
    -    private final ImmutableList<PrimitiveTypeImpl> primitiveTypes;
    -    private final ImmutableList<TypeElementImpl> boxedTypeDeclarations;
    -    {
    -        List<PrimitiveTypeImpl> newTypes = new ArrayList<>(TypeKind.values().length);
    -        List<TypeElementImpl> newDeclarations = new ArrayList<>(TypeKind.values().length);
    -
    -        newTypes.addAll(Collections.<PrimitiveTypeImpl>nCopies(TypeKind.values().length, null));
    -        newDeclarations.addAll(Collections.<TypeElementImpl>nCopies(TypeKind.values().length, null));
    -
    -        addPrimitive(newTypes, newDeclarations, TypeKind.DOUBLE, PrimitiveTypeImpl.DOUBLE, Double.class);
    -        addPrimitive(newTypes, newDeclarations, TypeKind.FLOAT, PrimitiveTypeImpl.FLOAT, Float.class);
    -        addPrimitive(newTypes, newDeclarations, TypeKind.LONG, PrimitiveTypeImpl.LONG, Long.class);
    -        addPrimitive(newTypes, newDeclarations, TypeKind.INT, PrimitiveTypeImpl.INT, Integer.class);
    -        addPrimitive(newTypes, newDeclarations, TypeKind.SHORT, PrimitiveTypeImpl.SHORT, Short.class);
    -        addPrimitive(newTypes, newDeclarations, TypeKind.BYTE, PrimitiveTypeImpl.BYTE, Byte.class);
    -        addPrimitive(newTypes, newDeclarations, TypeKind.CHAR, PrimitiveTypeImpl.CHAR, Character.class);
    -        addPrimitive(newTypes, newDeclarations, TypeKind.BOOLEAN, PrimitiveTypeImpl.BOOLEAN, Boolean.class);
    -
    -        primitiveTypes = ImmutableList.copyOf(newTypes);
    -        boxedTypeDeclarations = ImmutableList.copyOf(newDeclarations);
    -    }
    -
    -    private ReflectionTypes() { }
    -
    -    /**
    -     * Returns the singleton instance of this class.
    -     *
    -     * <p>Since this class does not contain any state, and since it is immutable, the returned instance is thread-safe.
    -     *
    -     * @return the singleton instance of this class
    -     */
    -    public static ReflectionTypes getInstance() {
    -        return INSTANCE;
    -    }
    -
    -    @Override
    -    protected void requireValidElement(Element element) {
    -        Objects.requireNonNull(element);
    -        if (!(element instanceof ReflectionElement)) {
    -            throw new IllegalArgumentException(String.format(
    -                "Expected %s instance that was created by %s, but got instance of %s.",
    -                Element.class.getSimpleName(), ReflectionTypes.class, element.getClass()
    -            ));
    -        }
    -    }
    -
    -    @Override
    -    protected void requireValidType(@Nullable TypeMirror type) {
    -        if (!(type instanceof ReflectionTypeMirror) && type != null) {
    -            throw new IllegalArgumentException(String.format(
    -                "Expected %s instance that was created by %s, but got instance of %s.",
    -                TypeMirror.class.getSimpleName(), ReflectionTypes.class, type.getClass()
    -            ));
    -        }
    -    }
    -
    -    private void addPrimitive(List<PrimitiveTypeImpl> newPrimitiveTypes, List<TypeElementImpl> newBoxedTypeDeclarations,
    -            TypeKind kind, PrimitiveTypeImpl primitiveType, Class<?> clazz) {
    -        newPrimitiveTypes.set(kind.ordinal(), primitiveType);
    -        newBoxedTypeDeclarations.set(kind.ordinal(), ((DeclaredTypeImpl) typeMirror(clazz)).asElement());
    -    }
    -
    -    @Override
    -    public TypeElement boxedClass(PrimitiveType primitiveType) {
    -        requireValidType(Objects.requireNonNull(primitiveType));
    -        @Nullable TypeElementImpl typeElement = boxedTypeDeclarations.get(primitiveType.getKind().ordinal());
    -        assert typeElement != null : "Array with boxed type declarations incorrectly initialized.";
    -        return typeElement;
    -    }
    -
    -    @Override
    -    public PrimitiveType unboxedType(TypeMirror type) {
    -        requireValidType(Objects.requireNonNull(type));
    -
    -        if (type.getKind() != TypeKind.DECLARED) {
    -            throw new IllegalArgumentException(String.format(
    -                "Expected type mirror of kind %s, but got %s.", TypeKind.DECLARED, type
    -            ));
    -        }
    -
    -        Name name = ((DeclaredTypeImpl) type).asElement().getQualifiedName();
    -        if (name.contentEquals(Double.class.getName())) {
    -            return PrimitiveTypeImpl.DOUBLE;
    -        } else if (name.contentEquals(Float.class.getName())) {
    -            return PrimitiveTypeImpl.FLOAT;
    -        } else if (name.contentEquals(Long.class.getName())) {
    -            return PrimitiveTypeImpl.LONG;
    -        } else if (name.contentEquals(Integer.class.getName())) {
    -            return PrimitiveTypeImpl.INT;
    -        } else if (name.contentEquals(Short.class.getName())) {
    -            return PrimitiveTypeImpl.SHORT;
    -        } else if (name.contentEquals(Byte.class.getName())) {
    -            return PrimitiveTypeImpl.BYTE;
    -        } else if (name.contentEquals(Character.class.getName())) {
    -            return PrimitiveTypeImpl.CHAR;
    -        } else if (name.contentEquals(Boolean.class.getName())) {
    -            return PrimitiveTypeImpl.BOOLEAN;
    -        } else {
    -            throw new IllegalArgumentException(String.format("Expected boxed type, but got %s.", type));
    -        }
    -    }
    -
    -    /**
    -     * Returns a type mirror for the given {@link Class} object.
    -     */
    -    private ReflectionTypeMirror mirrorClass(Class<?> clazz, MirrorContext mirrorContext) {
    -        if (clazz.isArray()) {
    -            return new ArrayTypeImpl(mirrorContext.mirror(clazz.getComponentType()));
    -        } else if (clazz.isPrimitive()) {
    -            return (ReflectionTypeMirror) getPrimitiveType(TypeKind.valueOf(clazz.getName().toUpperCase()));
    -        } else {
    -            // raw type
    -            @Nullable Class<?> enclosingClass = clazz.getEnclosingClass();
    -            ReflectionTypeMirror enclosingType = enclosingClass == null
    -                ? NoTypeImpl.NONE
    -                : mirrorContext.mirror(enclosingClass);
    -            return new DeclaredTypeImpl(enclosingType, mirrorContext.typeDeclaration(clazz),
    -                Collections.<ReflectionTypeMirror>emptyList());
    -        }
    -    }
    -
    -    /**
    -     * Returns a type mirror for the given {@link ParameterizedType} object.
    -     */
    -    private static DeclaredTypeImpl mirrorParameterizedType(ParameterizedType parameterizedType,
    -            MirrorContext mirrorContext) {
    -        Class<?> rawClass = (Class<?>) parameterizedType.getRawType();
    -        TypeElementImpl typeDeclaration = mirrorContext.typeDeclaration(rawClass);
    -        @Nullable Type ownerType = parameterizedType.getOwnerType();
    -        ReflectionTypeMirror ownerTypeMirror = ownerType == null
    -            ? NoTypeImpl.NONE
    -            : mirrorContext.mirror(ownerType);
    -        return new DeclaredTypeImpl(ownerTypeMirror, typeDeclaration,
    -            mirrorContext.mirror(parameterizedType.getActualTypeArguments()));
    -    }
    -
    -    /**
    -     * Returns a type mirror for the given {@link WildcardType} object.
    -     *
    -     * <p>The following preconditions are guaranteed by the JLS and the JavaDoc of package {@link java.lang.reflect}:
    -     * <ul><li>
    -     *     {@link WildcardType#getUpperBounds()} specifies: "Note that if no upper bound is explicitly
    -     *     declared, the upper bound is {@code Object}."
    -     * </li><li>
    -     *     While {@link WildcardType#getUpperBounds()} and
    -     *     {@link WildcardType#getLowerBounds()} return an arrays, JLS §4.5.1 (at least up to
    -     *     version 8) only supports a single ReferenceType for both bounds.
    -     * </li></ul>
    -     */
    -    private static WildcardTypeImpl mirrorWildcardType(WildcardType wildcardType, MirrorContext mirrorContext) {
    -        Type[] upperBounds = wildcardType.getUpperBounds();
    -        Type[] lowerBounds = wildcardType.getLowerBounds();
    -
    -        // See JavaDoc for an explanation of the following assert statement.
    -        assert upperBounds.length == 1 && lowerBounds.length <= 1
    -            && (lowerBounds.length == 0 || Object.class.equals(upperBounds[0]));
    -
    -        @Nullable ReflectionTypeMirror extendsBounds;
    -        if (Object.class.equals(upperBounds[0])) {
    -            extendsBounds = null;
    -        } else {
    -            extendsBounds = mirrorContext.mirror(upperBounds[0]);
    -        }
    -
    -        @Nullable ReflectionTypeMirror superBound;
    -        if (lowerBounds.length == 0) {
    -            superBound = null;
    -        } else {
    -            superBound = mirrorContext.mirror(lowerBounds[0]);
    -        }
    -        return new WildcardTypeImpl(extendsBounds, superBound);
    -    }
    -
    -    static void requireCondition(boolean condition, String formatString, Object argument) {
    -        if (!condition) {
    -            throw new IllegalStateException(String.format(formatString, argument));
    -        }
    -    }
    -
    -    private static TypeVariableImpl mirrorTypeVariable(TypeVariable<?> typeVariable, MirrorContext mirrorContext) {
    -        GenericDeclaration genericDeclaration = typeVariable.getGenericDeclaration();
    -        if (genericDeclaration instanceof Class<?>) {
    -            TypeElementImpl typeDeclaration = mirrorContext.typeDeclaration((Class<?>) genericDeclaration);
    -            @Nullable TypeParameterElementImpl element = null;
    -            for (TypeParameterElementImpl typeParameter: typeDeclaration.getTypeParameters()) {
    -                if (typeParameter.getSimpleName().contentEquals(typeVariable.getName())) {
    -                    element = typeParameter;
    -                    break;
    -                }
    -            }
    -            requireCondition(element != null,
    -                "Could not find the type-parameter element that corresponds to type variable %s.", typeVariable);
    -            assert element != null : "redundant check for FindBugs";
    -            return element.asType();
    -        } else {
    -            throw new UnsupportedOperationException("Method or constructor type parameters not supported.");
    -        }
    -    }
    -
    -    ReflectionTypeMirror mirrorInternal(Type type, MirrorContext mirrorContext) {
    -        @Nullable ReflectionTypeMirror typeMirror = null;
    -        if (type instanceof Class<?>) {
    -            typeMirror = mirrorClass((Class<?>) type, mirrorContext);
    -        } else if (type instanceof ParameterizedType) {
    -            typeMirror = mirrorParameterizedType((ParameterizedType) type, mirrorContext);
    -        } else if (type instanceof GenericArrayType) {
    -            typeMirror = new ArrayTypeImpl(
    -                mirrorContext.mirror(((GenericArrayType) type).getGenericComponentType())
    -            );
    -        } else if (type instanceof WildcardType) {
    -            typeMirror = mirrorWildcardType((WildcardType) type, mirrorContext);
    -        } else if (type instanceof TypeVariable<?>) {
    -            typeMirror = mirrorTypeVariable((TypeVariable<?>) type, mirrorContext);
    -        }
    -        requireCondition(typeMirror != null,
    -            "Expected Class, ParameterizedType, GenericArrayType, WildcardType, or TypeVariable instance, but got %s.",
    -            type);
    -        assert typeMirror != null : "redundant check for FindBugs";
    -        return typeMirror;
    -    }
    -
    -    /**
    -     * Returns a type element corresponding to the given {@link Class} object.
    -     *
    -     * @param clazz class object
    -     * @return type element corresponding to the given {@link Class} object
    -     * @throws IllegalArgumentException if the given class represents a primitive or array type
    -     * @throws UnsupportedOperationException if a generic declaration is referenced that is not of type {@link Class},
    -     *     see {@link #typeMirror(Type)} for details
    -     */
    -    public TypeElement typeElement(Class<?> clazz) {
    -        if (clazz.isArray() || clazz.isPrimitive()) {
    -            throw new IllegalArgumentException(String.format("Expected class or interface type, but got %s.", clazz));
    -        }
    -
    -        return ((DeclaredTypeImpl) typeMirror(clazz)).asElement();
    -    }
    -
    -    /**
    -     * Returns a type mirror corresponding to the given Java reflection type.
    -     *
    -     * <p>Type parameters in method declarations are not currently supported. That is, if the given type references a
    -     * {@link TypeVariable} instance that has a {@link java.lang.reflect.Constructor} or
    -     * {@link java.lang.reflect.Method} as generic declaration, an {@link UnsupportedOperationException}
    -     * will be thrown.
    -     *
    -     * @param type type as represented by Java Reflection API
    -     * @return type mirror corresponding to the given Java reflection type
    -     * @throws UnsupportedOperationException if a generic declaration is referenced that is not of type {@link Class}
    -     */
    -    @Override
    -    public TypeMirror typeMirror(Type type) {
    -        Map<Class<?>, TypeElementImpl> typeDeclarations = new LinkedHashMap<>();
    -        Map<Class<?>, TypeElementImpl> newTypeDeclarations = new LinkedHashMap<>();
    -        MirrorContext mirrorContext = new MirrorContext(this, typeDeclarations, newTypeDeclarations);
    -
    -        TypeMirror typeMirror = mirrorInternal(type, mirrorContext);
    -        while (!newTypeDeclarations.isEmpty()) {
    -            List<TypeElementImpl> typeDeclarationsToFinish = new ArrayList<>(newTypeDeclarations.values());
    -            typeDeclarations.putAll(newTypeDeclarations);
    -            newTypeDeclarations.clear();
    -            for (TypeElementImpl typeDeclaration: typeDeclarationsToFinish) {
    -                typeDeclaration.finish(mirrorContext);
    -            }
    -        }
    -        return typeMirror;
    -    }
    -
    -    private static ImmutableList<ReflectionTypeMirror> toList(TypeMirror[] types) {
    -        List<ReflectionTypeMirror> list = new ArrayList<>(types.length);
    -        for (TypeMirror type: types) {
    -            list.add((ReflectionTypeMirror) type);
    -        }
    -        return ImmutableList.copyOf(list);
    -    }
    -
    -    @Override
    -    public DeclaredType getDeclaredType(@Nullable DeclaredType containing, TypeElement typeElem,
    -            TypeMirror... typeArgs) {
    -        requireValidType(containing);
    -        requireValidElement(typeElem);
    -        requireValidTypes(typeArgs);
    -
    -        ReflectionTypeMirror newContainingType = containing == null
    -            ? NoTypeImpl.NONE
    -            : (ReflectionTypeMirror) containing;
    -        return new DeclaredTypeImpl(newContainingType, (TypeElementImpl) typeElem, toList(typeArgs));
    -    }
    -
    -    @Override
    -    public DeclaredType getDeclaredType(TypeElement typeElem, TypeMirror... typeArgs) {
    -        requireValidElement(typeElem);
    -        requireValidTypes(typeArgs);
    -
    -        return new DeclaredTypeImpl(NoTypeImpl.NONE, (TypeElementImpl) typeElem, toList(typeArgs));
    -    }
    -
    -    @Override
    -    public NoType getNoType(TypeKind kind) {
    -        Objects.requireNonNull(kind);
    -        if (kind == TypeKind.VOID) {
    -            return NoTypeImpl.VOID;
    -        } else if (kind == TypeKind.NONE) {
    -            return NoTypeImpl.NONE;
    -        } else {
    -            throw new IllegalArgumentException(String.format("Expected one of %s, but got %s.",
    -                Arrays.asList(TypeKind.VOID, TypeKind.NONE), kind));
    -        }
    -    }
    -
    -    @Override
    -    public NullType getNullType() {
    -        return NullTypeImpl.INSTANCE;
    -    }
    -
    -    @Override
    -    public ArrayType getArrayType(TypeMirror componentType) {
    -        Objects.requireNonNull(componentType);
    -        requireValidType(componentType);
    -
    -        return new ArrayTypeImpl((ReflectionTypeMirror) componentType);
    -    }
    -
    -    @Override
    -    protected javax.lang.model.type.TypeVariable createTypeVariable(TypeParameterElement typeParameter,
    -            @Nullable javax.lang.model.type.WildcardType capturedTypeArgument) {
    -        requireValidElement(Objects.requireNonNull(typeParameter));
    -        requireValidType(capturedTypeArgument);
    -
    -        return new TypeVariableImpl((TypeParameterElementImpl) typeParameter, (WildcardTypeImpl) capturedTypeArgument);
    -    }
    -
    -    @Override
    -    protected javax.lang.model.type.WildcardType capturedTypeArgument(javax.lang.model.type.TypeVariable typeVariable) {
    -        requireValidType(Objects.requireNonNull(typeVariable));
    -
    -        return ((TypeVariableImpl) typeVariable).getCapturedTypeArgument();
    -    }
    -
    -    @Override
    -    public IntersectionType getIntersectionType(TypeMirror... bounds) {
    -        Objects.requireNonNull(bounds);
    -        if (bounds.length == 0) {
    -            throw new IllegalArgumentException("Expected at least one bound.");
    -        }
    -        requireValidTypes(bounds);
    -
    -        List<ReflectionTypeMirror> newBounds = new ArrayList<>(bounds.length);
    -        for (TypeMirror bound: bounds) {
    -            newBounds.add((ReflectionTypeMirror) bound);
    -        }
    -
    -        return new IntersectionTypeImpl(newBounds);
    -    }
    -
    -    @Override
    -    protected void setTypeVariableBounds(javax.lang.model.type.TypeVariable typeVariable, TypeMirror upperBound,
    -            TypeMirror lowerBound) {
    -        requireValidType(Objects.requireNonNull(typeVariable));
    -        requireValidType(Objects.requireNonNull(upperBound));
    -        requireValidType(Objects.requireNonNull(lowerBound));
    -
    -        ((TypeVariableImpl) typeVariable).setUpperAndLowerBounds(
    -            (ReflectionTypeMirror) upperBound,
    -            (ReflectionTypeMirror) lowerBound
    -        );
    -    }
    -
    -    @Override
    -    public PrimitiveType getPrimitiveType(TypeKind kind) {
    -        @Nullable PrimitiveTypeImpl primitiveType = primitiveTypes.get(kind.ordinal());
    -        if (primitiveType == null) {
    -            throw new IllegalArgumentException(String.format("Expected primitive kind, but got %s.", kind));
    -        }
    -        return primitiveType;
    -    }
    -
    -    @Override
    -    public javax.lang.model.type.WildcardType getWildcardType(@Nullable TypeMirror extendsBound,
    -            @Nullable TypeMirror superBound) {
    -        requireValidType(extendsBound);
    -        requireValidType(superBound);
    -
    -        return new WildcardTypeImpl((ReflectionTypeMirror) extendsBound, (ReflectionTypeMirror) superBound);
    -    }
    -
    -    private static UnsupportedOperationException unsupportedException() {
    -        return new UnsupportedOperationException(
    -            "isAssignable(), isSubsignature(), asMemberOf(), and directSupertypes() not currently supported."
    -        );
    -    }
    -
    -    @Override
    -    public boolean isAssignable(TypeMirror t1, TypeMirror t2) {
    -        throw unsupportedException();
    -    }
    -
    -    @Override
    -    public boolean isSubsignature(ExecutableType m1, ExecutableType m2) {
    -        throw unsupportedException();
    -    }
    -
    -    @Override
    -    public TypeMirror asMemberOf(DeclaredType containing, Element element) {
    -        throw unsupportedException();
    -    }
    -
    -    /**
    -     * @throws UnsupportedOperationException whenever this method is called
    -     */
    -    @Override
    -    public List<? extends TypeMirror> directSupertypes(TypeMirror t) {
    -        throw unsupportedException();
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/TypeElementImpl.java b/src/main/java/net/florianschoppmann/java/reflect/TypeElementImpl.java
    deleted file mode 100644
    index 676ce3a..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/TypeElementImpl.java
    +++ /dev/null
    @@ -1,185 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.element.ElementKind;
    -import javax.lang.model.element.ElementVisitor;
    -import javax.lang.model.element.Name;
    -import javax.lang.model.element.NestingKind;
    -import javax.lang.model.element.TypeElement;
    -import javax.lang.model.type.TypeMirror;
    -import java.lang.reflect.Type;
    -import java.lang.reflect.TypeVariable;
    -import java.util.ArrayList;
    -import java.util.List;
    -import java.util.Objects;
    -
    -final class TypeElementImpl extends ElementImpl implements TypeElement, ReflectionParameterizable {
    -    private final Class<?> clazz;
    -    private final ImmutableList<TypeParameterElementImpl> typeParameters;
    -    @Nullable private ReflectionElement enclosingElement;
    -    @Nullable private ReflectionTypeMirror superClass;
    -    @Nullable private List<ReflectionTypeMirror> interfaces;
    -    @Nullable private List<ElementImpl> enclosedElements;
    -
    -    /**
    -     * Cache the type returned by {@link #asType()}.
    -     *
    -     * <p>Similarly to {@link String#hashCode()}, caching is not synchronized. This means that different threads may
    -     * (at least theoretically) see different values for this field. However, this is not a problem because all such
    -     * values would compare equal. Moreover, §17.7 JLS specifies that "Writes to and reads of references are always
    -     * atomic, regardless of whether they are implemented as 32-bit or 64-bit values". Hence, even if caches were
    -     * updated, every access to this field would yield a well-defined result.
    -     */
    -    @Nullable private DeclaredTypeImpl type;
    -
    -    TypeElementImpl(Class<?> clazz) {
    -        this.clazz = Objects.requireNonNull(clazz);
    -
    -        List<TypeParameterElementImpl> newTypeParameters = new ArrayList<>();
    -        for (TypeVariable<?> parameter: clazz.getTypeParameters()) {
    -            newTypeParameters.add(new TypeParameterElementImpl(parameter, this));
    -        }
    -        typeParameters = ImmutableList.copyOf(newTypeParameters);
    -    }
    -
    -    @Override
    -    public boolean equals(@Nullable Object otherObject) {
    -        if (this == otherObject) {
    -            return true;
    -        } else if (otherObject == null || getClass() != otherObject.getClass()) {
    -            return false;
    -        }
    -
    -        return clazz.equals(((TypeElementImpl) otherObject).clazz);
    -    }
    -
    -    @Override
    -    public int hashCode() {
    -        return clazz.hashCode();
    -    }
    -
    -    @Override
    -    public String toString() {
    -        return clazz.toString();
    -    }
    -
    -    @Override
    -    public <R, P> R accept(ElementVisitor<R, P> visitor, @Nullable P parameter) {
    -        return visitor.visitType(this, parameter);
    -    }
    -
    -    @Override
    -    public List<ElementImpl> getEnclosedElements() {
    -        requireFinished();
    -        assert enclosedElements != null : "must be non-null when finished";
    -        return enclosedElements;
    -    }
    -
    -    @Override
    -    public NestingKind getNestingKind() {
    -        throw new UnsupportedOperationException(String.format(
    -            "Nesting kind not currently supported by %s.", ReflectionTypes.class
    -        ));
    -    }
    -
    -    @Override
    -    public NameImpl getQualifiedName() {
    -        return new NameImpl(clazz.getCanonicalName());
    -    }
    -
    -    @Override
    -    public Name getSimpleName() {
    -        return new NameImpl(clazz.getSimpleName());
    -    }
    -
    -    @Override
    -    public TypeMirror getSuperclass() {
    -        requireFinished();
    -        assert superClass != null : "must be non-null when finished";
    -        return superClass;
    -    }
    -
    -    @Override
    -    public List<? extends TypeMirror> getInterfaces() {
    -        requireFinished();
    -        assert interfaces != null : "must be non-null when finished";
    -        return interfaces;
    -    }
    -
    -    @Override
    -    public List<TypeParameterElementImpl> getTypeParameters() {
    -        return typeParameters;
    -    }
    -
    -    @Override
    -    public ReflectionElement getEnclosingElement() {
    -        requireFinished();
    -
    -        if (enclosingElement == null) {
    -            throw new UnsupportedOperationException("getEnclosingElement() not supported for top-level classes.");
    -        } else {
    -            return enclosingElement;
    -        }
    -    }
    -
    -    @Override
    -    public DeclaredTypeImpl asType() {
    -        requireFinished();
    -
    -        @Nullable DeclaredTypeImpl localType = type;
    -        if (localType == null) {
    -            List<TypeVariableImpl> prototypicalTypeArguments = new ArrayList<>(typeParameters.size());
    -            for (TypeParameterElementImpl typeParameter: typeParameters) {
    -                prototypicalTypeArguments.add(typeParameter.asType());
    -            }
    -
    -            ReflectionTypeMirror enclosingType = enclosingElement == null
    -                ? NoTypeImpl.NONE
    -                : enclosingElement.asType();
    -            localType = new DeclaredTypeImpl(enclosingType, this, prototypicalTypeArguments);
    -            type = localType;
    -        }
    -        return localType;
    -    }
    -
    -    @Override
    -    public ElementKind getKind() {
    -        if (clazz.isEnum()) {
    -            return ElementKind.ENUM;
    -        } else if (clazz.isAnnotation()) {
    -            return ElementKind.ANNOTATION_TYPE;
    -        } else if (clazz.isInterface()) {
    -            return ElementKind.INTERFACE;
    -        } else {
    -            return ElementKind.CLASS;
    -        }
    -    }
    -
    -    @Override
    -    protected void finishDerivedFromElement(MirrorContext mirrorContext) {
    -        @Nullable Class<?> enclosingClass = clazz.getEnclosingClass();
    -        enclosingElement = enclosingClass == null
    -            ? null
    -            : mirrorContext.typeDeclaration(enclosingClass);
    -
    -        Class<?>[] declaredClasses = clazz.getDeclaredClasses();
    -        List<ElementImpl> newEnclosedElements = new ArrayList<>(typeParameters.size() + declaredClasses.length);
    -        newEnclosedElements.addAll(typeParameters);
    -        for (Class<?> declaredClass: declaredClasses) {
    -            newEnclosedElements.add(mirrorContext.typeDeclaration(declaredClass));
    -        }
    -        enclosedElements = ImmutableList.copyOf(newEnclosedElements);
    -
    -        @Nullable Type genericSuperClass = clazz.getGenericSuperclass();
    -        superClass = genericSuperClass == null
    -            ? NoTypeImpl.NONE
    -            : mirrorContext.mirror(genericSuperClass);
    -        interfaces = mirrorContext.mirror(clazz.getGenericInterfaces());
    -        for (TypeParameterElementImpl typeParameter: typeParameters) {
    -            typeParameter.finish(mirrorContext);
    -        }
    -
    -        // Field 'type' is lazily initialized in order to break a dependency chain: Constructing type requires
    -        // enclosingElement.asType(), which at this point may not yet be available.
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/TypeParameterElementImpl.java b/src/main/java/net/florianschoppmann/java/reflect/TypeParameterElementImpl.java
    deleted file mode 100644
    index 63bb0ff..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/TypeParameterElementImpl.java
    +++ /dev/null
    @@ -1,95 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.element.ElementKind;
    -import javax.lang.model.element.ElementVisitor;
    -import javax.lang.model.element.Name;
    -import javax.lang.model.element.TypeParameterElement;
    -import java.lang.reflect.TypeVariable;
    -import java.util.List;
    -import java.util.Objects;
    -
    -final class TypeParameterElementImpl extends ElementImpl implements TypeParameterElement {
    -    private final TypeVariable<?> reflectionTypeVariable;
    -    private final ElementImpl genericElement;
    -    private final TypeVariableImpl typeVariable;
    -    @Nullable private List<ReflectionTypeMirror> bounds;
    -
    -    TypeParameterElementImpl(TypeVariable<?> reflectionTypeVariable, ElementImpl genericElement) {
    -        this.reflectionTypeVariable = Objects.requireNonNull(reflectionTypeVariable);
    -        this.genericElement = Objects.requireNonNull(genericElement);
    -        typeVariable = new TypeVariableImpl(this, null);
    -    }
    -
    -    @Override
    -    public boolean equals(@Nullable Object otherObject) {
    -        if (this == otherObject) {
    -            return true;
    -        } else if (otherObject == null || getClass() != otherObject.getClass()) {
    -            return false;
    -        }
    -
    -        return reflectionTypeVariable.equals(((TypeParameterElementImpl) otherObject).reflectionTypeVariable);
    -    }
    -
    -    @Override
    -    public int hashCode() {
    -        return reflectionTypeVariable.hashCode();
    -    }
    -
    -    @Override
    -    public String toString() {
    -        return reflectionTypeVariable.toString();
    -    }
    -
    -    @Override
    -    public <R, P> R accept(ElementVisitor<R, P> visitor, @Nullable P parameter) {
    -        return visitor.visitTypeParameter(this, parameter);
    -    }
    -
    -    @Override
    -    public ElementImpl getGenericElement() {
    -        return genericElement;
    -    }
    -
    -    @Override
    -    public List<ReflectionTypeMirror> getBounds() {
    -        requireFinished();
    -        assert bounds != null : "must be non-null when finished";
    -        return bounds;
    -    }
    -
    -    @Override
    -    public ElementImpl getEnclosingElement() {
    -        return genericElement;
    -    }
    -
    -    @Override
    -    public TypeVariableImpl asType() {
    -        return typeVariable;
    -    }
    -
    -    @Override
    -    public ElementKind getKind() {
    -        return ElementKind.TYPE_PARAMETER;
    -    }
    -
    -    @Override
    -    public Name getSimpleName() {
    -        return new NameImpl(reflectionTypeVariable.getName());
    -    }
    -
    -    @Override
    -    public ImmutableList<? extends ReflectionElement> getEnclosedElements() {
    -        return ImmutableList.emptyList();
    -    }
    -
    -    @Override
    -    void finishDerivedFromElement(MirrorContext mirrorContext) {
    -        bounds = mirrorContext.mirror(reflectionTypeVariable.getBounds());
    -        ReflectionTypeMirror bound = bounds.size() == 1
    -            ? bounds.get(0)
    -            : new IntersectionTypeImpl(bounds);
    -        typeVariable.setUpperAndLowerBounds(bound, NullTypeImpl.INSTANCE);
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/TypeVariableImpl.java b/src/main/java/net/florianschoppmann/java/reflect/TypeVariableImpl.java
    deleted file mode 100644
    index e1020de..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/TypeVariableImpl.java
    +++ /dev/null
    @@ -1,113 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeVariable;
    -import javax.lang.model.type.TypeVisitor;
    -import java.util.Objects;
    -
    -final class TypeVariableImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, TypeVariable {
    -    private boolean frozen = false;
    -
    -    private final TypeParameterElementImpl typeParameterElement;
    -    @Nullable private final WildcardTypeImpl capturedTypeArgument;
    -    @Nullable private ReflectionTypeMirror upperBound;
    -    @Nullable private ReflectionTypeMirror lowerBound;
    -
    -    TypeVariableImpl(TypeParameterElementImpl typeParameterElement, @Nullable WildcardTypeImpl capturedTypeArgument) {
    -        Objects.requireNonNull(typeParameterElement);
    -
    -        this.typeParameterElement = typeParameterElement;
    -        this.capturedTypeArgument = capturedTypeArgument;
    -    }
    -
    -    @Override
    -    public boolean equals(@Nullable Object otherObject) {
    -        if (this == otherObject) {
    -            return true;
    -        } else if (otherObject == null || getClass() != otherObject.getClass()) {
    -            return false;
    -        }
    -
    -        requireFrozen();
    -        assert upperBound != null && lowerBound != null : "must be non-null when frozen";
    -
    -        TypeVariableImpl other = (TypeVariableImpl) otherObject;
    -        return typeParameterElement.equals(other.typeParameterElement)
    -            && Objects.equals(capturedTypeArgument, other.capturedTypeArgument)
    -            && upperBound.equals(other.upperBound)
    -            && lowerBound.equals(other.lowerBound);
    -    }
    -
    -    @Override
    -    public int hashCode() {
    -        requireFrozen();
    -
    -        return Objects.hash(typeParameterElement, capturedTypeArgument, upperBound, lowerBound);
    -    }
    -
    -    @Override
    -    public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
    -        return visitor.visitTypeVariable(this, parameter);
    -    }
    -
    -    @Override
    -    public String toString() {
    -        return ReflectionTypes.getInstance().toString(this);
    -    }
    -
    -    void requireUnfrozen() {
    -        if (frozen) {
    -            throw new IllegalStateException(String.format(
    -                "Tried to modify instance of %s after it became effectively immutable.", getClass()
    -            ));
    -        }
    -    }
    -
    -    void requireFrozen() {
    -        if (!frozen) {
    -            throw new IllegalStateException(String.format(
    -                "Instance of %s used before object construction finished.", getClass()
    -            ));
    -        }
    -    }
    -
    -    @Override
    -    public TypeParameterElementImpl asElement() {
    -        return typeParameterElement;
    -    }
    -
    -    @Override
    -    public ReflectionTypeMirror getUpperBound() {
    -        requireFrozen();
    -        assert upperBound != null : "must be non-null when frozen";
    -        return upperBound;
    -    }
    -
    -    @Override
    -    public ReflectionTypeMirror getLowerBound() {
    -        requireFrozen();
    -        assert lowerBound != null : "must be non-null when frozen";
    -        return lowerBound;
    -    }
    -
    -    void setUpperAndLowerBounds(ReflectionTypeMirror newUpperBound, ReflectionTypeMirror newLowerBound) {
    -        requireUnfrozen();
    -        Objects.requireNonNull(newUpperBound);
    -        Objects.requireNonNull(newLowerBound);
    -
    -        upperBound = newUpperBound;
    -        lowerBound = newLowerBound;
    -        frozen = true;
    -    }
    -
    -    @Override
    -    public TypeKind getKind() {
    -        return TypeKind.TYPEVAR;
    -    }
    -
    -    @Nullable
    -    WildcardTypeImpl getCapturedTypeArgument() {
    -        return capturedTypeArgument;
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/WildcardTypeImpl.java b/src/main/java/net/florianschoppmann/java/reflect/WildcardTypeImpl.java
    deleted file mode 100644
    index 1c51d91..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/WildcardTypeImpl.java
    +++ /dev/null
    @@ -1,69 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeVisitor;
    -import javax.lang.model.type.WildcardType;
    -import java.util.Objects;
    -
    -final class WildcardTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, WildcardType {
    -    /**
    -     * Upper bound of this wildcard. If no upper bound is explicitly declared, this field contains {@code null}.
    -     */
    -    @Nullable private final ReflectionTypeMirror extendsBound;
    -
    -    /**
    -     * Lower bound of this wildcard. If no lower bound is explicitly declared, this field contains {@code null}.
    -     */
    -    @Nullable private final ReflectionTypeMirror superBound;
    -
    -    WildcardTypeImpl(@Nullable ReflectionTypeMirror extendsBound, @Nullable ReflectionTypeMirror superBound) {
    -        this.extendsBound = extendsBound;
    -        this.superBound = superBound;
    -    }
    -
    -    @Override
    -    public boolean equals(@Nullable Object otherObject) {
    -        if (this == otherObject) {
    -            return true;
    -        } else if (otherObject == null || getClass() != otherObject.getClass()) {
    -            return false;
    -        }
    -
    -        WildcardTypeImpl other = (WildcardTypeImpl) otherObject;
    -        return Objects.equals(extendsBound, other.extendsBound)
    -            && Objects.equals(superBound, other.superBound);
    -    }
    -
    -    @Override
    -    public int hashCode() {
    -        return Objects.hash(extendsBound, superBound);
    -    }
    -
    -    @Override
    -    public String toString() {
    -        return ReflectionTypes.getInstance().toString(this);
    -    }
    -
    -    @Override
    -    public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
    -        return visitor.visitWildcard(this, parameter);
    -    }
    -
    -    @Override
    -    @Nullable
    -    public ReflectionTypeMirror getExtendsBound() {
    -        return extendsBound;
    -    }
    -
    -    @Override
    -    @Nullable
    -    public ReflectionTypeMirror getSuperBound() {
    -        return superBound;
    -    }
    -
    -    @Override
    -    public TypeKind getKind() {
    -        return TypeKind.WILDCARD;
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/reflect/package-info.java b/src/main/java/net/florianschoppmann/java/reflect/package-info.java
    deleted file mode 100644
    index 516f5f7..0000000
    --- a/src/main/java/net/florianschoppmann/java/reflect/package-info.java
    +++ /dev/null
    @@ -1,8 +0,0 @@
    -/**
    - * Provides a concrete implementation of {@link net.florianschoppmann.java.type.AbstractTypes} backed by the Java
    - * Reflection API.
    - */
    -@NonNullByDefault
    -package net.florianschoppmann.java.reflect;
    -
    -import net.florianschoppmann.java.type.NonNullByDefault;
    diff --git a/src/main/java/net/florianschoppmann/java/type/AbstractTypes.java b/src/main/java/net/florianschoppmann/java/type/AbstractTypes.java
    deleted file mode 100644
    index e89c3c8..0000000
    --- a/src/main/java/net/florianschoppmann/java/type/AbstractTypes.java
    +++ /dev/null
    @@ -1,1371 +0,0 @@
    -package net.florianschoppmann.java.type;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.element.Element;
    -import javax.lang.model.element.ElementKind;
    -import javax.lang.model.element.TypeElement;
    -import javax.lang.model.element.TypeParameterElement;
    -import javax.lang.model.type.ArrayType;
    -import javax.lang.model.type.DeclaredType;
    -import javax.lang.model.type.NoType;
    -import javax.lang.model.type.NullType;
    -import javax.lang.model.type.PrimitiveType;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeMirror;
    -import javax.lang.model.type.TypeVariable;
    -import javax.lang.model.type.WildcardType;
    -import javax.lang.model.util.Types;
    -import java.io.Serializable;
    -import java.lang.reflect.Type;
    -import java.util.ArrayList;
    -import java.util.Arrays;
    -import java.util.Collections;
    -import java.util.HashMap;
    -import java.util.Iterator;
    -import java.util.LinkedHashMap;
    -import java.util.LinkedHashSet;
    -import java.util.List;
    -import java.util.Map;
    -import java.util.Objects;
    -import java.util.Set;
    -
    -/**
    - * Abstract skeletal implementation of {@link Types}.
    - *
    - * <p>This class provides a skeletal implementation of the {@link Types} interface. Specifically, it implements all
    - * methods pertaining to §4.10 (subtyping) in the Java Language Specification (JLS). Concrete subclasses are expected to
    - * implement the abstract methods in this class, which are responsible for creating appropriate type-mirror instances.
    - * This class does not place any additional constraints on the concrete {@link TypeMirror} and {@link Element}
    - * implementations, so mutability and thread-safety are implementation-defined. However, this class crucially relies on
    - * the {@code equals} method being well-defined. That is, {@link Element} objects that have equal names and equal
    - * enclosing elements must compare equal. Likewise, {@link TypeMirror} objects that contain equal values must compare
    - * equal. In particular, multiple instances created by one of the {@code get}-methods must compare equal when the given
    - * arguments compare equal.
    - *
    - * <p>Besides subtype-related methods, this class also provides method
    - * {@link #resolveActualTypeArguments(TypeElement, TypeMirror)} for resolving formal type parameters to actual type
    - * arguments. For instance, given type {@code List<String>}, this method determines the actual type argument for the
    - * formal type parameter of {@code Collection<E>} (that is, {@code String} in this simple example).
    - *
    - * <p>Unless explicitly stated otherwise, all methods in this class expect non-null arguments. Passing null where not
    - * expected will cause a {@link NullPointerException} to be thrown. Implementations typically place additional
    - * restrictions on method arguments not captured by the types of the formal parameters (which stem from
    - * {@link javax.lang.model} and its subpackages). While the details are implementation-defined, typically this means
    - * that arguments must have been crated by the same implementation, or otherwise an {@link IllegalArgumentException}
    - * will be thrown. Implementations must override {@link #requireValidType(TypeMirror)} and
    - * {@link #requireValidElement(Element)}, as these methods are expected to perform any necessary validation.
    - */
    -public abstract class AbstractTypes implements Types {
    -    private static final List<TypeKind> REFERENCE_TYPES = Collections.unmodifiableList(Arrays.asList(
    -        TypeKind.ARRAY, TypeKind.DECLARED, TypeKind.NULL, TypeKind.TYPEVAR
    -    ));
    -    private static final int DEFAULT_STRING_BUILDER_SIZE = 256;
    -
    -    private final SubstitutionVisitor substitutionVisitor = new SubstitutionVisitor();
    -    private final ErasureVisitor erasureVisitor = new ErasureVisitor();
    -    private final ToStringVisitor toStringVisitor = new ToStringVisitor();
    -    private final SubtypeVisitor subtypeVisitor = new SubtypeVisitor();
    -    private final DeclaredTypeSubtypeVisitor declaredTypeSubtypeVisitor = new DeclaredTypeSubtypeVisitor();
    -
    -    /**
    -     * Verifies that the given {@link Element} is valid for use with this class.
    -     *
    -     * <p>The meaning of valid is implementation-defined, but typically a valid {@link Element} must have been created
    -     * by the implementation that belongs to the current {@code AbstractTypes} instance.
    -     *
    -     * @param element element
    -     * @throws NullPointerException if the argument is null
    -     * @throws IllegalArgumentException if the given {@link Element} cannot be used with this class
    -     */
    -    protected abstract void requireValidElement(Element element);
    -
    -    /**
    -     * Verifies that the given {@link TypeMirror} is valid for use with this class, or that it is {@code null}.
    -     *
    -     * <p>The meaning of valid is implementation-defined, but typically a valid {@link TypeMirror} must have been
    -     * created by the implementation that belongs to the current {@code AbstractTypes} instance. A {@code null} argument
    -     * is always valid. The rationale is that {@code null} {@link TypeMirror} arguments have a special meaning for some
    -     * methods such as {@link #getWildcardType(TypeMirror, TypeMirror)} or
    -     * {@link #createTypeVariable(TypeParameterElement, WildcardType)}.
    -     *
    -     * @param type type mirror, may be {@code null}
    -     * @throws IllegalArgumentException if the given {@link TypeMirror} instance is non-null and it cannot be used with
    -     *     this class
    -     */
    -    protected abstract void requireValidType(@Nullable TypeMirror type);
    -
    -    /**
    -     * Verifies that the given array is non-null and contains valid types that are not null.
    -     *
    -     * @param types array of types
    -     * @throws NullPointerException if the given array or any of its elements are null
    -     * @throws IllegalArgumentException if {@link #requireValidType(TypeMirror)} throws an exception for one of the
    -     *     array elements
    -     */
    -    protected final void requireValidTypes(TypeMirror[] types) {
    -        for (TypeMirror typeArg: types) {
    -            Objects.requireNonNull(typeArg, "TypeMirror array must not contain null elements.");
    -            requireValidType(typeArg);
    -        }
    -    }
    -
    -    /**
    -     * Returns a type mirror corresponding to the given Java reflection type.
    -     *
    -     * <p>Subclasses are required to return the appropriate {@link DeclaredType} instances for the following
    -     * {@link Class} instances:
    -     * <ul><li>
    -     *     {@link Object}
    -     * </li><li>
    -     *     {@link Serializable}
    -     * </li><li>
    -     *     {@link Cloneable}
    -     * </li></ul>
    -     *
    -     * <p>Support for other types is not required and implementation-defined.
    -     *
    -     * @param type type as represented by Java Reflection API
    -     * @throws UnsupportedOperationException If the given type is not one of the above {@link Class} objects and
    -     *     this type-utilities implementation does not support mirroring arbitrary Java reflection types.
    -     * @return the type mirror corresponding to the given reflection type
    -     */
    -    protected abstract TypeMirror typeMirror(Type type);
    -
    -    /**
    -     * Internal class that contains both the substitution map passed to {@link #substitute(TypeMirror, Map)} and the
    -     * set of fresh type variables created at the beginning of that method.
    -     */
    -    private static final class Substitutions {
    -        private final Map<TypeParameterElement, ? extends TypeMirror> map;
    -        private final Map<TypeParameterElement, TypeVariable> freshTypeVariables;
    -
    -        private Substitutions(Map<TypeParameterElement, ? extends TypeMirror> map,
    -                Map<TypeParameterElement, TypeVariable> freshTypeVariables) {
    -            this.map = map;
    -            this.freshTypeVariables = freshTypeVariables;
    -        }
    -    }
    -
    -    /**
    -     * Visitor of a type mirror. Returns a new type mirror after performing the substitutions passed as visitor
    -     * argument.
    -     *
    -     * <p>This visitor is only used within this class and only on <em>valid</em> {@link TypeMirror} instances. Hence, it
    -     * can be asserted that the visitor parameter is always non-null.
    -     *
    -     * @see #substitutionVisitor
    -     * @see #requireValidType(TypeMirror)
    -     */
    -    private final class SubstitutionVisitor extends ExtendedTypeKindVisitor7<TypeMirror, Substitutions> {
    -        private TypeMirror[] substituteInList(List<? extends TypeMirror> types, Substitutions substitutions) {
    -            TypeMirror[] substituted = new TypeMirror[types.size()];
    -            int i = 0;
    -            for (TypeMirror type: types) {
    -                substituted[i] = type.accept(this, substitutions);
    -                ++i;
    -            }
    -            return substituted;
    -        }
    -
    -        @Override
    -        public TypeMirror visitDeclared(DeclaredType declaredType, @Nullable Substitutions substitutions) {
    -            assert substitutions != null;
    -            TypeMirror enclosingType = declaredType.getEnclosingType();
    -            TypeElement typeDeclaration = (TypeElement) declaredType.asElement();
    -            TypeMirror[] substitutedArguments = substituteInList(declaredType.getTypeArguments(), substitutions);
    -            if (enclosingType.getKind() == TypeKind.DECLARED) {
    -                return getDeclaredType((DeclaredType) enclosingType, typeDeclaration, substitutedArguments);
    -            } else {
    -                return getDeclaredType(typeDeclaration, substitutedArguments);
    -            }
    -        }
    -
    -        @Override
    -        public TypeMirror visitArray(ArrayType arrayType, @Nullable Substitutions substitutions) {
    -            assert substitutions != null;
    -            return getArrayType(arrayType.getComponentType().accept(this, substitutions));
    -        }
    -
    -        @Override
    -        public TypeMirror visitTypeVariable(TypeVariable typeVariable, @Nullable Substitutions substitutions) {
    -            assert substitutions != null;
    -            TypeParameterElement formalTypeParameter = (TypeParameterElement) typeVariable.asElement();
    -            @Nullable TypeVariable freshTypeVariable = substitutions.freshTypeVariables.get(formalTypeParameter);
    -            if (freshTypeVariable != null && formalTypeParameter.asType().equals(typeVariable)) {
    -                return freshTypeVariable;
    -            }
    -
    -            @Nullable TypeMirror substitution = substitutions.map.get(formalTypeParameter);
    -            if (substitution != null) {
    -                return substitution;
    -            }
    -
    -            return getTypeVariable(
    -                formalTypeParameter,
    -                typeVariable.getUpperBound().accept(this, substitutions),
    -                typeVariable.getLowerBound().accept(this, substitutions),
    -                capturedTypeArgument(typeVariable)
    -            );
    -        }
    -
    -        @Override
    -        public TypeMirror visitWildcard(WildcardType wildcardType, @Nullable Substitutions substitutions) {
    -            assert substitutions != null;
    -            @Nullable TypeMirror extendsBounds = wildcardType.getExtendsBound();
    -            @Nullable TypeMirror superBound = wildcardType.getSuperBound();
    -
    -            return getWildcardType(
    -                extendsBounds != null
    -                    ? extendsBounds.accept(this, substitutions)
    -                    : null,
    -                superBound != null
    -                    ? superBound.accept(this, substitutions)
    -                    : null
    -            );
    -        }
    -
    -        @Override
    -        public TypeMirror visitIntersection(IntersectionType intersectionType, @Nullable Substitutions substitutions) {
    -            assert substitutions != null;
    -            return getIntersectionType(substituteInList(intersectionType.getBounds(), substitutions));
    -        }
    -
    -        @Override
    -        protected TypeMirror defaultAction(TypeMirror type, Substitutions substitutions) {
    -            return type;
    -        }
    -    }
    -
    -    /**
    -     * Replaces formal type parameters in the given type.
    -     *
    -     * <p>This method requires that {@code type} does not contain transitive references to itself, unless through
    -     * {@link DeclaredType#asElement()} → {@link TypeElement#asType()} or {@link TypeVariable#asElement()} →
    -     * {@link TypeParameterElement#asType()}. Otherwise, this method might run into an infinite recursion, resulting in
    -     * a {@link StackOverflowError}.
    -     *
    -     * <p>Moreover, this method requires that any type variable transitively referenced by {@code substitutionMap} must
    -     * not contain a transitive reference (through {@link TypeVariable#getUpperBound()} or
    -     * {@link TypeVariable#getLowerBound()}) to itself. Instead, any instance of {@link TypeVariable} (transitively)
    -     * referenced by a value in {@code substitutionMap} must be the result of {@link TypeParameterElement#asType()}.
    -     *
    -     * <p>This method creates a fresh type variable for each formal type parameter that is to be substituted by a type
    -     * variable for the same formal type parameter. For instance, suppose {@code T extends Object} is a formal type
    -     * parameter, and {@code substitutionMap} specifies to replace it with the type variable {@code T extends U<T>}. In
    -     * this case, {@link #createTypeVariable(TypeParameterElement, WildcardType)} will be called with the formal type
    -     * parameter {@code T extends Object} as (first) argument. Once all fresh types have been created,
    -     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} will then be called with {@code U<T>} as
    -     * upper bound, where {@code T} is the fresh type variable {@code T extends U<T>}.
    -     *
    -     * @param type type in which the type parameters will be replaced recursively, guaranteed non-null
    -     * @param substitutionMap mapping from formal type parameters to substituted type, guaranteed non-null
    -     * @return new port type, guaranteed non-null
    -     */
    -    protected TypeMirror substitute(TypeMirror type, Map<TypeParameterElement, ? extends TypeMirror> substitutionMap) {
    -        Objects.requireNonNull(type);
    -        Objects.requireNonNull(substitutionMap);
    -        requireValidType(type);
    -        for (TypeMirror substitutionType: substitutionMap.values()) {
    -            Objects.requireNonNull(substitutionType, "Substitution type cannot be null.");
    -            requireValidType(substitutionType);
    -        }
    -
    -        Map<TypeParameterElement, TypeVariable> freshTypeVariables = new LinkedHashMap<>();
    -        for (Map.Entry<TypeParameterElement, ? extends TypeMirror> entry: substitutionMap.entrySet()) {
    -            TypeMirror value = entry.getValue();
    -            if (value.getKind() == TypeKind.TYPEVAR) {
    -                TypeParameterElement formalTypeParameter = entry.getKey();
    -                TypeVariable typeVariable = (TypeVariable) value;
    -                if (entry.getKey().equals(typeVariable.asElement())) {
    -                    assert !freshTypeVariables.containsKey(formalTypeParameter);
    -
    -                    freshTypeVariables.put(
    -                        formalTypeParameter,
    -                        createTypeVariable(formalTypeParameter, capturedTypeArgument(typeVariable))
    -                    );
    -                }
    -            }
    -        }
    -
    -        Substitutions substitutions = new Substitutions(substitutionMap, freshTypeVariables);
    -        for (Map.Entry<TypeParameterElement, TypeVariable> entry: freshTypeVariables.entrySet()) {
    -            TypeVariable substitution = (TypeVariable) substitutionMap.get(entry.getKey());
    -            setTypeVariableBounds(
    -                entry.getValue(),
    -                substitution.getUpperBound().accept(substitutionVisitor, substitutions),
    -                substitution.getLowerBound().accept(substitutionVisitor, substitutions)
    -            );
    -        }
    -
    -        return type.accept(substitutionVisitor, substitutions);
    -    }
    -
    -    /**
    -     * Returns the actual type arguments of a type declaration given a subtype (typically with its own actual type
    -     * arguments).
    -     *
    -     * <p>This method "projects" the actual type arguments of {@code subtype}, as well as all actual type arguments of
    -     * super types in the type hierarchy between {@code typeElement} and {@code subType}, onto the type declaration
    -     * represented by {@code typeElement}.
    -     *
    -     * <p>For example, {@code typeElement} may be the (generic) type declaration {@code Comparable<T>}, and
    -     * {@code subType} may be the (non-generic) type {@link Integer}. The result in this case would be a singleton list
    -     * containing the type {@link Integer}.
    -     *
    -     * <p>More generally, resolution works as follows: First, the shortest inheritance path from {@code subType} to
    -     * {@code typeElement} is found. Note that while Java allows multiple inheritance for interfaces, JLS §8.1.5
    -     * disallows inheriting from the same interface with different type parameters (both directly and transitively).
    -     * Hence, the shortest path contains all information that is necessary to resolve formal type parameters to actual
    -     * parameters. This method then propagates the actual type arguments bottom-up along the inheritance path.
    -     * Note that the inheritance path consists of {@link DeclaredType} instances, and it may consist of generic types,
    -     * non-generic types, and raw types.
    -     *
    -     * <p>If the inheritance path contains a raw type <em>before</em> the last path element, this method proceeds
    -     * by using the "prototypical" type returned by {@link Element#asType()} instead. Correspondingly, it is possible
    -     * that the returned list may contain type variables from a type declaration along the inheritance path. However, if
    -     * the <em>last</em> inheritance path element is a raw type, the returned list will be empty. Otherwise, if a
    -     * non-null non-empty {@link List} is returned, it is guaranteed to have the same number of elements as
    -     * {@code typeElement.getTypeParameters()}.
    -     *
    -     * @param typeElement type declaration
    -     * @param subType potential subtype of {@code typeElement}, must be a non-generic type declaration, raw type,
    -     *     generic type declaration, or parameterized type
    -     * @return actual type arguments for the formal parameters of {@code typeElement} (empty list if the <em>last</em>
    -     *     path element in the inheritance path from {@code subType} to {@code typeElement} is a raw type), or
    -     *     {@code null} if {@code subType} is not a subtype of {@code typeElement}
    -     * @throws IllegalArgumentException if the arguments do not satisfy the constraints mentioned above
    -     */
    -    @Nullable
    -    public final List<? extends TypeMirror> resolveActualTypeArguments(TypeElement typeElement, TypeMirror subType) {
    -        requireValidElement(Objects.requireNonNull(typeElement));
    -        requireValidType(Objects.requireNonNull(subType));
    -
    -        if (subType.getKind() != TypeKind.DECLARED) {
    -            return null;
    -        }
    -
    -        DeclaredType declaredSubType = (DeclaredType) subType;
    -
    -        // getShortestPathToSuperType() will throw an exception if subType does not satisfy the constraints mentioned
    -        // above.
    -        @Nullable List<DeclaredType> path = getShortestPathToSuperType(typeElement, declaredSubType);
    -        if (path == null) {
    -            return null;
    -        }
    -
    -        // Early exit if there is nothing to resolve. However, we must not move this early exit any earlier, because
    -        // we do want to return null if subType is not a subtype of typeElement.
    -        if (typeElement.getTypeParameters().isEmpty()) {
    -            return Collections.emptyList();
    -        }
    -
    -        Iterator<DeclaredType> pathIterator = path.iterator();
    -        DeclaredType current = pathIterator.next();
    -        while (pathIterator.hasNext()) {
    -            TypeElement currentTypeElement = (TypeElement) current.asElement();
    -
    -            // Check whether "current" is a raw type. This may happen in the first loop iteration if subType is a raw
    -            // type, or in subsequent iterations if the type that was previously "current" (during the last iteration
    -            // of the for-loop) derived from a raw type. If yes, use instead the "prototypical" type returned by
    -            // Element#asType().
    -            if (current.getTypeArguments().isEmpty() && !currentTypeElement.getTypeParameters().isEmpty()) {
    -                current = (DeclaredType) currentTypeElement.asType();
    -            }
    -
    -            List<? extends TypeParameterElement> currentFormalParameters = currentTypeElement.getTypeParameters();
    -            List<? extends TypeMirror> currentActualParameters = current.getTypeArguments();
    -
    -            Map<TypeParameterElement, TypeMirror> currentFormalToActual = new LinkedHashMap<>();
    -            for (int index = 0; index < currentFormalParameters.size(); ++index) {
    -                currentFormalToActual.put(currentFormalParameters.get(index), currentActualParameters.get(index));
    -            }
    -
    -            current = (DeclaredType) substitute(pathIterator.next(), currentFormalToActual);
    -        }
    -        return current.getTypeArguments();
    -    }
    -
    -    /**
    -     * Visitor of a type mirror. Returns whether the visited type mirror is a subtype of the visitor argument (of type
    -     * {@link DeclaredType}).
    -     *
    -     * <p>This visitor is only used within this class and only on <em>valid</em> {@link TypeMirror} instances. Hence, it
    -     * can be asserted that the visitor parameter is always non-null.
    -     *
    -     * @see #declaredTypeSubtypeVisitor
    -     * @see #requireValidType(TypeMirror)
    -     */
    -    private final class DeclaredTypeSubtypeVisitor extends ExtendedTypeKindVisitor7<Boolean, DeclaredType> {
    -        private DeclaredTypeSubtypeVisitor() {
    -            super(false);
    -        }
    -
    -        /**
    -         * Returns whether the first declared type is a subtype of the second declared type.
    -         *
    -         * <p>This method proceeds by computing the actual type arguments when {@code subType} is projected onto the
    -         * type declaration corresponding to {@code superType}. It then tests if all actual type arguments of
    -         * {@code subType} are <em>contained</em> in those of {@code superType}.
    -         */
    -        @Override
    -        public Boolean visitDeclared(DeclaredType subType, @Nullable DeclaredType superType) {
    -            assert superType != null;
    -            DeclaredType actualSubType = subType;
    -
    -            // First test if there subType has at least one wildcard type argument. In that case, we need to perform a
    -            // capture conversion first.
    -            // Note that this is the right place to do capture conversion: JLS §8.1.4 and §9.1.3 state about class types
    -            // and interfaces type listed in the extends or implements clause of a class/interface declaration:
    -            // - "If the ClassType has type arguments, it must denote a well-formed parameterized type (§4.5), and none
    -            // of the type arguments may be wildcard type arguments, or a compile-time error occurs."
    -            // - "If an InterfaceType has type arguments, it must denote a well-formed parameterized type (§4.5), and
    -            // none of the type arguments may be wildcard type arguments, or a compile-time error occurs."
    -            // Hence, wildcards do not appear on the "inheritance path" between subType and superType.
    -            for (TypeMirror subTypeArgument: subType.getTypeArguments()) {
    -                if (subTypeArgument.getKind() == TypeKind.WILDCARD) {
    -                    actualSubType = (DeclaredType) capture(subType);
    -                    break;
    -                }
    -            }
    -
    -            // Resolve the actual type parameters of subType when projected onto the superType
    -            TypeElement superTypeDeclaration = (TypeElement) superType.asElement();
    -            @Nullable List<? extends TypeMirror> projectedTypeArguments
    -                = resolveActualTypeArguments(superTypeDeclaration, actualSubType);
    -
    -            if (projectedTypeArguments == null) {
    -                // subType is not a subtype of the type declaration
    -                return false;
    -            }
    -
    -            List<? extends TypeMirror> superTypeArguments = superType.getTypeArguments();
    -            if (projectedTypeArguments.isEmpty() && !superTypeArguments.isEmpty()) {
    -                // the projection of subType onto superType resulted in a raw type, which is neither a subtype of any
    -                // parametrized type of the generic type declaration of superType, nor the generic type declaration
    -                // itself
    -                return false;
    -            }
    -
    -            // Note that superType could be a raw type, in which case superTypeArguments is empty. In that case, the
    -            // loop would not be executed at all.
    -            Iterator<? extends TypeMirror> projectedTypeArgumentsIterator = projectedTypeArguments.iterator();
    -            for (TypeMirror to: superTypeArguments) {
    -                TypeMirror from = projectedTypeArgumentsIterator.next();
    -                if (!contains(to, from)) {
    -                    return false;
    -                }
    -            }
    -            return true;
    -        }
    -
    -        /**
    -         * Returns whether the array type is a subtype of the declared type.
    -         *
    -         * <p>According to JLS §4.10.3, an array type can only be a subtype of a declared type if the latter represents
    -         * one of {@link Object}, {@link Cloneable}, or {@link Serializable}.
    -         */
    -        @Override
    -        public Boolean visitArray(ArrayType subType, @Nullable DeclaredType superType) {
    -            assert superType != null;
    -            return typeMirror(Object.class).equals(superType)
    -                || typeMirror(Cloneable.class).equals(superType)
    -                || typeMirror(Serializable.class).equals(superType);
    -        }
    -
    -        /**
    -         * Returns whether the type variable is a subtype of the declared type.
    -         *
    -         * <p>According to JLS §4.10.2, the direct supertypes of a type variable are the types listed in its bound.
    -         * Hence, this method returns true if {@link TypeVariable#getUpperBound()} is a subtype of {@code superType}.
    -         */
    -        @Override
    -        public Boolean visitTypeVariable(TypeVariable subType, @Nullable DeclaredType superType) {
    -            assert superType != null;
    -            return isSubtype(subType.getUpperBound(), superType);
    -        }
    -
    -        /**
    -         * Returns whether the intersection type is a subtype of the declared type.
    -         *
    -         * <p>According to JLS §4.10.2, the direct supertypes of an intersection type {@code T_1 & ... T_n} are
    -         * {@code T_1}, ..., {@code T_n}. Hence, this method returns true if at least one of
    -         * {@link IntersectionType#getBounds()} is a subtype of {@code superType}.
    -         */
    -        @Override
    -        public Boolean visitIntersection(IntersectionType subType, @Nullable DeclaredType superType) {
    -            assert superType != null;
    -            for (TypeMirror bound: subType.getBounds()) {
    -                if (isSubtype(bound, superType)) {
    -                    return true;
    -                }
    -            }
    -            return false;
    -        }
    -    }
    -
    -    /**
    -     * Visitor of a type mirror. Returns whether the visited type mirror is a supertype of the visitor argument.
    -     *
    -     * <p>This visitor does not have to deal with the null-type, which has been dealt with before. It has to make a
    -     * decision for {@link ArrayType}, {@link DeclaredType}, {@link PrimitiveType}, and {@link TypeVariable}.
    -     *
    -     * <p>Java 8 introduces {@code IntersectionType}, but this code currently uses Java 7. Moreover, there are other
    -     * types that are currently not supported, such as {@link javax.lang.model.type.UnionType}. Finally,
    -     * {@link WildcardType} is not a type, but only a type argument, so it is not necessary to be dealt with here.
    -     * Likewise, {@link NoType} is not used to model proper types, but only empty bounds, non-existence of interface
    -     * super classes, etc.
    -     *
    -     * <p>This visitor is only used within this class and only on <em>valid</em> {@link TypeMirror} instances. Hence, it
    -     * can be asserted that the visitor parameter is always non-null.
    -     *
    -     * @see #subtypeVisitor
    -     * @see #requireValidType(TypeMirror)
    -     */
    -    private final class SubtypeVisitor extends ExtendedTypeKindVisitor7<Boolean, TypeMirror> {
    -        private SubtypeVisitor() {
    -            super(false);
    -        }
    -
    -        /**
    -         * Returns whether the array type is a super type of the type given as second argument.
    -         *
    -         * <p>According to JLS §4.10.3, array component types are covariant; for instance, {@code Integer[]} is a proper
    -         * subtype of {@code Number[]}. Moreover, all subtypes of an array type are again array types. Hence, this
    -         * method simply reduces the problem to testing if {@code subType} is also an array type and then applying
    -         * {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} to the component types.
    -         */
    -        @Override
    -        public Boolean visitArray(ArrayType superType, @Nullable TypeMirror subType) {
    -            assert subType != null;
    -            return subType.getKind() == TypeKind.ARRAY
    -                && isSubtype(((ArrayType) subType).getComponentType(), superType.getComponentType());
    -        }
    -
    -        /**
    -         * Returns whether the declared type is a super type of the type given as second argument.
    -         *
    -         * <p>This method has {@link DeclaredTypeSubtypeVisitor} visit {@code subType}.
    -         */
    -        @Override
    -        public Boolean visitDeclared(DeclaredType superType, @Nullable TypeMirror subType) {
    -            assert subType != null;
    -            return subType.accept(declaredTypeSubtypeVisitor, superType);
    -        }
    -
    -        private final List<TypeKind> numericKindEnumValues = Collections.unmodifiableList(Arrays.asList(
    -            TypeKind.DOUBLE, TypeKind.FLOAT, TypeKind.LONG, TypeKind.INT, TypeKind.SHORT, TypeKind.BYTE
    -        ));
    -        private final int intIndex = numericKindEnumValues.indexOf(TypeKind.INT);
    -
    -        /**
    -         * Returns whether the primitive type is a supertype of the given type.
    -         */
    -        @Override
    -        public Boolean visitPrimitive(PrimitiveType superType, @Nullable TypeMirror subType) {
    -            assert subType != null;
    -            if (!subType.getKind().isPrimitive()) {
    -                return false;
    -            }
    -
    -            int superTypeIndex = numericKindEnumValues.indexOf(superType.getKind());
    -            int subTypeIndex = numericKindEnumValues.indexOf(subType.getKind());
    -            return (subType.getKind() == TypeKind.CHAR && 0 <= superTypeIndex && superTypeIndex <= intIndex)
    -                || (0 <= superTypeIndex && superTypeIndex <= subTypeIndex);
    -        }
    -
    -        /**
    -         * Returns whether the type variable is a super type of the given type.
    -         *
    -         * <p>A type variable is only a supertype of its lower bound.
    -         */
    -        @Override
    -        public Boolean visitTypeVariable(TypeVariable superType, @Nullable TypeMirror subType) {
    -            assert subType != null;
    -            return isSameType(superType.getLowerBound(), subType);
    -        }
    -
    -        /**
    -         * Returns whether the given intersection type is a super type of the given type.
    -         *
    -         * <p>While one might expect that the set of supertypes of an intersection type {@code T_1 & ... & T_n} includes
    -         * the intersection of any (non-empty) subset of {@code T_1}, ..., {@code T_n}, this seems is not specified by
    -         * JLS §4.10 (which only says that "the direct supertypes of an intersection type {@code T_1 & ... & T_n} are
    -         * {@code T_i} (1 ≤ i ≤ n)"). See also issue
    -         * <a href="https://bugs.openjdk.java.net/browse/JDK-6718388">JDK-6718388</a>.
    -         *
    -         * <p>Therefore, an intersection type is only a supertype of itself.
    -         */
    -        @Override
    -        public Boolean visitIntersection(IntersectionType superType, @Nullable TypeMirror subType) {
    -            assert subType != null;
    -            return isSameType(superType, subType);
    -        }
    -    }
    -
    -    /**
    -     * Returns whether the first type is a subtype of the second type, as specified by JLS §4.10.
    -     *
    -     * <p>The subtype relationship is transitive and reflexive.
    -     *
    -     * @param t1 the first type
    -     * @param t2 the second type
    -     * @return {@code true} if and only if the first type is a subtype of the second
    -     * @throws NullPointerException if an argument is null
    -     * @throws IllegalArgumentException if given an executable or package type
    -     */
    -    @Override
    -    public final boolean isSubtype(TypeMirror t1, TypeMirror t2) {
    -        requireValidType(Objects.requireNonNull(t1));
    -        requireValidType(Objects.requireNonNull(t2));
    -
    -        // §4.10.2: The direct supertypes of the null type are all reference types other than the null type itself.
    -        if (t1.getKind() == TypeKind.NULL && REFERENCE_TYPES.contains(t2.getKind())) {
    -            return true;
    -        }
    -
    -        return t2.accept(subtypeVisitor, t1);
    -    }
    -
    -    /**
    -     * Returns whether the first type argument <em>contains</em> the second type argument, as specified by JLS §4.5.1.
    -     *
    -     * <p>Using the JLS notation, this method returns true if {@code t2 <= t1}. As JLS §4.10 states, "subtyping does not
    -     * extend through parameterized types." Hence, this method is necessarily different from
    -     * {@link #isSubtype(TypeMirror, TypeMirror)}. In particular, the super-type relationship does not include types
    -     * with covariant type arguments.
    -     *
    -     * @param t1 the first type
    -     * @param t2 the second type
    -     * @return {@code true} if and only if the first type contains the second
    -     * @throws IllegalArgumentException if given an executable or package type
    -     */
    -    @Override
    -    public final boolean contains(TypeMirror t1, TypeMirror t2) {
    -        Objects.requireNonNull(t1);
    -        Objects.requireNonNull(t2);
    -        requireValidType(t1);
    -        requireValidType(t2);
    -
    -        // We need to cover these cases (JLS §4.5.1):
    -        //
    -        // (a) wildcard t2 <= wildcard t1
    -        // 1. ? extends T <= ? extends S if T <: S
    -        // 2. ? extends T <= ?
    -        // 3. ? super T <= ? super S if S <: T
    -        // 4. ? super T <= ?
    -        // 5. ? super T <= ? extends Object
    -        //
    -        // (b) other type t2 <= other type t1
    -        // 1. T <= T
    -        //
    -        // (c) other type t2 <= wildcard t1
    -        // 1. T <= ? extends T
    -        // 2. T <= ? super T
    -
    -        if (t1.getKind() == TypeKind.WILDCARD) {
    -            @Nullable TypeMirror t1ExtendsBound = ((WildcardType) t1).getExtendsBound();
    -            @Nullable TypeMirror t1SuperBound = ((WildcardType) t1).getSuperBound();
    -            boolean t1HasExtendsBound = t1ExtendsBound != null;
    -            boolean t1HasSuperBound = t1SuperBound != null;
    -
    -            if (t2.getKind() == TypeKind.WILDCARD) {
    -                // Handle (a).
    -                @Nullable TypeMirror t2ExtendsBound = ((WildcardType) t2).getExtendsBound();
    -                @Nullable TypeMirror t2SuperBound = ((WildcardType) t2).getSuperBound();
    -
    -                if (t2ExtendsBound != null) {
    -                    if (t1ExtendsBound != null) {
    -                        // (a) 1.
    -                        return isSubtype(t2ExtendsBound, t1ExtendsBound);
    -                    } else if (t1SuperBound == null) {
    -                        // (a) 2.
    -                        return true;
    -                    }
    -                    // Note that "? super S" never contains a type argument of form "? extends T"
    -                    return false;
    -                } else if (t2SuperBound != null) {
    -                    if (t1SuperBound != null) {
    -                        // (a) 3.
    -                        return isSubtype(t1SuperBound, t2SuperBound);
    -                    } else {
    -                        // (a) 4. and 5.: Handle case "? super T <= ?" (always true) or "? super S <= ? extends T" (only
    -                        // if T is Object)
    -                        return t1ExtendsBound == null
    -                            || isSameType(t1ExtendsBound, typeMirror(Object.class));
    -                    }
    -                } else {
    -                    // Handle special case of (a), namely "? <= ? extends T" (only if T is Object), "? <= ? super T"
    -                    // (always false), or "? <= ?" (which is equivalent to "? extends Object <= ? extends Object" and
    -                    // therefore true).
    -                    return t1SuperBound == null && (
    -                        t1ExtendsBound == null || isSameType(t1ExtendsBound, typeMirror(Object.class))
    -                    );
    -                }
    -            } else {
    -                // Handle (c). Reduce to case (a).
    -                if (t1HasExtendsBound) {
    -                    // (c) 1.
    -                    return contains(t1, getWildcardType(t2, null));
    -                } else if (t1HasSuperBound) {
    -                    // (c) 2.
    -                    return contains(t1, getWildcardType(null, t2));
    -                }
    -                // Combining (c) 1. with (a) 2. or (c) 2. with (a) 4., we immediately have "T <= ?"
    -                return true;
    -            }
    -        } else {
    -            // Handle (b).
    -            return isSameType(t1, t2);
    -        }
    -    }
    -
    -    /**
    -     * Returns the direct super types of the given type declaration, as defined by JLS §4.10.2.
    -     */
    -    private List<DeclaredType> directSupertypesOfTypeDeclaration(TypeElement typeElement) {
    -        TypeMirror superClass = typeElement.getSuperclass();
    -        List<? extends TypeMirror> interfaces = typeElement.getInterfaces();
    -        List<DeclaredType> newSuperTypes = new ArrayList<>(1 + interfaces.size());
    -        if (superClass.getKind() == TypeKind.DECLARED) {
    -            newSuperTypes.add((DeclaredType) superClass);
    -        }
    -        for (TypeMirror superInterface: interfaces) {
    -            newSuperTypes.add((DeclaredType) superInterface);
    -        }
    -        if (typeElement.getKind() == ElementKind.INTERFACE && interfaces.isEmpty()) {
    -            newSuperTypes.add((DeclaredType) typeMirror(Object.class));
    -        }
    -        return newSuperTypes;
    -    }
    -
    -    /**
    -     * Internal class to keep state for the Dijkstra shortest-path algorithm in
    -     * {@link #getShortestPathToSuperType(TypeElement, DeclaredType)}.
    -     */
    -    private static final class TypeDeclarationVertexState {
    -        private int distance;
    -        private boolean visited;
    -        private final TypeElement typeElement;
    -
    -        /**
    -         * The type as contained in {@code previous.typeDeclaration.getSuperTypes()}.
    -         */
    -        private final DeclaredType declaredType;
    -
    -        @Nullable private TypeDeclarationVertexState previous;
    -
    -        private TypeDeclarationVertexState(int distance, boolean visited, TypeElement typeElement,
    -                DeclaredType declaredType) {
    -            this.distance = distance;
    -            this.visited = visited;
    -            this.typeElement = typeElement;
    -            this.declaredType = declaredType;
    -        }
    -
    -        /**
    -         * Returns the path induced by this node, starting with {@code derived} and ending with {@link #declaredType}.
    -         *
    -         * <p>The path is obtained by following {@link #previous} until {@code null}. Each element in the path (except
    -         * for the first) is the {@link #declaredType} of the current instance.
    -         *
    -         * @param derived the first element in the path
    -         * @return the path induced by this node
    -         */
    -        private List<DeclaredType> toPath(DeclaredType derived) {
    -            DeclaredType[] path = new DeclaredType[distance + 1];
    -            int count = path.length;
    -            TypeDeclarationVertexState pathElement = this;
    -            while (pathElement.previous != null) {
    -                --count;
    -                path[count] = pathElement.declaredType;
    -                pathElement = pathElement.previous;
    -            }
    -            path[0] = derived;
    -            return Arrays.asList(path);
    -        }
    -    }
    -
    -    /**
    -     * Returns the shortest inheritance path between a type declaration and a subtype (starting with
    -     * {@code derived} and ending with {@code base}).
    -     *
    -     * <p>Each element in the returned path is a non-generic type, a raw type, or a parameterized type. The
    -     * {@link DeclaredType} at position {@code i} is always contained in the result of
    -     * {@link #directSupertypesOfTypeDeclaration(TypeElement)} applied to the type declaration of the type at position
    -     * {@code (i - 1)}.
    -     *
    -     * <p>This methods runs a Dijkstra shortest-path algorithm. It relies on {@link TypeElement#equals(Object)}
    -     * being well-defined (two object representing the same type declaration must compare equal). Consequently, if
    -     * {@link DeclaredType} instances have an identity, it must be guaranteed that there are no two instances
    -     * representing the same type declaration.
    -     *
    -     * @param base base type declaration
    -     * @param derived derived type
    -     * @return If there is an inheritance path from {@code derived} to {@code base}, then a {@code List<DeclaredType>}
    -     *     {@code p} such that {@code p.get(0).equals(toGenericType(derived))} and
    -     *     {@code toRawTypeDeclaration(p.get(p.size() - 1)).equals(base)} are {@code true}. Otherwise, {@code null} to
    -     *     indicate that there is no such path.
    -     */
    -    @Nullable
    -    private List<DeclaredType> getShortestPathToSuperType(TypeElement base, DeclaredType derived) {
    -        TypeElement typeElement = (TypeElement) derived.asElement();
    -
    -        Set<TypeElement> boundary = new LinkedHashSet<>();
    -        Map<TypeElement, TypeDeclarationVertexState> dijkstraState = new HashMap<>();
    -
    -        // Distance from derived to itself is 0
    -        dijkstraState.put(typeElement, new TypeDeclarationVertexState(0, false, typeElement, derived));
    -        // Start off with derived
    -        boundary.add(typeElement);
    -
    -        // Invariants:
    -        // - boundary only contains nodes that have *not* been visited
    -        // - For all visited nodes, the shortest path is known
    -        while (!boundary.isEmpty()) {
    -            // shortest := vertex in boundary with smallest distance from typeElement
    -            @Nullable TypeDeclarationVertexState shortest = null;
    -            for (TypeElement currentDeclaration: boundary) {
    -                TypeDeclarationVertexState current = dijkstraState.get(currentDeclaration);
    -                if (shortest == null || current.distance < shortest.distance) {
    -                    shortest = current;
    -                }
    -            }
    -            // Since boundary is non-empty, shortest was assigned in the previous loop. Also note that due to the above
    -            // invariant, shortest has not been visited.
    -            assert shortest != null && !shortest.visited;
    -
    -            // Terminate if we found base. Since shortest.distance is non-decreasing over the loop iterations, it is
    -            // impossible to find a shorter path in future iterations.
    -            if (shortest.typeElement.equals(base)) {
    -                return shortest.toPath(derived);
    -            }
    -
    -            // Remove shortest from boundary.
    -            boundary.remove(shortest.typeElement);
    -            shortest.visited = true;
    -
    -            for (DeclaredType superType: directSupertypesOfTypeDeclaration(shortest.typeElement)) {
    -                // A direct super type of a type declaration is either a non-generic type declaration or a raw type (in
    -                // both cases represented as DeclaredType with no actual type parameters) or a parameterized type
    -                TypeElement superDeclaration = (TypeElement) superType.asElement();
    -                @Nullable TypeDeclarationVertexState stats = dijkstraState.get(superDeclaration);
    -
    -                if (stats == null) {
    -                    stats = new TypeDeclarationVertexState(Integer.MAX_VALUE, false, superDeclaration, superType);
    -                    dijkstraState.put(superDeclaration, stats);
    -                }
    -
    -                int alt = shortest.distance + 1;
    -                if (!stats.visited && alt < stats.distance) {
    -                    stats.distance = alt;
    -                    stats.previous = shortest;
    -                    boundary.add(superDeclaration);
    -                }
    -            }
    -        }
    -        return null;
    -    }
    -
    -    /**
    -     * Visitor of a type mirror. Returns the erasure of the visited type mirror.
    -     *
    -     * @see #erasureVisitor
    -     */
    -    private final class ErasureVisitor extends ExtendedTypeKindVisitor7<TypeMirror, Void> {
    -        @Override
    -        public TypeMirror visitDeclared(DeclaredType declaredType, @Nullable Void ignored) {
    -            TypeMirror originalEnclosingType = declaredType.getEnclosingType();
    -            @Nullable DeclaredType newEnclosingType = originalEnclosingType.getKind() == TypeKind.NONE
    -                ? null
    -                : (DeclaredType) erasure(declaredType.getEnclosingType());
    -            return getDeclaredType(newEnclosingType, (TypeElement) declaredType.asElement());
    -        }
    -
    -        /**
    -         * Returns the array type corresponding to the erasure of the component type.
    -         */
    -        @Override
    -        public TypeMirror visitArray(ArrayType arrayType, @Nullable Void ignored) {
    -            return getArrayType(erasure(arrayType.getComponentType()));
    -        }
    -
    -        /**
    -         * Returns the erasure of the leftmost bound of the given type variable.
    -         *
    -         * <p>The erasure of a type variable is the erasure of its leftmost bound (JLS §4.6). If multiple bounds are
    -         * present, the upper bound is modelled as an intersection type. The erasure of an intersection type is
    -         * guaranteed to have see right form (see {@link #visitIntersection(IntersectionType, Void)}).
    -         */
    -        @Override
    -        public TypeMirror visitTypeVariable(TypeVariable typeVariable, @Nullable Void ignored) {
    -            return erasure(typeVariable.getUpperBound());
    -        }
    -
    -        /**
    -         * Returns the erasure of the leftmost member of the given intersection type.
    -         *
    -         * <p>While JLS §4.6 does not mention intersection types (and thus, strictly speaking, the erasure of an
    -         * intersection type should be the unmodified intersection type itself), this implementation computes the
    -         * erasure of an intersection type as the erasure of its left-most type.
    -         */
    -        @Override
    -        public TypeMirror visitIntersection(IntersectionType intersectionType, @Nullable Void ignored) {
    -            return erasure(intersectionType.getBounds().get(0));
    -        }
    -
    -        /**
    -         * Returns the given type itself.
    -         *
    -         * <p>JLS §4.6 specifies: "The erasure of every other type is the type itself."
    -         */
    -        @Override
    -        protected TypeMirror defaultAction(TypeMirror type, Void ignored) {
    -            return type;
    -        }
    -    }
    -
    -    /**
    -     * Returns the erasure of a type, as specified by JLS §4.6.
    -     *
    -     * @param type the type to be erased
    -     * @return the erasure of the given type
    -     * @throws IllegalArgumentException if given a package type
    -     */
    -    @Override
    -    public final TypeMirror erasure(TypeMirror type) {
    -        Objects.requireNonNull(type);
    -        requireValidType(type);
    -
    -        return type.accept(erasureVisitor, null);
    -    }
    -
    -    /**
    -     * Returns the element corresponding to a type.
    -     *
    -     * <p>The type may be a {@code DeclaredType} or {@code TypeVariable}. Returns {@code null} if the type is not one
    -     * with a corresponding element.
    -     *
    -     * @param type the type
    -     * @return the element corresponding to the given type
    -     */
    -    @Override
    -    public final Element asElement(TypeMirror type) {
    -        Objects.requireNonNull(type);
    -        requireValidType(type);
    -
    -        if (type.getKind() == TypeKind.DECLARED) {
    -            return ((DeclaredType) type).asElement();
    -        } else if (type.getKind() == TypeKind.TYPEVAR) {
    -            return ((TypeVariable) type).asElement();
    -        } else {
    -            return null;
    -        }
    -    }
    -
    -    /**
    -     * Returns whether the two given type arguments represent the same type.
    -     *
    -     * <p>If either of the arguments to this method represents a wildcard, this method will return false. As a
    -     * consequence, a wildcard is not the same type as itself.
    -     *
    -     * @param t1 the first type
    -     * @param t2 the second type
    -     * @return {@code true} if and only if the two types are the same
    -     */
    -    @Override
    -    public final boolean isSameType(TypeMirror t1, TypeMirror t2) {
    -        requireValidType(Objects.requireNonNull(t1));
    -        requireValidType(Objects.requireNonNull(t2));
    -
    -        return t1.getKind() != TypeKind.WILDCARD && t1.equals(t2);
    -    }
    -
    -    /**
    -     * Returns the greatest lower bound (glb) of a wildcard extends bound and an upper bound of a type parameter.
    -     *
    -     * <p>This method is only called from {@link #capture(TypeMirror)}. JLS §5.1.10 defines the greatest lower bound
    -     * {@code glb(V_1, ..., V_m)} as {@code V_1 & ... & V_m}. Unfortunately, the specification provides no clarity
    -     * whether intersection types are allowed to be nested. This implementation takes the interpretation that
    -     * intersection types should not be nested. Therefore, the bounds contained in {@code originalUpperBound} are
    -     * unwrapped.
    -     *
    -     * @param wildcardExtendsBound extends bound of the wildcard type argument
    -     * @param originalUpperBound original upper bound of the type parameter
    -     * @return the greatest lower bound
    -     */
    -    private static TypeMirror[] greatestLowerBound(TypeMirror wildcardExtendsBound, TypeMirror originalUpperBound) {
    -        @Nullable TypeMirror[] result = null;
    -        if (originalUpperBound instanceof IntersectionType) {
    -            IntersectionType originalIntersectionBound = (IntersectionType) originalUpperBound;
    -            if (originalIntersectionBound.isIntersectionType()) {
    -                List<? extends TypeMirror> originalBounds = originalIntersectionBound.getBounds();
    -                result = new TypeMirror[1 + originalBounds.size()];
    -                int i = 0;
    -                for (TypeMirror originalBound: originalBounds) {
    -                    ++i;
    -                    result[i] = originalBound;
    -                }
    -            }
    -        }
    -
    -        if (result == null) {
    -            result = new TypeMirror[2];
    -            result[1] = originalUpperBound;
    -        }
    -
    -        result[0] = wildcardExtendsBound;
    -        return result;
    -    }
    -
    -    /**
    -     * Returns the caputure conversion of (just) the given wildcard argument.
    -     *
    -     * <p>This method is only called by {@link #capture(TypeMirror)}.
    -     */
    -    private TypeVariable captureWildcardArgument(WildcardType wildcardArgument, TypeParameterElement typeParameter) {
    -        TypeVariable originalTypeVariable = (TypeVariable) typeParameter.asType();
    -
    -        // Denoted U_i in JLS 5.1.10
    -        TypeMirror originalUpperBound = originalTypeVariable.getUpperBound();
    -
    -        // Both of the following are denoted B_i in JLS 5.1.10 (in "? extends B_i" and "? super B_i", respectively)
    -        @Nullable TypeMirror wildcardExtendsBound = wildcardArgument.getExtendsBound();
    -        @Nullable TypeMirror wildcardSuperBound = wildcardArgument.getSuperBound();
    -
    -        TypeMirror newUpperBound;
    -        TypeMirror newLowerBound;
    -
    -        // There exists a capture conversion from a parameterized type G<T_1,...,T_n> (§4.5) to a parameterized type
    -        // G<S_1, ..., S_n>, where, for 1 <= i <= n:
    -        if (wildcardExtendsBound == null && wildcardSuperBound == null) {
    -            // If T_i is a wildcard type argument (§4.5.1) of the form ?, then S_i is a fresh type variable whose
    -            // upper bound is U_i[A_1 := S_1, ..., A_n := S_n] and whose lower bound is the null type (§4.1).
    -            newUpperBound = originalUpperBound;
    -            newLowerBound = getNullType();
    -        } else if (wildcardSuperBound == null) {
    -            // If T_i is a wildcard type argument of the form ? extends B_i, then S_i is a fresh type variable whose
    -            // upper bound is glb(B_i, U_i[A_1 := S_1, ..., A_n := S_n]) and whose lower bound is the null type.
    -            //
    -            // glb(V_1, ..., V_m) is defined as V_1 & ... & V_m.
    -            // It is a compile-time error if, for any two classes (not interfaces) V_i and V_j, V_i is not a
    -            // subclass of V_j or vice versa.
    -            newUpperBound = getIntersectionType(greatestLowerBound(wildcardExtendsBound, originalUpperBound));
    -            newLowerBound = getNullType();
    -        } else {
    -            // If T_i is a wildcard type argument of the form ? super B_i, then S_i is a fresh type variable whose
    -            // upper bound is U_i[A_1 := S1, ..., A_n := S_n] and whose lower bound is B_i.
    -            assert wildcardExtendsBound == null;
    -
    -            newUpperBound = originalUpperBound;
    -            newLowerBound = wildcardSuperBound;
    -        }
    -
    -        return getTypeVariable(typeParameter, newUpperBound, newLowerBound, wildcardArgument);
    -    }
    -
    -    /**
    -     * Returns the capture conversion of the given type, as specified by JLS §5.1.10.
    -     *
    -     * @param type the type to be converted
    -     * @return the result of applying capture conversion
    -     * @throws IllegalArgumentException if given an executable or package type
    -     */
    -    @Override
    -    public final TypeMirror capture(TypeMirror type) {
    -        Objects.requireNonNull(type);
    -        requireValidType(type);
    -
    -        // JLS §5.1.10 states: "Capture conversion on any type other than a parameterized type (§4.5) acts as an
    -        // identity conversion (§5.1.1)."
    -        if (type.getKind() != TypeKind.DECLARED) {
    -            return type;
    -        }
    -
    -        DeclaredType declaredType = (DeclaredType) type;
    -        List<? extends TypeMirror> typeArguments = declaredType.getTypeArguments();
    -        if (typeArguments.isEmpty()) {
    -            return declaredType;
    -        }
    -
    -        TypeElement typeDeclaration = (TypeElement) declaredType.asElement();
    -        Iterator<? extends TypeMirror> typeArgumentIterator = typeArguments.iterator();
    -        Iterator<? extends TypeParameterElement> typeParameterIterator = typeDeclaration.getTypeParameters().iterator();
    -        TypeMirror[] newArguments = new TypeMirror[typeArguments.size()];
    -        Map<TypeParameterElement, TypeMirror> substitutions = new LinkedHashMap<>();
    -        for (int index = 0; index < newArguments.length; ++index) {
    -            TypeMirror typeArgument = typeArgumentIterator.next();
    -            TypeParameterElement typeParameter = typeParameterIterator.next();
    -            TypeMirror substitution;
    -
    -            if (typeArgument.getKind() != TypeKind.WILDCARD) {
    -                newArguments[index] = typeArgument;
    -                substitution = typeArgument;
    -            } else {
    -                // For the intermediate declared type (see below), we need the original type variable corresponding to
    -                // the formal type parameter. Only original type variables will be replaced by the substitutionVisitor.
    -                newArguments[index] = typeParameter.asType();
    -                substitution = captureWildcardArgument((WildcardType) typeArgument, typeParameter);
    -            }
    -            substitutions.put(typeParameter, substitution);
    -        }
    -
    -        TypeMirror enclosingType = declaredType.getEnclosingType();
    -
    -        // Construct intermediateDeclaredType that already has type variables in its argument list instead of wildcard
    -        // arguments.
    -        DeclaredType intermediateDeclaredType;
    -        if (enclosingType.getKind() == TypeKind.DECLARED) {
    -            intermediateDeclaredType = getDeclaredType((DeclaredType) enclosingType, typeDeclaration, newArguments);
    -        } else {
    -            intermediateDeclaredType = getDeclaredType(typeDeclaration, newArguments);
    -        }
    -
    -        return substitute(intermediateDeclaredType, substitutions);
    -    }
    -
    -    /**
    -     * Returns a new type variable that corresponds to the given formal type parameter and that has the given actual
    -     * upper and lower bounds.
    -     *
    -     * <p>This method is primarily needed during capture conversion, in order to create a fresh type variable that
    -     * overrides the bounds of the formal type parameter it represents. This method is also called during substitution.
    -     * As an example, given a formal type parameter {@code T extends Object} and an upper bound {@code Number}, this
    -     * method returns the type variable {@code T} with upper bound {@code Number}.
    -     *
    -     * <p>This method is not suited for creating type variables with recursive type bounds if these bounds override the
    -     * bounds of the formal type parameter (as only happens during capture conversion). In order to create such a type
    -     * variable, this method may be used to create an interim type variable, where the (overridden) upper and lower
    -     * bounds should only reference the type variable returned by {@link TypeParameterElement#asType()}. As a second
    -     * step, {@link #substitute(TypeMirror, Map)} may then be used to substitute the original type variable with the
    -     * interim type variable. The result will be a fresh type variable with the overridden bounds, and these bounds
    -     * will reference the fresh type variable instead of the original type variable.
    -     *
    -     * @param typeParameter the formal type parameter
    -     * @param upperBound the upper bound for the new type variable, may contain recursive references to
    -     *     {@code typeParameter.asType()}
    -     * @param lowerBound the lower bound for the new type variable, may contain recursive references to
    -     *     {@code typeParameter.asType()}
    -     * @param capturedTypeArgument the wildcard type argument that new type variable captures as part of a capture
    -     *     conversion (§5.1.10 JLS), or {@code null} if the new type variable is not the result of a capture conversion
    -     * @return the new type variable
    -     * @throws NullPointerException if any of the first three arguments is null
    -     */
    -    protected TypeVariable getTypeVariable(TypeParameterElement typeParameter, TypeMirror upperBound,
    -            TypeMirror lowerBound, @Nullable WildcardType capturedTypeArgument) {
    -        Objects.requireNonNull(typeParameter);
    -        Objects.requireNonNull(upperBound);
    -        Objects.requireNonNull(lowerBound);
    -        requireValidType(upperBound);
    -        requireValidType(lowerBound);
    -        requireValidType(capturedTypeArgument);
    -
    -        TypeVariable typeVariable = createTypeVariable(typeParameter, capturedTypeArgument);
    -        setTypeVariableBounds(typeVariable, upperBound, lowerBound);
    -        return typeVariable;
    -    }
    -
    -    /**
    -     * Creates a new <em>unfinished</em> type variable for the given formal parameter.
    -     *
    -     * <p>Whenever this method is called within this class, the returned type variable is guaranteed to be passed to
    -     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} before being used as a {@link TypeVariable}
    -     * instance. That is, the returned type variable is considered to be under construction until being passed to
    -     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)}, and only after that method call, the type
    -     * variable will have to satisfy the contract specified by interface {@link TypeVariable} and its super-interfaces.
    -     *
    -     * <p>Before {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} is called on the returned
    -     * {@link TypeVariable}, calling either {@link TypeVariable#getUpperBound()} or {@link TypeVariable#getLowerBound()}
    -     * must trigger an {@link IllegalStateException}.
    -     *
    -     * <p>Note that the previous paragraph does not guarantee that
    -     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} is always called on the newly returned
    -     * type-variable instance. If any exception occurs before the new type-variable could be used, then
    -     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} may not be called (even if the exception is
    -     * unrelated to the construction of the new type-variable instance).
    -     *
    -     * <p>The {@link TypeVariable} interface does not provide access to captured wildcard type arguments. It can be
    -     * retrieved by calling {@link #capturedTypeArgument(TypeVariable)} instead.
    -     *
    -     * @param typeParameter the formal type parameter
    -     * @param capturedTypeArgument the wildcard type argument that new type variable captures as part of a capture
    -     *     conversion (§5.1.10 JLS), or {@code null} if the new type variable is not the result of a capture conversion
    -     * @return new unfinished type variable for the given formal parameter, which may not yet satisfy the contracts
    -     *     of {@link TypeVariable}
    -     * @see #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)
    -     * @see #capturedTypeArgument(TypeVariable)
    -     * @throws NullPointerException if {@code typeParameter} is null
    -     */
    -    protected abstract TypeVariable createTypeVariable(TypeParameterElement typeParameter,
    -        @Nullable WildcardType capturedTypeArgument);
    -
    -    /**
    -     * Sets the bounds of a type variable previously returned by
    -     * {@link #createTypeVariable(TypeParameterElement, WildcardType)}.
    -     *
    -     * <p>Before an (unfinished) type-variable instance returned by
    -     * {@link #createTypeVariable(TypeParameterElement, WildcardType)} is used by this class, this method is guaranteed
    -     * to be called exactly once.
    -     *
    -     * <p>Implementations that create effectively immutable {@link TypeMirror} instances may use this method to "freeze"
    -     * the given type-variable instance.
    -     *
    -     * @param typeVariable type variable previously returned by
    -     *     {@link #createTypeVariable(TypeParameterElement, WildcardType)}
    -     * @param upperBound Upper bound for the given type variable. If no explicit upper bound is used, a
    -     *     {@link DeclaredType} representing {@link Object} will be passed.
    -     * @param lowerBound Lower bound for the given type variable. This may a {@link NullType} instance, unless capture
    -     *     conversion produced a type variable with a non-trivial lower bound.
    -     * @see #createTypeVariable(TypeParameterElement, WildcardType)
    -     */
    -    protected abstract void setTypeVariableBounds(TypeVariable typeVariable, TypeMirror upperBound,
    -        TypeMirror lowerBound);
    -
    -    /**
    -     * Returns the captured wildcard type argument of the given type variable, or null if the given type variable is not
    -     * the result of a capture conversion.
    -     *
    -     * <p>This method returns the wildcard type argument that was previously passed to
    -     * {@link #createTypeVariable(TypeParameterElement, WildcardType)}.
    -     *
    -     * @param typeVariable the type variable that may be the result of a capture conversion
    -     * @return the captured wildcard type argument, or null if not applicable
    -     */
    -    @Nullable
    -    protected abstract WildcardType capturedTypeArgument(TypeVariable typeVariable);
    -
    -    /**
    -     * Returns a new intersection type. At least one bounds needs to be given.
    -     *
    -     * @param bounds the bounds of the new intersection type
    -     * @return the new intersection type
    -     * @throws IllegalArgumentException if the given array is empty
    -     */
    -    public abstract IntersectionType getIntersectionType(TypeMirror... bounds);
    -
    -    /**
    -     * Visitor of {@link TypeMirror} instances that appends the {@link String} representation to the
    -     * {@link StringBuilder} instance passed as visitor argument.
    -     *
    -     * <p>This visitor is only used within this class and only on <em>valid</em> {@link TypeMirror} instances. Hence, it
    -     * can be asserted that the visitor parameter is always non-null.
    -     *
    -     * @see #requireValidType(TypeMirror)
    -     */
    -    private final class ToStringVisitor extends ExtendedTypeKindVisitor7<Void, StringBuilder> {
    -        @Override
    -        public Void visitPrimitive(PrimitiveType primitiveType, @Nullable StringBuilder stringBuilder) {
    -            assert stringBuilder != null;
    -            stringBuilder.append(primitiveType.getKind().toString().toLowerCase());
    -            return null;
    -        }
    -
    -        @Override
    -        public Void visitNull(NullType nullType, @Nullable StringBuilder stringBuilder) {
    -            assert stringBuilder != null;
    -            stringBuilder.append("null");
    -            return null;
    -        }
    -
    -        @Override
    -        public Void visitNoType(NoType noType, @Nullable StringBuilder stringBuilder) {
    -            assert stringBuilder != null;
    -            stringBuilder.append(noType.getKind().toString().toLowerCase());
    -            return null;
    -        }
    -
    -        @Override
    -        public Void visitDeclared(DeclaredType declaredType, @Nullable StringBuilder stringBuilder) {
    -            assert stringBuilder != null;
    -            TypeMirror enclosingType = declaredType.getEnclosingType();
    -            TypeElement typeElement = (TypeElement) declaredType.asElement();
    -            if (enclosingType.getKind() == TypeKind.DECLARED) {
    -                visitDeclared((DeclaredType) enclosingType, stringBuilder);
    -                stringBuilder.append('.').append(typeElement.getSimpleName());
    -            } else {
    -                stringBuilder.append(typeElement.getQualifiedName());
    -            }
    -
    -            List<? extends TypeMirror> typeArguments = declaredType.getTypeArguments();
    -            if (!typeArguments.isEmpty()) {
    -                stringBuilder.append('<');
    -                appendList(stringBuilder, typeArguments, ", ");
    -                stringBuilder.append('>');
    -            }
    -            return null;
    -        }
    -
    -        @Override
    -        public Void visitArray(ArrayType arrayType, @Nullable StringBuilder stringBuilder) {
    -            assert stringBuilder != null;
    -            arrayType.getComponentType().accept(this, stringBuilder);
    -            stringBuilder.append("[]");
    -            return null;
    -        }
    -
    -        @Override
    -        public Void visitTypeVariable(TypeVariable typeVariable, @Nullable StringBuilder stringBuilder) {
    -            assert stringBuilder != null;
    -            @Nullable WildcardType capturedTypeArgument = capturedTypeArgument(typeVariable);
    -            if (capturedTypeArgument != null) {
    -                stringBuilder.append("capture<");
    -                capturedTypeArgument.accept(this, stringBuilder);
    -                stringBuilder.append('>');
    -            } else {
    -                stringBuilder.append(typeVariable.asElement().getSimpleName());
    -            }
    -            return null;
    -        }
    -
    -        @Override
    -        public Void visitWildcard(WildcardType wildcardTypeArgument, @Nullable StringBuilder stringBuilder) {
    -            assert stringBuilder != null;
    -            stringBuilder.append('?');
    -            @Nullable TypeMirror extendsBound = wildcardTypeArgument.getExtendsBound();
    -            if (extendsBound != null) {
    -                stringBuilder.append(" extends ");
    -                extendsBound.accept(this, stringBuilder);
    -            }
    -            @Nullable TypeMirror superBound = wildcardTypeArgument.getSuperBound();
    -            if (superBound != null) {
    -                stringBuilder.append(" super ");
    -                superBound.accept(this, stringBuilder);
    -            }
    -            return null;
    -        }
    -
    -        @Override
    -        public Void visitIntersection(IntersectionType intersectionType, @Nullable StringBuilder stringBuilder) {
    -            assert stringBuilder != null;
    -            appendList(stringBuilder, intersectionType.getBounds(), " & ");
    -            return null;
    -        }
    -
    -        private void appendList(StringBuilder stringBuilder, List<? extends TypeMirror> types, String glue) {
    -            assert !types.isEmpty();
    -
    -            boolean first = true;
    -            for (TypeMirror type: types) {
    -                if (first) {
    -                    first = false;
    -                } else {
    -                    stringBuilder.append(glue);
    -                }
    -                type.accept(this, stringBuilder);
    -            }
    -        }
    -    }
    -
    -    /**
    -     * Returns the canonical string representation of the given type.
    -     *
    -     * @param type type
    -     * @return canonical string representation of the given type
    -     */
    -    public final String toString(TypeMirror type) {
    -        requireValidType(Objects.requireNonNull(type));
    -
    -        StringBuilder stringBuilder = new StringBuilder(DEFAULT_STRING_BUILDER_SIZE);
    -        type.accept(toStringVisitor, stringBuilder);
    -        return stringBuilder.toString();
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/type/AnnotatedConstruct.java b/src/main/java/net/florianschoppmann/java/type/AnnotatedConstruct.java
    deleted file mode 100644
    index 84c249c..0000000
    --- a/src/main/java/net/florianschoppmann/java/type/AnnotatedConstruct.java
    +++ /dev/null
    @@ -1,48 +0,0 @@
    -package net.florianschoppmann.java.type;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.element.AnnotationMirror;
    -import java.lang.annotation.Annotation;
    -import java.util.List;
    -
    -/**
    - * Represents a construct that can be annotated, equivalent to {@code javax.lang.model.AnnotatedConstruct} in JDK 8.
    - *
    - * <p>This interface's sole purpose is to ensure source compatibility with Java 7 and 8, despite the fact that
    - * {@code javax.lang.model.AnnotatedConstruct} was retrofitted into the Java language model hierarchy in JDK 8. See the
    - * <a href="http://docs.oracle.com/javase/8/docs/api/javax/lang/model/AnnotatedConstruct.html">JDK 8 JavaDoc for
    - * {@code javax.lang.model.AnnotatedConstruct}</a> for more information.
    - *
    - * <p>Implementations may implement both {@code javax.lang.model.AnnotatedConstruct} and this interface. At some time
    - * in the future, when Java 7 compatibility is no longer required, this interface will be deprecated and eventually
    - * removed in favor of {@code javax.lang.model.AnnotatedConstruct}.
    - */
    -public interface AnnotatedConstruct {
    -    /**
    -     * Returns the annotations that are <em>directly present</em> on this construct.
    -     *
    -     * @return the annotations <em>directly present</em> on this construct; an empty list if there are none
    -     */
    -    List<? extends AnnotationMirror> getAnnotationMirrors();
    -
    -    /**
    -     * Returns this construct's annotation of the specified type if such an annotation is <em>present</em>, else
    -     * {@code null}.
    -     *
    -     * @param <A> the annotation type
    -     * @param annotationType the {@code Class} object corresponding to the annotation type
    -     * @return this construct's annotation for the specified annotation type if present, else {@code null}
    -     */
    -    @Nullable
    -    <A extends Annotation> A getAnnotation(Class<A> annotationType);
    -
    -    /**
    -     * Returns annotations that are <em>associated</em> with this construct.
    -     *
    -     * @param <A> the annotation type
    -     * @param annotationType the {@code Class} object corresponding to the annotation type
    -     * @return this construct's annotations for the specified annotation type if present on this construct, else an
    -     *     empty array
    -     */
    -    <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType);
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.java b/src/main/java/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.java
    deleted file mode 100644
    index 95b659c..0000000
    --- a/src/main/java/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.java
    +++ /dev/null
    @@ -1,93 +0,0 @@
    -package net.florianschoppmann.java.type;
    -
    -import javax.annotation.Nullable;
    -import javax.annotation.processing.SupportedSourceVersion;
    -import javax.lang.model.type.TypeMirror;
    -import javax.lang.model.type.UnknownTypeException;
    -import javax.lang.model.util.TypeKindVisitor7;
    -import java.util.Objects;
    -
    -import static javax.lang.model.SourceVersion.RELEASE_7;
    -
    -/**
    - * A visitor of types that supports {@link IntersectionType}, but otherwise behaves as {@link TypeKindVisitor7}.
    - *
    - * <p>This visitor provides a new method {@link #visitIntersection(IntersectionType, Object)} in order to visit
    - * instances of {@link IntersectionType}. At some time in the future, when Java 7 compatibility is no longer
    - * required, {@link IntersectionType} and this class will be removed and replaced by their Java 8 equivalents.
    - *
    - * @param <R> The return type of this visitor's methods. Use {@link Void} for visitors that do not need to return
    - *     results.
    - * @param <P> The type of the additional parameter to this visitor's methods. Use {@code Void} for visitors that do
    - *     not need an additional parameter.
    - */
    -@SupportedSourceVersion(RELEASE_7)
    -public class ExtendedTypeKindVisitor7<R, P> extends TypeKindVisitor7<R, P> {
    -    /**
    -     * Constructor for concrete subclasses to call; uses {@code null} for the default value.
    -     */
    -    protected ExtendedTypeKindVisitor7() {
    -        super(null);
    -    }
    -
    -    /**
    -     * Constructor for concrete subclasses to call; uses the argument for the default value.
    -     *
    -     * @param defaultValue the value to assign to {@link #DEFAULT_VALUE}
    -     */
    -    protected ExtendedTypeKindVisitor7(R defaultValue) {
    -        super(defaultValue);
    -    }
    -
    -    /**
    -     * Visits an unknown kind of type or an {@link IntersectionType}, which did not exist in the {@link TypeMirror}
    -     * hierarchy of Java 7.
    -     *
    -     * <p>This method is final. Use {@link #visitOther(TypeMirror, Object)} to override the default behavior when
    -     * visiting an unknown type.
    -     *
    -     * @param typeMirror the type to visit
    -     * @param parameter a visitor-specified parameter
    -     * @return a visitor-specified result
    -     * @throws UnknownTypeException a visitor implementation may optionally throw this exception
    -     */
    -    @Override
    -    @Nullable
    -    public final R visitUnknown(TypeMirror typeMirror, @Nullable P parameter) {
    -        Objects.requireNonNull(typeMirror);
    -        if (typeMirror instanceof IntersectionType && ((IntersectionType) typeMirror).isIntersectionType()) {
    -            return visitIntersection((IntersectionType) typeMirror, parameter);
    -        } else {
    -            return visitOther(typeMirror, parameter);
    -        }
    -    }
    -
    -    /**
    -     * Visits an unknown kind of type. This can occur if the language evolves and new kinds of types are added to the
    -     * {@link TypeMirror} hierarchy.
    -     *
    -     * <p>The default implementation of this method in {@code TypeKindVisitor7WithIntersectionType} will always throw
    -     * {@link UnknownTypeException}. This behavior is not required of a subclass.
    -     *
    -     * @param typeMirror the type to visit
    -     * @param parameter a visitor-specified parameter
    -     * @return a visitor-specified result
    -     * @throws UnknownTypeException a visitor implementation may optionally throw this exception
    -     */
    -    @Nullable
    -    public R visitOther(TypeMirror typeMirror, @Nullable P parameter) {
    -        throw new UnknownTypeException(typeMirror, parameter);
    -    }
    -
    -    /**
    -     * Visits an intersection type by calling {@link #defaultAction(TypeMirror, Object)}.
    -     *
    -     * @param intersectionType the intersection type to visit
    -     * @param parameter a visitor-specified parameter
    -     * @return the result of {@code defaultAction}
    -     */
    -    @Nullable
    -    public R visitIntersection(IntersectionType intersectionType, @Nullable P parameter) {
    -        return defaultAction(intersectionType, parameter);
    -    }
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/type/IntersectionType.java b/src/main/java/net/florianschoppmann/java/type/IntersectionType.java
    deleted file mode 100644
    index 657c973..0000000
    --- a/src/main/java/net/florianschoppmann/java/type/IntersectionType.java
    +++ /dev/null
    @@ -1,30 +0,0 @@
    -package net.florianschoppmann.java.type;
    -
    -import javax.lang.model.type.TypeMirror;
    -import java.util.List;
    -
    -/**
    - * Represents an intersection type, equivalent to {@code javax.lang.model.type.IntersectionType} in JDK 8.
    - *
    - * <p>Implementations may implement both {@code javax.lang.model.type.IntersectionType} and this interface. At some time
    - * in the future, when Java 7 compatibility is no longer required, this interface will be deprecated and eventually
    - * removed in favor of {@code javax.lang.model.type.IntersectionType}.
    - */
    -public interface IntersectionType extends TypeMirror, AnnotatedConstruct {
    -    /**
    -     * Return the bounds comprising this intersection type.
    -     *
    -     * @return the bounds of this intersection types.
    -     */
    -    List<? extends TypeMirror> getBounds();
    -
    -    /**
    -     * Returns whether this type mirror represents an intersection type.
    -     *
    -     * <p>Since implementations may choose to implement multiple {@link TypeMirror} sub-interfaces at the same time,
    -     * this method exists so that an object can explicitly indicate whether it represents an intersection type.
    -     *
    -     * @return whether this type mirror represents an intersection type
    -     */
    -    boolean isIntersectionType();
    -}
    diff --git a/src/main/java/net/florianschoppmann/java/type/NonNullByDefault.java b/src/main/java/net/florianschoppmann/java/type/NonNullByDefault.java
    deleted file mode 100644
    index d78b40d..0000000
    --- a/src/main/java/net/florianschoppmann/java/type/NonNullByDefault.java
    +++ /dev/null
    @@ -1,27 +0,0 @@
    -package net.florianschoppmann.java.type;
    -
    -import javax.annotation.Nonnull;
    -import javax.annotation.meta.TypeQualifierDefault;
    -import java.lang.annotation.ElementType;
    -import java.lang.annotation.Retention;
    -import java.lang.annotation.RetentionPolicy;
    -
    -/**
    - * Annotation to define that all contained entities for which a {@code null} annotation is otherwise lacking should be
    - * considered as {@link Nonnull}.
    - *
    - * <p>This annotation can be applied to all element types.
    - */
    -@TypeQualifierDefault({
    -    ElementType.ANNOTATION_TYPE,
    -    ElementType.CONSTRUCTOR,
    -    ElementType.FIELD,
    -    ElementType.LOCAL_VARIABLE,
    -    ElementType.METHOD,
    -    ElementType.PACKAGE,
    -    ElementType.PARAMETER,
    -    ElementType.TYPE
    -})
    -@Nonnull
    -@Retention(RetentionPolicy.RUNTIME)
    -public @interface NonNullByDefault { }
    diff --git a/src/main/java/net/florianschoppmann/java/type/package-info.java b/src/main/java/net/florianschoppmann/java/type/package-info.java
    deleted file mode 100644
    index e00e82c..0000000
    --- a/src/main/java/net/florianschoppmann/java/type/package-info.java
    +++ /dev/null
    @@ -1,11 +0,0 @@
    -/**
    - * Provides an abstract skeletal implementation of class {@link javax.lang.model.util.Types}, together with classes and
    - * interfaces that ensure source compatibility with both Java 7 and 8.
    - *
    - * <p>This package only provides the algorithms, relations, and properties documented in the Java Language Specification
    - * (JLS), but no concrete {@link javax.lang.model.element.Element} and {@link javax.lang.model.type.TypeMirror}
    - * implementations. Instead, this package supports all implementations that follow the contracts set forth in
    - * {@link javax.lang.model.util.Types} and {@link net.florianschoppmann.java.type.AbstractTypes}.
    - */
    -@NonNullByDefault
    -package net.florianschoppmann.java.type;
    diff --git a/src/test/java/net/florianschoppmann/java/reflect/ImmutableListTest.java b/src/test/java/net/florianschoppmann/java/reflect/ImmutableListTest.java
    deleted file mode 100644
    index ead9d88..0000000
    --- a/src/test/java/net/florianschoppmann/java/reflect/ImmutableListTest.java
    +++ /dev/null
    @@ -1,24 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import org.testng.Assert;
    -import org.testng.annotations.Test;
    -
    -import java.util.Arrays;
    -import java.util.Collections;
    -import java.util.List;
    -
    -/**
    - * Unit tests for {@link ImmutableList}.
    - */
    -public class ImmutableListTest {
    -    @Test
    -    public void test() {
    -        List<Integer> list = Arrays.asList(1, 2);
    -        ImmutableList<Integer> immutableList = ImmutableList.copyOf(list);
    -        Assert.assertEquals(immutableList, list);
    -        Assert.assertSame(ImmutableList.copyOf(immutableList), immutableList);
    -
    -        Assert.assertEquals(ImmutableList.emptyList(), Collections.emptyList());
    -        Assert.assertSame(ImmutableList.emptyList(), ImmutableList.emptyList());
    -    }
    -}
    diff --git a/src/test/java/net/florianschoppmann/java/reflect/ReflectionTypesTest.java b/src/test/java/net/florianschoppmann/java/reflect/ReflectionTypesTest.java
    deleted file mode 100644
    index 11605d8..0000000
    --- a/src/test/java/net/florianschoppmann/java/reflect/ReflectionTypesTest.java
    +++ /dev/null
    @@ -1,350 +0,0 @@
    -package net.florianschoppmann.java.reflect;
    -
    -import net.florianschoppmann.java.type.AbstractTypes;
    -import net.florianschoppmann.java.type.AbstractTypesContract;
    -import net.florianschoppmann.java.type.AbstractTypesProvider;
    -import net.florianschoppmann.java.type.IntersectionType;
    -import org.testng.Assert;
    -import org.testng.annotations.Factory;
    -import org.testng.annotations.Test;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.element.ElementKind;
    -import javax.lang.model.element.ExecutableElement;
    -import javax.lang.model.element.PackageElement;
    -import javax.lang.model.element.TypeElement;
    -import javax.lang.model.element.TypeParameterElement;
    -import javax.lang.model.element.VariableElement;
    -import javax.lang.model.type.DeclaredType;
    -import javax.lang.model.type.NoType;
    -import javax.lang.model.type.NullType;
    -import javax.lang.model.type.PrimitiveType;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeMirror;
    -import javax.lang.model.type.TypeVariable;
    -import javax.lang.model.type.WildcardType;
    -import javax.lang.model.util.AbstractElementVisitor7;
    -import java.io.Serializable;
    -import java.lang.annotation.Retention;
    -import java.lang.reflect.InvocationHandler;
    -import java.lang.reflect.Method;
    -import java.lang.reflect.ParameterizedType;
    -import java.lang.reflect.Proxy;
    -import java.lang.reflect.Type;
    -import java.util.Arrays;
    -import java.util.List;
    -import java.util.Map;
    -
    -/**
    - * Unit tests for {@link ReflectionTypes}.
    - */
    -public final class ReflectionTypesTest {
    -    private ReflectionTypes types;
    -
    -    public void setup() {
    -        types = ReflectionTypes.getInstance();
    -    }
    -
    -    @Factory
    -    public Object[] createTests() {
    -        setup();
    -
    -        Provider provider = new Provider();
    -        return new Object[] {
    -            new AbstractTypesContract(provider)
    -        };
    -    }
    -
    -    private final class Provider implements AbstractTypesProvider {
    -        @Override
    -        public void preContract() { }
    -
    -        @Override
    -        public AbstractTypes getTypes(Map<Class<?>, TypeElement> classTypeElementMap) {
    -            for (Map.Entry<Class<?>, TypeElement> entry: classTypeElementMap.entrySet()) {
    -                entry.setValue(types.typeElement(entry.getKey()));
    -            }
    -            return types;
    -        }
    -    }
    -
    -    enum ThrowingInvocationHandler implements InvocationHandler {
    -        INSTANCE;
    -
    -        @Override
    -        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    -            throw new UnsupportedOperationException();
    -        }
    -    }
    -
    -    @Test
    -    public void requireValidElement() {
    -        TypeElement typeElement = (TypeElement) Proxy.newProxyInstance(
    -            getClass().getClassLoader(), new Class<?>[]{ TypeElement.class }, ThrowingInvocationHandler.INSTANCE);
    -        try {
    -            types.requireValidElement(typeElement);
    -            Assert.fail("Expected exception.");
    -        } catch (IllegalArgumentException exception) {
    -            Assert.assertTrue(exception.getMessage().contains(ReflectionTypes.class.getName()));
    -        }
    -    }
    -
    -    @Test
    -    public void requireValidType() {
    -        TypeMirror typeMirror = (TypeMirror) Proxy.newProxyInstance(
    -            getClass().getClassLoader(), new Class<?>[]{ TypeMirror.class }, ThrowingInvocationHandler.INSTANCE);
    -        try {
    -            types.requireValidType(typeMirror);
    -            Assert.fail("Expected exception.");
    -        } catch (IllegalArgumentException exception) {
    -            Assert.assertTrue(exception.getMessage().contains(ReflectionTypes.class.getName()));
    -        }
    -    }
    -
    -    private static class ClassElementVisitor extends AbstractElementVisitor7<Class<?>, Void> {
    -        private static final ClassElementVisitor INSTANCE = new ClassElementVisitor();
    -
    -        @Override
    -        public Class<?> visitPackage(PackageElement e, @Nullable Void ignored) {
    -            return PackageElement.class;
    -        }
    -
    -        @Override
    -        public Class<?> visitType(TypeElement e, @Nullable Void ignored) {
    -            return TypeElement.class;
    -        }
    -
    -        @Override
    -        public Class<?> visitVariable(VariableElement e, @Nullable Void ignored) {
    -            return VariableElement.class;
    -        }
    -
    -        @Override
    -        public Class<?> visitExecutable(ExecutableElement e, @Nullable Void ignored) {
    -            return ExecutableElement.class;
    -        }
    -
    -        @Override
    -        public Class<?> visitTypeParameter(TypeParameterElement e, @Nullable Void ignored) {
    -            return TypeParameterElement.class;
    -        }
    -    }
    -
    -    @Test
    -    public void typeElement() {
    -        TypeElement threadDeclaration = types.typeElement(Thread.class);
    -        TypeElement threadStateDeclaration = types.typeElement(Thread.State.class);
    -        Assert.assertEquals(
    -            threadStateDeclaration.getQualifiedName().toString(),
    -            Thread.State.class.getCanonicalName()
    -        );
    -        Assert.assertEquals(threadStateDeclaration.getKind(), ElementKind.ENUM);
    -        Assert.assertEquals(threadStateDeclaration.getEnclosingElement(), types.typeElement(Thread.class));
    -        Assert.assertEquals(threadStateDeclaration.toString(), Thread.State.class.toString());
    -        Assert.assertEquals(threadStateDeclaration.accept(ClassElementVisitor.INSTANCE, null), TypeElement.class);
    -
    -        Assert.assertEquals(types.typeElement(Retention.class).getKind(), ElementKind.ANNOTATION_TYPE);
    -
    -        try {
    -            threadDeclaration.getEnclosingElement();
    -            Assert.fail("Expected exception.");
    -        } catch (UnsupportedOperationException ignored) { }
    -
    -        try {
    -            threadDeclaration.getModifiers();
    -            Assert.fail("Expected exception.");
    -        } catch (UnsupportedOperationException ignored) { }
    -
    -        try {
    -            threadStateDeclaration.getNestingKind();
    -            Assert.fail("Expected exception.");
    -        } catch (UnsupportedOperationException ignored) { }
    -
    -        try {
    -            types.typeElement(int.class);
    -            Assert.fail("Expected exception");
    -        } catch (IllegalArgumentException ignored) { }
    -
    -        try {
    -            types.typeElement(Object[].class);
    -            Assert.fail("Expected exception");
    -        } catch (IllegalArgumentException ignored) { }
    -    }
    -
    -    @Test
    -    public void typeParameterElement() {
    -        TypeParameterElement typeParameterElement = types.typeElement(List.class).getTypeParameters().get(0);
    -        Assert.assertEquals(typeParameterElement.getKind(), ElementKind.TYPE_PARAMETER);
    -        Assert.assertEquals(
    -            typeParameterElement.accept(ClassElementVisitor.INSTANCE, null),
    -            TypeParameterElement.class
    -        );
    -        Assert.assertEquals(typeParameterElement.toString(), List.class.getTypeParameters()[0].getName());
    -
    -        try {
    -            typeParameterElement.getModifiers();
    -            Assert.fail("Expected exception.");
    -        } catch (UnsupportedOperationException ignored) { }
    -    }
    -
    -    private static class OuterClass<T extends Serializable> {
    -        class InnerClass<U extends Cloneable> { }
    -    }
    -
    -    private static class TypeToken<T> {
    -        private final Type javaType;
    -
    -        TypeToken() {
    -            ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
    -            javaType = genericSuperclass.getActualTypeArguments()[0];
    -        }
    -
    -        Type getJavaType() {
    -            return javaType;
    -        }
    -    }
    -
    -    public <T extends Number> void methodWithTypeParameter(T argument) { }
    -
    -    @Test
    -    public void typeMirror() throws NoSuchMethodException {
    -        // Class<?> -> PrimitiveType
    -        Assert.assertEquals(types.typeMirror(int.class), types.getPrimitiveType(TypeKind.INT));
    -
    -        // Class<?> -> ArrayType
    -        Assert.assertEquals(
    -            types.typeMirror(Serializable[].class),
    -            types.getArrayType(types.getDeclaredType(types.typeElement(Serializable.class)))
    -        );
    -
    -        // Class<?> -> DeclaredType (non-generic)
    -        Assert.assertEquals(types.typeMirror(Integer.class), types.getDeclaredType(types.typeElement(Integer.class)));
    -
    -        // Class<?> -> DeclaredType (raw)
    -        DeclaredType javaTypesTestType = types.getDeclaredType(types.typeElement(ReflectionTypesTest.class));
    -        DeclaredType rawOuterClassType = types.getDeclaredType(javaTypesTestType, types.typeElement(OuterClass.class));
    -        Assert.assertEquals(
    -            types.typeMirror(OuterClass.InnerClass.class),
    -            types.getDeclaredType(rawOuterClassType, types.typeElement(OuterClass.InnerClass.class))
    -        );
    -
    -        // ParameterizedType -> DeclaredType
    -        DeclaredType actualInnerClassType = (DeclaredType) types.typeMirror(
    -            new TypeToken<OuterClass<Integer>.InnerClass<byte[]>>() { }.getJavaType()
    -        );
    -        DeclaredType outerClassType = types.getDeclaredType(
    -            javaTypesTestType,
    -            types.typeElement(OuterClass.class),
    -            types.typeMirror(Integer.class)
    -        );
    -        DeclaredType innerClassType = types.getDeclaredType(
    -            outerClassType,
    -            types.typeElement(OuterClass.InnerClass.class),
    -            types.typeMirror(byte[].class)
    -        );
    -        Assert.assertEquals(actualInnerClassType, innerClassType);
    -
    -        // GenericArrayType -> ArrayType
    -        DeclaredType listOfStringType
    -            = types.getDeclaredType(types.typeElement(List.class), types.typeMirror(String.class));
    -        Assert.assertEquals(
    -            types.typeMirror(new TypeToken<List<String>[]>() { }.getJavaType()),
    -            types.getArrayType(listOfStringType)
    -        );
    -
    -        // WildcardType -> WildcardType
    -        WildcardType actualExtendsStringType = (WildcardType) types.typeMirror(
    -            ((ParameterizedType) new TypeToken<List<? extends String>>() { }.getJavaType()).getActualTypeArguments()[0]
    -        );
    -        WildcardType extendsStringType = types.getWildcardType(types.typeMirror(String.class), null);
    -        Assert.assertEquals(actualExtendsStringType, extendsStringType);
    -
    -        WildcardType actualSuperStringType = (WildcardType) types.typeMirror(
    -            ((ParameterizedType) new TypeToken<List<? super String>>() { }.getJavaType()).getActualTypeArguments()[0]
    -        );
    -        WildcardType superStringType = types.getWildcardType(null, types.typeMirror(String.class));
    -        Assert.assertEquals(actualSuperStringType, superStringType);
    -
    -        WildcardType actualWildcardType = (WildcardType) types.typeMirror(
    -            ((ParameterizedType) new TypeToken<List<?>>() { }.getJavaType()).getActualTypeArguments()[0]
    -        );
    -        WildcardType wildcardType = types.getWildcardType(null, null);
    -        Assert.assertEquals(actualWildcardType, wildcardType);
    -
    -        // TypeVariable -> TypeVariable
    -        TypeVariable actualTypeVariable = (TypeVariable) types.typeMirror(
    -            ((ParameterizedType) List.class.getGenericInterfaces()[0]).getActualTypeArguments()[0]
    -        );
    -        Assert.assertEquals(actualTypeVariable, types.typeElement(List.class).getTypeParameters().get(0).asType());
    -
    -        try {
    -            types.typeMirror(getClass().getMethod("methodWithTypeParameter", Number.class).getTypeParameters()[0]);
    -            Assert.fail("Expected exception.");
    -        } catch (UnsupportedOperationException ignored) { }
    -    }
    -
    -    @Test
    -    public void testToString() {
    -        // PrimitiveType
    -        for (TypeKind primitive: Arrays.asList(TypeKind.DOUBLE, TypeKind.FLOAT, TypeKind.LONG, TypeKind.INT,
    -                TypeKind.SHORT, TypeKind.BYTE, TypeKind.CHAR, TypeKind.BOOLEAN)) {
    -            PrimitiveType primitiveType = types.getPrimitiveType(primitive);
    -            Assert.assertEquals(types.getPrimitiveType(primitive).toString(), types.toString(primitiveType));
    -        }
    -
    -        // DeclaredType
    -        DeclaredType declaredType = (DeclaredType) types.typeMirror(Integer.class);
    -        Assert.assertEquals(declaredType.toString(), types.toString(declaredType));
    -
    -        // IntersectionType
    -        IntersectionType intersectionType
    -            = types.getIntersectionType(types.typeMirror(Serializable.class), types.typeMirror(Cloneable.class));
    -        Assert.assertEquals(intersectionType.toString(), types.toString(intersectionType));
    -
    -        // WildcardType
    -        WildcardType wildcardType = types.getWildcardType(types.typeMirror(Integer.class), null);
    -        Assert.assertEquals(wildcardType.toString(), types.toString(wildcardType));
    -
    -        // NullType
    -        NullType nullType = types.getNullType();
    -        Assert.assertEquals(nullType.toString(), types.toString(nullType));
    -
    -        // NoType
    -        NoType noType = types.getNoType(TypeKind.VOID);
    -        Assert.assertEquals(noType.toString(), types.toString(noType));
    -
    -        // TypeVariable
    -        TypeVariable typeVariable = (TypeVariable) types.typeElement(List.class).getTypeParameters().get(0).asType();
    -        Assert.assertEquals(typeVariable.toString(), types.toString(typeVariable));
    -    }
    -
    -    @Test
    -    public void requireCondition() {
    -        ReflectionTypes.requireCondition(true, "Message: %s", 24);
    -        try {
    -            ReflectionTypes.requireCondition(false, "Message: %s", 24);
    -            Assert.fail("Expected exception.");
    -        } catch (IllegalStateException exception) {
    -            Assert.assertEquals(exception.getMessage(), "Message: 24");
    -        }
    -    }
    -
    -    @Test(expectedExceptions = UnsupportedOperationException.class)
    -    public void testIsAssignable() {
    -        types.isAssignable(types.getPrimitiveType(TypeKind.INT), types.getPrimitiveType(TypeKind.LONG));
    -    }
    -
    -    @Test(expectedExceptions = UnsupportedOperationException.class)
    -    public void directSupertypes() {
    -        types.directSupertypes(types.getPrimitiveType(TypeKind.INT));
    -    }
    -
    -    @Test(expectedExceptions = UnsupportedOperationException.class)
    -    public void asMemberOf() {
    -        TypeElement listDeclaration = types.typeElement(List.class);
    -        types.asMemberOf(
    -            types.getDeclaredType(listDeclaration, types.typeMirror(String.class)),
    -            listDeclaration.getTypeParameters().get(0)
    -        );
    -    }
    -}
    diff --git a/src/test/java/net/florianschoppmann/java/type/AbstractTypesContract.java b/src/test/java/net/florianschoppmann/java/type/AbstractTypesContract.java
    deleted file mode 100644
    index 2f7a9c8..0000000
    --- a/src/test/java/net/florianschoppmann/java/type/AbstractTypesContract.java
    +++ /dev/null
    @@ -1,1316 +0,0 @@
    -package net.florianschoppmann.java.type;
    -
    -import org.testng.Assert;
    -import org.testng.ITest;
    -import org.testng.annotations.BeforeClass;
    -import org.testng.annotations.Test;
    -
    -import javax.lang.model.element.TypeElement;
    -import javax.lang.model.element.TypeParameterElement;
    -import javax.lang.model.type.DeclaredType;
    -import javax.lang.model.type.PrimitiveType;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeMirror;
    -import javax.lang.model.type.TypeVariable;
    -import javax.lang.model.type.WildcardType;
    -import java.io.Serializable;
    -import java.util.ArrayList;
    -import java.util.Arrays;
    -import java.util.Collection;
    -import java.util.Collections;
    -import java.util.LinkedHashMap;
    -import java.util.List;
    -import java.util.Map;
    -import java.util.Objects;
    -import java.util.Set;
    -
    -import static org.testng.Assert.assertEquals;
    -import static org.testng.Assert.assertFalse;
    -import static org.testng.Assert.assertNull;
    -import static org.testng.Assert.assertTrue;
    -
    -/**
    - * Contract test for {@link AbstractTypes}.
    - *
    - * <p>This class should be instantiated and returned by a TestNG factory method (that is, a method annotated with
    - * {@link org.testng.annotations.Factory}).
    - */
    -public final class AbstractTypesContract implements ITest {
    -    private final AbstractTypesProvider provider;
    -    private AbstractTypes types;
    -    private final Map<Class<?>, TypeElement> typeElementMap = new LinkedHashMap<>();
    -
    -    /**
    -     * Constructs a new contract-test instance with the given provider.
    -     *
    -     * @param provider provider of {@link AbstractTypes} instance, must not be null
    -     * @throws NullPointerException if the argument is null
    -     */
    -    public AbstractTypesContract(AbstractTypesProvider provider) {
    -        Objects.requireNonNull(provider);
    -
    -        this.provider = provider;
    -    }
    -
    -    @Override
    -    public String getTestName() {
    -        return provider.getClass().getName();
    -    }
    -
    -    final TypeElement element(Class<?> clazz) {
    -        return Objects.requireNonNull(typeElementMap.get(clazz));
    -    }
    -
    -    private PrimitiveType primitiveType(Class<?> clazz) {
    -        assert clazz.isPrimitive();
    -
    -        if (clazz.equals(double.class)) {
    -            return types.getPrimitiveType(TypeKind.DOUBLE);
    -        } else if (clazz.equals(float.class)) {
    -            return types.getPrimitiveType(TypeKind.FLOAT);
    -        } else if (clazz.equals(long.class)) {
    -            return types.getPrimitiveType(TypeKind.LONG);
    -        } else if (clazz.equals(int.class)) {
    -            return types.getPrimitiveType(TypeKind.INT);
    -        } else if (clazz.equals(short.class)) {
    -            return types.getPrimitiveType(TypeKind.SHORT);
    -        } else if (clazz.equals(byte.class)) {
    -            return types.getPrimitiveType(TypeKind.BYTE);
    -        } else if (clazz.equals(boolean.class)) {
    -            return types.getPrimitiveType(TypeKind.BOOLEAN);
    -        } else if (clazz.equals(char.class)) {
    -            return types.getPrimitiveType(TypeKind.CHAR);
    -        } else {
    -            throw new IllegalArgumentException(String.format("Unexpected primitive type: %s", clazz));
    -        }
    -    }
    -
    -    /**
    -     * Returns the type mirror corresponding to the given {@link Class} object.
    -     *
    -     * <p>If the given class is a generic declaration, the returned type will be a raw type (by calling
    -     * {@link AbstractTypes#getDeclaredType(TypeElement, TypeMirror...)} with an empty list of type arguments).
    -     *
    -     * @param clazz the {@link Class} object
    -     * @return the type mirror
    -     */
    -    private TypeMirror type(Class<?> clazz) {
    -        if (clazz.isPrimitive()) {
    -            return primitiveType(clazz);
    -        } else if (clazz.isArray()) {
    -            return types.getArrayType(type(clazz.getComponentType()));
    -        } else if (typeElementMap.containsKey(clazz)) {
    -            // If clazz represents a generic type declaration, this method returns the raw type.
    -            return types.getDeclaredType(typeElementMap.get(clazz));
    -        }
    -
    -        throw new IllegalArgumentException(String.format("Unexpected type: %s", clazz));
    -    }
    -
    -    private interface SimpleA { }
    -
    -    private interface SimpleB extends SimpleA { }
    -
    -    private interface SimpleC extends SimpleB { }
    -
    -    private interface SimpleParameterized<T> extends Serializable { }
    -
    -    private interface ExtendsParameterized<T extends SimpleC> { }
    -
    -    private interface SubExtendsParameterized<T extends SimpleC> extends ExtendsParameterized<T> { }
    -
    -    private interface RawSubExtendsParameterized<T> extends ExtendsParameterized { }
    -
    -    private interface DiamondA<T, U> { }
    -
    -    private interface DiamondB<T> extends DiamondA<T[], Integer[]> { }
    -
    -    private interface DiamondC<U> extends DiamondA<String[], U[]> { }
    -
    -    private interface DiamondD extends DiamondB<String>, DiamondC<Integer> { }
    -
    -    private interface SubDiamondB<T> extends DiamondB<T[]> { }
    -
    -    private interface SubSubDiamondB extends SubDiamondB<Integer[]> { }
    -
    -    private abstract static class IntegerListSet implements Set<List<Integer>>, Comparable<IntegerListSet> { }
    -
    -    private abstract static class ImmutableIntegerListSet extends IntegerListSet { }
    -
    -    private abstract static class InterdependentRecursiveBoundA<
    -        T extends InterdependentRecursiveBoundA<T, U>,
    -        U extends T
    -    > { }
    -
    -    private abstract static class InterdependentRecursiveBoundB
    -            extends InterdependentRecursiveBoundA<InterdependentRecursiveBoundB, InterdependentRecursiveBoundB>
    -            implements Serializable {
    -        private static final long serialVersionUID = -4490638717891611814L;
    -    }
    -
    -    private static class OuterClass<T extends Number> {
    -        private final class InnerClass<U extends List<?> & Serializable> { }
    -    }
    -
    -    /**
    -     * Performs initialization steps necessary in order to run the contract tests subsequently.
    -     */
    -    @BeforeClass
    -    public void setup() {
    -        provider.preContract();
    -
    -        List<Class<?>> classesNeeded = Arrays.asList(
    -            Object.class, Enum.class, Cloneable.class, Serializable.class, Comparable.class,
    -            Collection.class, List.class, ArrayList.class, Set.class,
    -            Number.class, Integer.class,
    -            String.class,
    -            getClass(),
    -            IntegerListSet.class, ImmutableIntegerListSet.class,
    -            DiamondA.class, DiamondB.class, DiamondC.class, DiamondD.class, SubDiamondB.class, SubSubDiamondB.class,
    -            SimpleA.class, SimpleB.class, SimpleC.class,
    -            ExtendsParameterized.class, SubExtendsParameterized.class,
    -            RawSubExtendsParameterized.class,
    -            SimpleParameterized.class,
    -            InterdependentRecursiveBoundA.class, InterdependentRecursiveBoundB.class,
    -            OuterClass.class, OuterClass.InnerClass.class
    -        );
    -
    -        for (Class<?> clazz: classesNeeded) {
    -            typeElementMap.put(clazz, null);
    -        }
    -
    -        types = provider.getTypes(typeElementMap);
    -    }
    -
    -    /**
    -     * Verifies the {@link TypeElement} instances in {@link #typeElementMap}.
    -     *
    -     * <p>The following is verified:
    -     * <ul><li>
    -     *     {@link TypeElement#asType()} returns "a <i>prototypical</i> type" which is "the element's invocation on the
    -     *     type variables corresponding to its own formal type parameters".
    -     * </li><li>
    -     *     {@link #type(Class)} returns a raw type if the given class object represents a generic type declaration.
    -     * </li><li>
    -     *     Passing the raw type returned by {@link #type(Class)} to
    -     *     {@link AbstractTypes#toString(TypeMirror)} yields a string equal to the class's name.
    -     * </li></ul>
    -     */
    -    @Test
    -    public void testSetup() {
    -        for (Map.Entry<Class<?>, TypeElement> entry: typeElementMap.entrySet()) {
    -            Class<?> clazz = entry.getKey();
    -            TypeElement typeElement = entry.getValue();
    -
    -            assertTrue(typeElement.getKind().isClass() || typeElement.getKind().isInterface());
    -            DeclaredType prototypicalType = (DeclaredType) typeElement.asType();
    -            assertEquals(typeElement.getTypeParameters().size(), prototypicalType.getTypeArguments().size());
    -
    -            for (TypeMirror typeArgument: prototypicalType.getTypeArguments()) {
    -                assertTrue(typeArgument.getKind() == TypeKind.TYPEVAR && typeArgument instanceof TypeVariable);
    -            }
    -
    -            DeclaredType rawType = (DeclaredType) type(clazz);
    -            assertTrue(rawType.getTypeArguments().isEmpty());
    -
    -            assertEquals(clazz.getCanonicalName(), types.toString(rawType));
    -        }
    -    }
    -
    -    /**
    -     * Verifies that {@link AbstractTypes#requireValidElement(javax.lang.model.element.Element)} throws a
    -     * {@link NullPointerException} if passed null.
    -     */
    -    @Test(expectedExceptions = NullPointerException.class)
    -    public void requireValidElement() {
    -        types.requireValidElement(null);
    -    }
    -
    -    /**
    -     * Verifies that {@link AbstractTypes#requireValidType(TypeMirror)} does not throw an
    -     * exception if passed null.
    -     */
    -    @Test
    -    public void requireValidType() {
    -        types.requireValidType(null);
    -    }
    -
    -    /**
    -     * Verifies that {@link AbstractTypes#requireValidTypes(TypeMirror[])} throws exceptions if
    -     * passed null or an array with null element.
    -     */
    -    @Test
    -    public void requireValidTypes() {
    -        try {
    -            types.requireValidTypes(null);
    -            Assert.fail("Expected exception.");
    -        } catch (NullPointerException ignored) { }
    -
    -        try {
    -            types.requireValidTypes(new TypeMirror[] { null });
    -            Assert.fail("Expected exception.");
    -        } catch (NullPointerException ignored) { }
    -    }
    -
    -    private static void typeMirrorAssertExpectedName(TypeMirror typeMirror, Class<?> clazz) {
    -        assertEquals(typeMirror.getKind(), TypeKind.DECLARED);
    -        TypeElement element = (TypeElement) ((DeclaredType) typeMirror).asElement();
    -        assertEquals(element.getQualifiedName().toString(), clazz.getName());
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#typeMirror(java.lang.reflect.Type)}.
    -     */
    -    @Test
    -    public void typeMirror() {
    -        typeMirrorAssertExpectedName(types.typeMirror(Object.class), Object.class);
    -        typeMirrorAssertExpectedName(types.typeMirror(Serializable.class), Serializable.class);
    -        typeMirrorAssertExpectedName(types.typeMirror(Cloneable.class), Cloneable.class);
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#substitute(TypeMirror, Map)}.
    -     */
    -    @Test
    -    public void substitute() {
    -        TypeElement diamondADeclaration = element(DiamondA.class);
    -        Map<TypeParameterElement, TypeMirror> substitutions = new LinkedHashMap<>();
    -        substitutions.put(diamondADeclaration.getTypeParameters().get(0), type(String.class));
    -        DeclaredType expectedType = types.getDeclaredType(
    -            (DeclaredType) type(getClass()),
    -            diamondADeclaration,
    -            type(String.class), diamondADeclaration.getTypeParameters().get(1).asType()
    -        );
    -        assertEquals(types.substitute(diamondADeclaration.asType(), substitutions), expectedType);
    -
    -        WildcardType extendsStringWildcardArgument = types.getWildcardType(type(String.class), null);
    -        assertEquals(types.substitute(extendsStringWildcardArgument, substitutions), extendsStringWildcardArgument);
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#resolveActualTypeArguments(TypeElement, TypeMirror)} when the second argument is
    -     * a generic type, a non-generic type, or a primitive type.
    -     */
    -    @Test
    -    public void resolveActualTypeArguments() {
    -        // Verify edge case: resolving type arguments on the same type
    -        assertEquals(types.resolveActualTypeArguments(element(List.class), type(List.class)), Collections.emptyList());
    -
    -        // listOfIntegersType now represents List<Integer>
    -        DeclaredType listOfIntegersType = types.getDeclaredType(element(List.class), type(Integer.class));
    -
    -        // Simple test without inheritance: List and List<Integer>
    -        assertEquals(
    -            types.resolveActualTypeArguments(element(List.class), listOfIntegersType),
    -            Collections.singletonList(type(Integer.class))
    -        );
    -
    -        // Now with inheritance.
    -        assertEquals(
    -            types.resolveActualTypeArguments(element(Set.class), type(IntegerListSet.class)),
    -            Collections.singletonList(listOfIntegersType)
    -        );
    -        assertEquals(
    -            types.resolveActualTypeArguments(element(Set.class), type(ImmutableIntegerListSet.class)),
    -            Collections.singletonList(listOfIntegersType)
    -        );
    -
    -        // Verify that non-generic type does not have actual type arguments
    -        assertEquals(
    -            types.resolveActualTypeArguments(element(IntegerListSet.class), type(ImmutableIntegerListSet.class)),
    -            Collections.emptyList()
    -        );
    -
    -        // In case there is no subtype relationship, null is returned
    -        assertNull(
    -            types.resolveActualTypeArguments(element(ImmutableIntegerListSet.class), type(IntegerListSet.class))
    -        );
    -        assertNull(types.resolveActualTypeArguments(element(List.class), type(Collection.class)));
    -        assertNull(types.resolveActualTypeArguments(element(List.class), type(int.class)));
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#resolveActualTypeArguments(TypeElement, TypeMirror)} if the second argument is a
    -     * raw type.
    -     */
    -    @Test
    -    public void resolveActualTypeArgumentsRaw() {
    -        // Resolving unbound type parameters (because the subclass inherits from a raw type) returns an empty list
    -        assertEquals(
    -            types.resolveActualTypeArguments(
    -                element(ExtendsParameterized.class),
    -                type(RawSubExtendsParameterized.class)
    -            ),
    -            Collections.emptyList()
    -        );
    -
    -        // Resolving the type argument of a raw type is the same as resolving the type arguments of the corresponding
    -        // prototypical type of the sub-type declaration.
    -        assertEquals(
    -            types.resolveActualTypeArguments(
    -                element(ExtendsParameterized.class),
    -                type(SubExtendsParameterized.class)
    -            ),
    -            types.resolveActualTypeArguments(
    -                element(ExtendsParameterized.class),
    -                element(SubExtendsParameterized.class).asType()
    -            )
    -        );
    -        assertEquals(
    -            ((DeclaredType) element(SubExtendsParameterized.class).asType()).getTypeArguments().get(0),
    -            element(SubExtendsParameterized.class).getTypeParameters().get(0).asType()
    -        );
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#resolveActualTypeArguments(TypeElement, TypeMirror)} if the second argument
    -     * contains an actual type argument that is an array type.
    -     */
    -    @Test
    -    public void resolveActualTypeArgumentsArrays() {
    -        // declaredType now represents DiamondB<String[]>
    -        DeclaredType declaredType = types.getDeclaredType(element(DiamondB.class), types.getArrayType(type(String.class)));
    -        assertEquals(
    -            types.resolveActualTypeArguments(element(DiamondA.class), declaredType),
    -            Arrays.asList(type(String[][].class), type(Integer[].class))
    -        );
    -
    -        assertEquals(
    -            types.resolveActualTypeArguments(element(DiamondA.class), type(DiamondD.class)),
    -            Arrays.asList(type(String[].class), type(Integer[].class))
    -        );
    -
    -        // Test raw type SubDiamondB. The super types of a raw type are the supertypes of the prototypical type (as defined by
    -        // TypeElement#asType())
    -        TypeMirror expectedTypeArgument
    -            = types.getArrayType(types.getArrayType(element(SubDiamondB.class).getTypeParameters().get(0).asType()));
    -        assertEquals(
    -            types.resolveActualTypeArguments(element(DiamondA.class), type(SubDiamondB.class)),
    -            Arrays.asList(expectedTypeArgument, type(Integer[].class))
    -        );
    -
    -        assertEquals(
    -            types.resolveActualTypeArguments(element(DiamondA.class), type(SubSubDiamondB.class)),
    -            Arrays.asList(type(Integer[][][].class), type(Integer[].class))
    -        );
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} if one of the types is a primitive type.
    -     */
    -    @Test
    -    public void testIsSubtypePrimitive() {
    -        // Primitives
    -        assertTrue(types.isSubtype(type(double.class), type(double.class)));
    -        assertTrue(types.isSubtype(type(float.class), type(double.class)));
    -        assertTrue(types.isSubtype(type(long.class), type(double.class)));
    -        assertTrue(types.isSubtype(type(int.class),  type(double.class)));
    -        assertTrue(types.isSubtype(type(short.class),type(double.class)));
    -        assertTrue(types.isSubtype(type(byte.class), type(double.class)));
    -        assertTrue(types.isSubtype(type(char.class), type(double.class)));
    -
    -        assertTrue(types.isSubtype(type(int.class), type(int.class)));
    -        assertTrue(types.isSubtype(type(short.class), type(int.class)));
    -        assertTrue(types.isSubtype(type(byte.class), type(int.class)));
    -        assertTrue(types.isSubtype(type(char.class), type(int.class)));
    -
    -        assertTrue(types.isSubtype(type(short.class), type(short.class)));
    -        assertTrue(types.isSubtype(type(byte.class), type(short.class)));
    -        assertFalse(types.isSubtype(type(char.class), type(short.class)));
    -
    -        assertFalse(types.isSubtype(type(Object.class), type(int.class)));
    -        assertFalse(types.isSubtype(type(int.class), type(Object.class)));
    -        assertFalse(types.isSubtype(type(Integer.class), type(int.class)));
    -        assertFalse(types.isSubtype(type(int.class), type(Integer.class)));
    -        assertFalse(types.isSubtype(type(int[].class), type(int.class)));
    -        assertFalse(types.isSubtype(type(int.class), type(int[].class)));
    -
    -        // JLS-mandated classes
    -        assertTrue(types.isSubtype(type(Object.class), type(Object.class)));
    -        assertTrue(types.isSubtype(type(Serializable.class), type(Object.class)));
    -        assertFalse(types.isSubtype(type(Object.class), type(Serializable.class)));
    -
    -        // Elementary subtyping
    -        assertTrue(types.isSubtype(type(Number.class), type(Object.class)));
    -        assertFalse(types.isSubtype(type(Object.class), type(Number.class)));
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} if one of the types is the null type.
    -     */
    -    @Test
    -    public void testIsSubtypeNull() {
    -        assertFalse(types.isSubtype(types.getNullType(), type(int.class)));
    -        assertFalse(types.isSubtype(type(int.class), types.getNullType()));
    -
    -        assertFalse(types.isSubtype(type(Object.class), types.getNullType()));
    -        assertTrue(types.isSubtype(types.getNullType(), type(Object.class)));
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} if one of the types is an array type.
    -     */
    -    @Test
    -    public void testIsSubtypeArray() {
    -        // arrayType represents List<String>[][]
    -        TypeMirror arrayType
    -            = types.getArrayType(types.getArrayType(types.getDeclaredType(element(List.class), type(String.class))));
    -
    -        assertTrue(types.isSubtype(arrayType, arrayType));
    -        assertTrue(types.isSubtype(arrayType, type(Serializable.class)));
    -        assertTrue(types.isSubtype(arrayType, type(Cloneable.class)));
    -        assertTrue(types.isSubtype(arrayType, type(Object.class)));
    -        assertTrue(types.isSubtype(arrayType, type(Object[].class)));
    -        assertTrue(types.isSubtype(arrayType, type(Object[][].class)));
    -
    -        assertFalse(types.isSubtype(arrayType, type(Number.class)));
    -        assertFalse(types.isSubtype(type(Number.class), arrayType));
    -
    -        assertTrue(types.isSubtype(type(int[][].class), type(int[][].class)));
    -        assertTrue(types.isSubtype(type(char[][].class), type(int[][].class)));
    -        assertFalse(types.isSubtype(type(int[][].class), type(char[][].class)));
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} if one of the types is an intersection type.
    -     */
    -    @Test
    -    public void testIsSubtypeIntersection() {
    -        TypeMirror serializableAndCloneableType
    -            = types.getIntersectionType(type(Serializable.class), type(Cloneable.class));
    -
    -        assertTrue(types.isSubtype(serializableAndCloneableType, type(Serializable.class)));
    -        assertTrue(types.isSubtype(serializableAndCloneableType, type(Cloneable.class)));
    -        assertTrue(types.isSubtype(serializableAndCloneableType, serializableAndCloneableType));
    -        assertFalse(types.isSubtype(type(Cloneable.class), serializableAndCloneableType));
    -
    -        TypeMirror serializableCloneableListType
    -            = types.getIntersectionType(type(Serializable.class), type(Cloneable.class), type(List.class));
    -
    -        // Mathematically, the following should be true, but a subtype relationship is not mandated by the JLS.
    -        // Therefore, currently we use assertFalse.
    -        assertFalse(types.isSubtype(serializableCloneableListType, serializableAndCloneableType));
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} if one of the types is a raw type.
    -     */
    -    @Test
    -    public void testIsSubtypeRaw() {
    -        // Test that raw type DiamondB is subtype of raw type DiamondA
    -        assertTrue(types.isSubtype(type(DiamondB.class), type(DiamondA.class)));
    -
    -        // aWildcardType: DiamondA<? extends Object[], Integer[]>
    -        DeclaredType aWildcardType = types.getDeclaredType(
    -            element(DiamondA.class),
    -            types.getWildcardType(type(Object[].class), null),
    -            type(Integer[].class)
    -        );
    -        // According to JLS §4.10.2, DiamondA<? extends Object[], Integer[]>  :>  DiamondA<T[], Integer[]>  :>  DiamondB
    -        assertTrue(types.isSubtype(type(DiamondB.class), aWildcardType));
    -
    -
    -        // aType: DiamondA<Object[], Integer[]>
    -        DeclaredType aType = types.getDeclaredType(element(DiamondA.class), type(Object[].class), type(Integer[].class));
    -        // Since T[] (i.e., the first type argument to DiamondB's direct superclass) is not contained by Object[] (in
    -        // the sense of JLS §4.5.1), the raw type DiamondB is not a subtype of DiamondA<Object[], Integer[]>
    -        assertFalse(types.isSubtype(type(DiamondB.class), aType));
    -
    -        // List is not a subtype of List<?>. While
    -        // List list = (List<?>) null
    -        // would compile without error (even without warning), this is not because of a subtype relationship, but only
    -        // allowed because of JLS §5.1.9 (unchecked conversion).
    -        DeclaredType rawListType = (DeclaredType) type(List.class);
    -        DeclaredType anyListType = types.getDeclaredType(element(List.class), types.getWildcardType(null, null));
    -        assertFalse(types.isSubtype(rawListType, anyListType));
    -        assertTrue(types.isSubtype(anyListType, rawListType));
    -
    -        assertTrue(types.isSubtype(type(RawSubExtendsParameterized.class), type(ExtendsParameterized.class)));
    -        // rawParameterizedType: RawSubExtendsParameterized<Integer>
    -        DeclaredType rawParameterizedType
    -            = types.getDeclaredType(element(RawSubExtendsParameterized.class), type(Integer.class));
    -        assertTrue(types.isSubtype(rawParameterizedType, type(ExtendsParameterized.class)));
    -        // See explanation for List test case above.
    -        assertFalse(
    -            types.isSubtype(
    -                rawParameterizedType,
    -                types.getDeclaredType(element(ExtendsParameterized.class), types.getWildcardType(null, null))
    -            )
    -        );
    -    }
    -
    -    @Test
    -    public void testIsSubtypeArrayTypeParameters() {
    -        // aType: DiamondA<? extends Serializable, ? extends Number[]>
    -        DeclaredType aType = types.getDeclaredType(
    -            element(DiamondA.class),
    -            types.getWildcardType(type(Serializable.class), null),
    -            types.getWildcardType(type(Number[].class), null)
    -        );
    -        // bType: DiamondB<?>
    -        DeclaredType bType = types.getDeclaredType(element(DiamondB.class), types.getWildcardType(null, null));
    -        assertTrue(types.isSubtype(bType, aType));
    -
    -        // a2Type: DiamondA<? extends Object[], ? extends Number[]>
    -        DeclaredType a2Type = types.getDeclaredType(
    -            element(DiamondA.class),
    -            types.getWildcardType(type(Object[].class), null),
    -            types.getWildcardType(type(Number[].class), null)
    -        );
    -        // b2Type: DiamondB<Integer>
    -        DeclaredType b2Type = types.getDeclaredType(element(DiamondB.class), type(Integer.class));
    -        assertTrue(types.isSubtype(b2Type, a2Type));
    -
    -        // a3Type: DiamondA<? extends Serializable, ? extends Number[]>
    -        DeclaredType a3Type = types.getDeclaredType(
    -            element(DiamondA.class),
    -            types.getWildcardType(type(Serializable.class), null),
    -            types.getWildcardType(type(Number[].class), null)
    -        );
    -        assertTrue(types.isSubtype(type(DiamondD.class), a3Type));
    -    }
    -
    -    @Test
    -    public void testIsSubtypeSimpleTypeParameters() {
    -        // collectionOfNumbersType: Collection<Number>
    -        DeclaredType collectionOfNumbersType = types.getDeclaredType(element(Collection.class), type(Number.class));
    -
    -        // JLS §4.10.2, raw type is supertype
    -        assertTrue(types.isSubtype(collectionOfNumbersType, type(Collection.class)));
    -
    -        // A generic type is not a supertype of the raw type. Assignment is allowed, though, through an unchecked
    -        // conversion (JLS §5.1.9), which "causes a compile-time unchecked warning".
    -        assertFalse(types.isSubtype(type(Collection.class), collectionOfNumbersType));
    -
    -        // collectionOfIntegersType: Collection<Integer>
    -        DeclaredType collectionOfIntegersType = types.getDeclaredType(element(Collection.class), type(Integer.class));
    -
    -        // Collection<Integer> is not a subtype of Collection<Number>
    -        assertFalse(types.isSubtype(collectionOfIntegersType, collectionOfNumbersType));
    -
    -        // wildcardCollectionType now represents Collection<? extends Number>
    -        DeclaredType wildcardCollectionType = types.getDeclaredType(
    -            element(Collection.class),
    -            types.getWildcardType(type(Number.class), null)
    -        );
    -        assertTrue(types.isSubtype(collectionOfIntegersType, wildcardCollectionType));
    -    }
    -
    -    @Test
    -    public void testIsSubtypeWildcards() {
    -        // setType1: Set<List<Integer>>
    -        DeclaredType setType1 = types.getDeclaredType(
    -            element(Set.class),
    -            types.getDeclaredType(element(List.class), type(Integer.class))
    -        );
    -        assertTrue(types.isSubtype(type(IntegerListSet.class), setType1));
    -
    -        // setType2: Set<? extends List<? extends Integer>>
    -        DeclaredType setType2 = types.getDeclaredType(
    -            element(Set.class),
    -            types.getWildcardType(
    -                types.getDeclaredType(element(List.class), types.getWildcardType(type(Integer.class), null)),
    -                null
    -            )
    -        );
    -        assertTrue(types.isSubtype(type(IntegerListSet.class), setType2));
    -
    -        // setType3: Set<? super List<? super Integer>>
    -        DeclaredType setType3 = types.getDeclaredType(
    -            element(Set.class),
    -            types.getWildcardType(
    -                null,
    -                types.getDeclaredType(element(List.class), types.getWildcardType(null, type(Integer.class)))
    -            )
    -        );
    -        // setType4: Set<Collection<? super Integer>>
    -        DeclaredType setType4 = types.getDeclaredType(
    -            element(Set.class),
    -            types.getDeclaredType(element(Collection.class), types.getWildcardType(null, type(Integer.class)))
    -        );
    -        assertTrue(types.isSubtype(setType4, setType3));
    -
    -        // setType5: Set<Collection<? super Number>>
    -        DeclaredType setType5 = types.getDeclaredType(
    -            element(Set.class),
    -            types.getDeclaredType(element(Collection.class), types.getWildcardType(null, type(Number.class)))
    -        );
    -        // Note that Set<Collection<? super Number>> is not a subtype of Set<? super List<? super Integer>>. Otherwise,
    -        // List<? super Number> would be a subtype of Collection<? super Integer>, implying that "? super Integer"
    -        // contains (§4.5.1) "? super Number", implying that Number is a subtype of Integer. A contradiction.
    -        assertFalse(types.isSubtype(setType5, setType3));
    -
    -        // Also, IntegerListSet, which implements Set<List<Integer>>, is not a subtype of
    -        // Set<? super List<? super Integer>>. Otherwise, List<Integer> would be contained by
    -        // "? super List<? super Integer>", implying that List<? super Integer> is a subtype of List<Integer>. A
    -        // contradiction.
    -        assertFalse(types.isSubtype(type(IntegerListSet.class), setType3));
    -
    -        // simpleParameterizedType1: ExtendsParameterized<? extends SimpleA>
    -        DeclaredType superType = types.getDeclaredType(
    -            element(ExtendsParameterized.class),
    -            types.getWildcardType(type(SimpleA.class), null)
    -        );
    -        // simpleParameterizedType2: ExtendsParameterized<? extends SimpleB>
    -        DeclaredType subType = types.getDeclaredType(
    -            element(ExtendsParameterized.class),
    -            types.getWildcardType(type(SimpleB.class), null)
    -        );
    -        assertTrue(types.isSubtype(subType, superType));
    -        // ExtendsParameterized<? extends SimpleA> is a subtype of
    -        // ExtendsParameterized<? extends SimpleB>, even
    -        // though SimpleB does not "contain" (JLS §4.5.1) SimpleA. Reason: The "contains"
    -        // relationship is irrelevant for the test, because the supertypes of
    -        // ExtendsParameterized<? extends SimpleB> are exactly those that are the supertypes of its capture
    -        // conversion (JLS §4.10.2).
    -        assertTrue(types.isSubtype(superType, subType));
    -
    -        // extendsParameterized1: ExtendsParameterized<? super SimpleC>
    -        DeclaredType extendsParameterized1 = types.getDeclaredType(
    -            element(ExtendsParameterized.class),
    -            types.getWildcardType(null, type(SimpleC.class))
    -        );
    -        assertTrue(types.isSubtype(extendsParameterized1, superType));
    -
    -        // extendsParameterized2: ExtendsParameterized<SimpleC>
    -        DeclaredType extendsParameterized2
    -            = types.getDeclaredType(element(ExtendsParameterized.class), type(SimpleC.class));
    -        assertTrue(types.isSubtype(extendsParameterized2, superType));
    -
    -        // simpleParameterizedType1: SimpleParameterized<? extends SimpleA>
    -        DeclaredType simpleParameterizedType1 = types.getDeclaredType(
    -            element(SimpleParameterized.class),
    -            types.getWildcardType(type(SimpleA.class), null)
    -        );
    -        // simpleParameterizedType2 now represents SimpleParameterized<? extends SimpleB>
    -        DeclaredType simpleParameterizedType2 = types.getDeclaredType(
    -            element(SimpleParameterized.class),
    -            types.getWildcardType(type(SimpleB.class), null)
    -        );
    -        assertTrue(types.isSubtype(simpleParameterizedType2, simpleParameterizedType1));
    -        // Note that this is unlike above, because the type parameter of SimpleParameterized does not have an explicit
    -        // lower bound.
    -        assertFalse(types.isSubtype(simpleParameterizedType1, simpleParameterizedType2));
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#capture(TypeMirror)}.
    -     */
    -    @Test
    -    public void capture() {
    -        assertEquals(types.capture(type(Integer.class)), type(Integer.class));
    -
    -        DeclaredType outerClassType = types.getDeclaredType(element(OuterClass.class), type(Integer.class));
    -        DeclaredType arrayListOfIntegersType = types.getDeclaredType(element(ArrayList.class), type(Integer.class));
    -        // innerClassType: OuterClass<Integer>.InnerClass<? extends ArrayList<Integer>>
    -        DeclaredType innerClassType = types.getDeclaredType(
    -            outerClassType,
    -            element(OuterClass.InnerClass.class),
    -            types.getWildcardType(arrayListOfIntegersType, null)
    -        );
    -
    -        DeclaredType capturedType = (DeclaredType) types.capture(innerClassType);
    -        TypeVariable actualTypeArgument = (TypeVariable) capturedType.getTypeArguments().get(0);
    -
    -        // intersectionType = glb(ArrayList<Integer>, List<?>, Serializable)
    -        IntersectionType intersectionType = (IntersectionType) actualTypeArgument.getUpperBound();
    -        assertTrue(isSubtypeOfOneOf(arrayListOfIntegersType, intersectionType.getBounds()));
    -
    -        PrimitiveType intType = types.getPrimitiveType(TypeKind.INT);
    -        assertTrue(types.isSameType(types.capture(intType), intType));
    -    }
    -
    -    @Test
    -    public void captureSingleRecursiveBound() {
    -        // enumType: Enum<?>
    -        DeclaredType enumType = types.getDeclaredType(element(Enum.class), types.getWildcardType(null, null));
    -
    -        // capture: java.lang.Enum<capture<?>>
    -        DeclaredType capture = (DeclaredType) types.capture(enumType);
    -
    -        assertEquals(capture.getTypeArguments().size(), 1);
    -        TypeVariable newTypeVariable = (TypeVariable) capture.getTypeArguments().get(0);
    -        DeclaredType upperBound = (DeclaredType) newTypeVariable.getUpperBound();
    -        assertEquals(upperBound.getKind(), TypeKind.DECLARED);
    -
    -        // Since Enum has a recursive type bound, upperBound must represent Enum<capture<?>> as well!
    -        assertEquals(capture, upperBound);
    -
    -        // The following should be implied, but explicit test does not hurt
    -        TypeElement upperBoundAsElement = (TypeElement) upperBound.asElement();
    -        assertTrue(upperBoundAsElement.getQualifiedName().contentEquals(Enum.class.getName()));
    -    }
    -
    -    @Test
    -    public void captureInterdependentRecursiveBound() {
    -        // aType1: InterdependentRecursiveBoundA<?, ?>
    -        DeclaredType aType1 = types.getDeclaredType(
    -            element(InterdependentRecursiveBoundA.class),
    -            types.getWildcardType(null, null),
    -            types.getWildcardType(null, null)
    -        );
    -        DeclaredType aCapture1 = (DeclaredType) types.capture(aType1);
    -        TypeVariable captureForT1 = (TypeVariable) aCapture1.getTypeArguments().get(0);
    -        TypeVariable captureForU1 = (TypeVariable) aCapture1.getTypeArguments().get(1);
    -
    -        DeclaredType captureForTUpperBound1 = (DeclaredType) captureForT1.getUpperBound();
    -        assertEquals(captureForTUpperBound1.getTypeArguments().get(0), captureForT1);
    -        assertEquals(captureForTUpperBound1.getTypeArguments().get(1), captureForU1);
    -        assertEquals(captureForU1.getUpperBound(), captureForT1);
    -
    -
    -        // aType2: InterdependentRecursiveBoundA<? super InterdependentRecursiveBoundB, ? extends Serializable>
    -        DeclaredType aType2 = types.getDeclaredType(
    -            element(InterdependentRecursiveBoundA.class),
    -            types.getWildcardType(null, type(InterdependentRecursiveBoundB.class)),
    -            types.getWildcardType(type(Serializable.class), null)
    -        );
    -        DeclaredType aCapture2 = (DeclaredType) types.capture(aType2);
    -        assertEquals(aCapture2.getTypeArguments().size(), 2);
    -
    -        TypeVariable captureForT2 = (TypeVariable) aCapture2.getTypeArguments().get(0);
    -        TypeVariable captureForU2 = (TypeVariable) aCapture2.getTypeArguments().get(1);
    -
    -        DeclaredType captureForTUpperBound2 = (DeclaredType) captureForT2.getUpperBound();
    -        assertEquals(captureForTUpperBound2.getTypeArguments().get(0), captureForT2);
    -        assertEquals(captureForTUpperBound2.getTypeArguments().get(1), captureForU2);
    -        DeclaredType captureForTLowerBound2 = (DeclaredType) captureForT2.getLowerBound();
    -        assertEquals(captureForTLowerBound2, type(InterdependentRecursiveBoundB.class));
    -
    -        IntersectionType intersectionType = (IntersectionType) captureForU2.getUpperBound();
    -        assertTrue(intersectionType.getBounds().contains(captureForT2));
    -        assertTrue(intersectionType.getBounds().contains(type(Serializable.class)));
    -
    -        // aType3: InterdependentRecursiveBoundA<InterdependentRecursiveBoundB, ?>
    -        DeclaredType aType3 = types.getDeclaredType(
    -            element(InterdependentRecursiveBoundA.class),
    -            type(InterdependentRecursiveBoundB.class),
    -            types.getWildcardType(null, null)
    -        );
    -        DeclaredType aCapture3 = (DeclaredType) types.capture(aType3);
    -        assertEquals(aCapture3.getTypeArguments().get(0), type(InterdependentRecursiveBoundB.class));
    -        TypeVariable captureForU3 = (TypeVariable) aCapture3.getTypeArguments().get(1);
    -        assertEquals(captureForU3.getUpperBound(), type(InterdependentRecursiveBoundB.class));
    -    }
    -
    -    /**
    -     * Verifies that {@link AbstractTypes#contains(TypeMirror, TypeMirror)} throws expected exceptions.
    -     */
    -    @Test
    -    public void testContainsInvalidArguments() {
    -        try {
    -            types.contains(type(Object.class), null);
    -            Assert.fail("Exception expected.");
    -        } catch (NullPointerException ignore) { }
    -
    -        try {
    -            types.contains(null, type(Object.class));
    -            Assert.fail("Exception expected.");
    -        } catch (NullPointerException ignore) { }
    -
    -        try {
    -            types.contains(null, null);
    -            Assert.fail("Exception expected.");
    -        } catch (NullPointerException ignore) { }
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#contains(TypeMirror, TypeMirror)}.
    -     */
    -    @Test
    -    public void testContains() {
    -        WildcardType extendsWildcard = types.getWildcardType(null, null);
    -        WildcardType extendsObjectWildcard = types.getWildcardType(type(Object.class), null);
    -        WildcardType extendsIntegerWildcard = types.getWildcardType(type(Integer.class), null);
    -        WildcardType extendsNumberWildcard = types.getWildcardType(type(Number.class), null);
    -        WildcardType superIntegerWildcard = types.getWildcardType(null, type(Integer.class));
    -        WildcardType superNumberWildcard = types.getWildcardType(null, type(Number.class));
    -
    -        // ? extends T <= ? extends S if T <: S
    -        assertTrue(types.contains(extendsNumberWildcard, extendsIntegerWildcard));
    -        assertFalse(types.contains(extendsIntegerWildcard, extendsNumberWildcard));
    -
    -        // ? extends T <= ?
    -        assertTrue(types.contains(extendsWildcard, extendsIntegerWildcard));
    -        assertFalse(types.contains(extendsIntegerWildcard, extendsWildcard));
    -
    -        // ? super T <= ? super S if S <: T
    -        assertTrue(types.contains(superIntegerWildcard, superNumberWildcard));
    -        assertFalse(types.contains(superNumberWildcard, superIntegerWildcard));
    -
    -        // ? super T <= ?
    -        assertTrue(types.contains(extendsWildcard, superIntegerWildcard));
    -        assertFalse(types.contains(superIntegerWildcard, extendsWildcard));
    -
    -        // ? super T <= ? extends Object
    -        assertTrue(types.contains(extendsObjectWildcard, superIntegerWildcard));
    -        assertFalse(types.contains(superIntegerWildcard, extendsObjectWildcard));
    -        assertFalse(types.contains(extendsNumberWildcard, superIntegerWildcard));
    -
    -        // T <= T
    -        assertTrue(types.contains(type(Integer.class), type(Integer.class)));
    -        assertFalse(types.contains(type(Number.class), type(Integer.class)));
    -        assertFalse(types.contains(type(Integer.class), type(Number.class)));
    -
    -        // T <= ? extends T
    -        assertTrue(types.contains(extendsIntegerWildcard, type(Integer.class)));
    -        assertFalse(types.contains(type(Integer.class), extendsIntegerWildcard));
    -
    -        // T <= ? super T
    -        assertTrue(types.contains(superIntegerWildcard, type(Integer.class)));
    -        assertFalse(types.contains(type(Integer.class), superIntegerWildcard));
    -
    -        // Verify transitive closure
    -
    -        // T <= ?
    -        assertTrue(types.contains(extendsWildcard, type(Integer.class)));
    -        assertFalse(types.contains(type(Integer.class), extendsWildcard));
    -
    -        // T <= ? extends Object
    -        assertTrue(types.contains(extendsObjectWildcard, type(Integer.class)));
    -        assertFalse(types.contains(type(Integer.class), extendsObjectWildcard));
    -
    -        // ? <= ? super T
    -        assertFalse(types.contains(superNumberWildcard, extendsWildcard));
    -
    -        // ? [extends Object] <= ? [extends Object]
    -        assertTrue(types.contains(extendsObjectWildcard, extendsObjectWildcard));
    -        assertTrue(types.contains(extendsObjectWildcard, extendsWildcard));
    -        assertTrue(types.contains(extendsWildcard, extendsWildcard));
    -        assertTrue(types.contains(extendsWildcard, extendsObjectWildcard));
    -
    -        assertFalse(types.contains(extendsNumberWildcard, extendsObjectWildcard));
    -        assertFalse(types.contains(extendsNumberWildcard, extendsWildcard));
    -    }
    -
    -    /**
    -     * Verifies that {@link AbstractTypes#erasure(TypeMirror)} throws expected exceptions.
    -     */
    -    @Test
    -    public void testErasureInvalidArguments() {
    -        try {
    -            types.erasure(null);
    -            Assert.fail("Exception expected.");
    -        } catch (NullPointerException ignore) { }
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#erasure(TypeMirror)}.
    -     */
    -    @Test
    -    public void testErasure() {
    -        // Parameterized type
    -        DeclaredType listOfStringsType = types.getDeclaredType(element(List.class), type(String.class));
    -        assertTrue(types.isSameType(types.erasure(listOfStringsType), type(List.class)));
    -
    -        // Nested type
    -        DeclaredType outerClassType = types.getDeclaredType(element(OuterClass.class), type(Integer.class));
    -        DeclaredType arrayListOfIntegersType = types.getDeclaredType(element(ArrayList.class), type(Integer.class));
    -        DeclaredType innerClassType
    -            = types.getDeclaredType(outerClassType, element(OuterClass.InnerClass.class), arrayListOfIntegersType);
    -
    -        DeclaredType expectedErasedNestedType
    -            = types.getDeclaredType((DeclaredType) type(OuterClass.class), element(OuterClass.InnerClass.class));
    -        assertTrue(types.isSameType(types.erasure(innerClassType), expectedErasedNestedType));
    -
    -        // Array type
    -        TypeMirror arrayType = types.getArrayType(listOfStringsType);
    -        assertTrue(types.isSameType(types.erasure(arrayType), types.getArrayType(type(List.class))));
    -
    -        // Type variable
    -        TypeElement listDeclaration = element(List.class);
    -        TypeVariable simpleTypeVariable = types.createTypeVariable(listDeclaration.getTypeParameters().get(0), null);
    -        types.setTypeVariableBounds(simpleTypeVariable, type(Number.class), types.getNullType());
    -        assertTrue(types.isSameType(types.erasure(simpleTypeVariable), type(Number.class)));
    -
    -        TypeVariable multiBoundTypeVariable
    -            = types.createTypeVariable(listDeclaration.getTypeParameters().get(0), null);
    -        types.setTypeVariableBounds(multiBoundTypeVariable,
    -            types.getIntersectionType(type(List.class), type(Serializable.class)), types.getNullType());
    -        assertTrue(types.isSameType(types.erasure(multiBoundTypeVariable), type(List.class)));
    -
    -        // Every other type
    -        PrimitiveType booleanType = types.getPrimitiveType(TypeKind.BOOLEAN);
    -        assertTrue(types.isSameType(types.erasure(booleanType), booleanType));
    -        assertTrue(types.isSameType(types.erasure(types.getNullType()), types.getNullType()));
    -    }
    -
    -    /**
    -     * Verifies that {@link AbstractTypes#asElement(TypeMirror)} throws expected exceptions.
    -     */
    -    @Test
    -    public void asElementInvalidArguments() {
    -        try {
    -            types.asElement(null);
    -            Assert.fail("Exception expected.");
    -        } catch (NullPointerException ignore) { }
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#asElement(TypeMirror)}.
    -     */
    -    @Test
    -    public void asElement() {
    -        assertEquals(types.asElement(type(List.class)), element(List.class));
    -        assertEquals(types.asElement(type(Integer.class)), element(Integer.class));
    -
    -        TypeElement listDeclaration = element(List.class);
    -        TypeVariable simpleTypeVariable = types.createTypeVariable(listDeclaration.getTypeParameters().get(0), null);
    -        types.setTypeVariableBounds(simpleTypeVariable, type(Number.class), types.getNullType());
    -        assertEquals(types.asElement(simpleTypeVariable), listDeclaration.getTypeParameters().get(0));
    -
    -        assertNull(types.asElement(types.getPrimitiveType(TypeKind.INT)));
    -    }
    -
    -    /**
    -     * Verifies {@link TypeElement#asType()}.
    -     */
    -    @Test
    -    public void asType() {
    -        DeclaredType typesContractType = (DeclaredType) type(getClass());
    -        TypeElement outerClassDeclaration = element(OuterClass.class);
    -        TypeElement innerClassDeclaration = element(OuterClass.InnerClass.class);
    -
    -        DeclaredType outerClassType= types.getDeclaredType(
    -            typesContractType, outerClassDeclaration, outerClassDeclaration.getTypeParameters().get(0).asType());
    -        DeclaredType innerClassType = types.getDeclaredType(
    -            outerClassType, innerClassDeclaration, innerClassDeclaration.getTypeParameters().get(0).asType());
    -        assertEquals(innerClassDeclaration.asType(), innerClassType);
    -    }
    -
    -    /**
    -     * Verifies that {@link AbstractTypes#isSameType(TypeMirror, TypeMirror)} throws expected exceptions.
    -     */
    -    @Test
    -    public void testIsSameTypeInvalidArguments() {
    -        try {
    -            types.isSameType(null, type(Object.class));
    -            Assert.fail("Exception expected.");
    -        } catch (NullPointerException ignore) { }
    -
    -        try {
    -            types.isSameType(type(Object.class), null);
    -            Assert.fail("Exception expected.");
    -        } catch (NullPointerException ignore) { }
    -
    -        try {
    -            types.isSameType(null, null);
    -            Assert.fail("Exception expected.");
    -        } catch (NullPointerException ignore) { }
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#isSameType(TypeMirror, TypeMirror)}.
    -     */
    -    @Test
    -    public void testIsSameType() {
    -        assertTrue(types.isSameType(type(Object.class), type(Object.class)));
    -        assertFalse(types.isSameType(type(Object.class), type(Number.class)));
    -
    -        WildcardType wildcardType = types.getWildcardType(null, null);
    -        assertFalse(types.isSameType(wildcardType, wildcardType));
    -    }
    -
    -    private boolean isSubtypeOfOneOf(TypeMirror subtype, List<? extends TypeMirror> supertypes) {
    -        for (TypeMirror supertype: supertypes) {
    -            if (types.isSubtype(subtype, supertype)) {
    -                return true;
    -            }
    -        }
    -        return false;
    -    }
    -
    -    /**
    -     * Verifies
    -     * {@link AbstractTypes#getTypeVariable(TypeParameterElement, TypeMirror, TypeMirror, WildcardType)}.
    -     */
    -    @Test
    -    public void testGetTypeVariable() {
    -        TypeElement listDeclaration = element(List.class);
    -        TypeParameterElement elementTypeParameter = listDeclaration.getTypeParameters().get(0);
    -
    -        TypeVariable typeVariable
    -            = types.getTypeVariable(elementTypeParameter, type(Integer.class), types.getNullType(), null);
    -        assertEquals(typeVariable.asElement(), elementTypeParameter);
    -        assertTrue(types.isSameType(typeVariable.getUpperBound(), type(Integer.class)));
    -        assertTrue(types.isSameType(typeVariable.getLowerBound(), types.getNullType()));
    -        assertNull(types.capturedTypeArgument(typeVariable));
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#createTypeVariable(TypeParameterElement, WildcardType)}.
    -     */
    -    @Test
    -    public void createTypeVariable() {
    -        TypeElement listDeclaration = element(List.class);
    -        TypeParameterElement elementTypeParameter = listDeclaration.getTypeParameters().get(0);
    -
    -        TypeVariable typeVariable = types.createTypeVariable(elementTypeParameter, null);
    -        try {
    -            typeVariable.getUpperBound();
    -            Assert.fail("Expected exception.");
    -        } catch (IllegalStateException ignored) { }
    -
    -        try {
    -            typeVariable.getLowerBound();
    -            Assert.fail("Expected exception.");
    -        } catch (IllegalStateException ignored) { }
    -    }
    -
    -    /**
    -     * Verifies {@link AbstractTypes#setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)}.
    -     */
    -    @Test
    -    public void testSetTypeVariableBounds() {
    -        TypeElement listDeclaration = element(List.class);
    -        TypeParameterElement elementTypeParameter = listDeclaration.getTypeParameters().get(0);
    -
    -        TypeVariable typeVariable = types.createTypeVariable(elementTypeParameter, null);
    -        types.setTypeVariableBounds(typeVariable, type(Integer.class), types.getNullType());
    -        assertEquals(typeVariable.asElement(), elementTypeParameter);
    -        assertTrue(types.isSameType(typeVariable.getUpperBound(), type(Integer.class)));
    -        assertTrue(types.isSameType(typeVariable.getLowerBound(), types.getNullType()));
    -        assertNull(types.capturedTypeArgument(typeVariable));
    -
    -        try {
    -            types.setTypeVariableBounds(typeVariable, type(Integer.class), types.getNullType());
    -            Assert.fail("Expected exception.");
    -        } catch (IllegalStateException ignored) { }
    -    }
    -
    -    @Test
    -    public void testGetIntersectionType() {
    -        IntersectionType intersectionType = types.getIntersectionType(type(Cloneable.class), type(Serializable.class));
    -        assertTrue(isSubtypeOfOneOf(type(Serializable.class), intersectionType.getBounds()));
    -
    -        try {
    -            types.getIntersectionType();
    -            Assert.fail("Expected exception.");
    -        } catch (IllegalArgumentException ignored) { }
    -
    -        try {
    -            types.getIntersectionType(type(Cloneable.class), null);
    -            Assert.fail("Expected exception.");
    -        } catch (NullPointerException ignored) { }
    -
    -        try {
    -            types.getIntersectionType(null, type(Cloneable.class));
    -            Assert.fail("Expected exception.");
    -        } catch (NullPointerException ignored) { }
    -    }
    -
    -    @Test
    -    public void testToString() {
    -        // PrimitiveType
    -        for (TypeKind primitive: Arrays.asList(TypeKind.DOUBLE, TypeKind.FLOAT, TypeKind.LONG, TypeKind.INT,
    -                TypeKind.SHORT, TypeKind.BYTE, TypeKind.CHAR, TypeKind.BOOLEAN)) {
    -            assertEquals(types.toString(types.getPrimitiveType(primitive)), primitive.toString().toLowerCase());
    -        }
    -
    -        // NullType
    -        assertEquals(types.toString(types.getNullType()), "null");
    -
    -        // NoType
    -        for (TypeKind noType: Arrays.asList(TypeKind.VOID, TypeKind.NONE)) {
    -            assertEquals(types.toString(types.getNoType(noType)), noType.toString().toLowerCase());
    -        }
    -
    -        // DeclaredType
    -        DeclaredType outerClassType = types.getDeclaredType(element(OuterClass.class), type(Integer.class));
    -        DeclaredType arrayListOfIntegersType = types.getDeclaredType(element(ArrayList.class), type(Integer.class));
    -        // innerClassType: OuterClass<Integer>.InnerClass<? extends ArrayList<Integer>>
    -        DeclaredType innerClassType = types.getDeclaredType(
    -            outerClassType,
    -            element(OuterClass.InnerClass.class),
    -            types.getWildcardType(arrayListOfIntegersType, null)
    -        );
    -        assertEquals(types.toString(innerClassType), String.format("%s<%s>.%s<? extends %s<%s>>",
    -            OuterClass.class.getCanonicalName(), Integer.class.getCanonicalName(),
    -            OuterClass.InnerClass.class.getSimpleName(),
    -            ArrayList.class.getCanonicalName(), Integer.class.getCanonicalName()));
    -
    -        // ArrayType
    -        assertEquals(types.toString(types.getArrayType(type(Integer.class))), Integer[].class.getCanonicalName());
    -
    -        // TypeVariable
    -        TypeVariable typeVariable = (TypeVariable) element(List.class).getTypeParameters().get(0).asType();
    -        assertEquals(types.toString(typeVariable), List.class.getTypeParameters()[0].getName());
    -        // listOfNumbersType: List<? extends Number>
    -        DeclaredType listOfNumbersType
    -            = types.getDeclaredType(element(List.class), types.getWildcardType(type(Number.class), null));
    -        TypeVariable capturedTypeVariable
    -            = (TypeVariable) ((DeclaredType) types.capture(listOfNumbersType)).getTypeArguments().get(0);
    -        assertEquals(types.toString(capturedTypeVariable),
    -            String.format("capture<? extends %s>", Number.class.getCanonicalName()));
    -
    -        // WildcardType
    -        WildcardType wildcardArgument = types.getWildcardType(null, type(Integer.class));
    -        assertEquals(types.toString(wildcardArgument), String.format("? super %s", Integer.class.getCanonicalName()));
    -
    -        // IntersectionType
    -        IntersectionType intersectionType = types.getIntersectionType(type(Cloneable.class), type(Serializable.class));
    -        assertEquals(types.toString(intersectionType),
    -            String.format("%s & %s", Cloneable.class.getCanonicalName(), Serializable.class.getCanonicalName()));
    -    }
    -
    -    /**
    -     * Verifies that {@link AbstractTypes#unboxedType(TypeMirror)} throws expected exceptions.
    -     */
    -    @Test
    -    public void unboxedType() {
    -        try {
    -            types.unboxedType(type(List.class));
    -            Assert.fail("Expected exception.");
    -        } catch (IllegalArgumentException ignored) { }
    -
    -        try {
    -            types.unboxedType(types.getNullType());
    -            Assert.fail("Expected exception.");
    -        } catch (IllegalArgumentException ignored) { }
    -    }
    -
    -    /**
    -     * Verifies that {@link AbstractTypes#boxedClass(PrimitiveType)} throws expected exceptions.
    -     */
    -    @Test
    -    public void boxedClass() {
    -        try {
    -            types.boxedClass(null);
    -            Assert.fail("Expected exception.");
    -        } catch (NullPointerException ignored) { }
    -    }
    -
    -    /**
    -     * Verifies that {@link AbstractTypes#unboxedType(TypeMirror)} and {@link AbstractTypes#boxedClass(PrimitiveType)}
    -     * are (essentially) inverse methods of each other.
    -     */
    -    @Test
    -    public void boxingAndUnboxing() {
    -        for (TypeKind primitive: Arrays.asList(TypeKind.DOUBLE, TypeKind.FLOAT, TypeKind.LONG, TypeKind.INT,
    -                TypeKind.SHORT, TypeKind.BYTE, TypeKind.CHAR, TypeKind.BOOLEAN)) {
    -            PrimitiveType primitiveType = types.getPrimitiveType(primitive);
    -            TypeElement boxedClass = types.boxedClass(primitiveType);
    -            PrimitiveType unboxedType = types.unboxedType(boxedClass.asType());
    -
    -            assertEquals(unboxedType, primitiveType);
    -            assertEquals(unboxedType.getKind(), primitive);
    -        }
    -    }
    -
    -    /**
    -     * Verifies that {@link AbstractTypes#getPrimitiveType(TypeKind)} throws expected exceptions.
    -     */
    -    @Test
    -    public void testGetPrimitiveType() {
    -        try {
    -            types.getPrimitiveType(null);
    -            Assert.fail("Expected exception.");
    -        } catch (NullPointerException ignored) { }
    -
    -        try {
    -            types.getPrimitiveType(TypeKind.ARRAY);
    -            Assert.fail("Expected exception.");
    -        } catch (IllegalArgumentException ignored) { }
    -    }
    -
    -    @Test
    -    public void testGetNoType() {
    -        for (TypeKind noTypeKind: Arrays.asList(TypeKind.VOID, TypeKind.NONE)) {
    -            assertEquals(types.getNoType(noTypeKind).getKind(), noTypeKind);
    -        }
    -
    -        try {
    -            types.getNoType(null);
    -            Assert.fail("Expected exception.");
    -        } catch (NullPointerException ignored) { }
    -
    -        try {
    -            types.getNoType(TypeKind.PACKAGE);
    -            Assert.fail("Expected exception.");
    -        } catch (IllegalArgumentException ignored) { }
    -    }
    -
    -    @Test
    -    public void testGetNullType() {
    -        assertEquals(types.getNullType().getKind(), TypeKind.NULL);
    -    }
    -
    -    private static void testEqualsAndHashCode(Object first, Object second) {
    -        assertTrue(first.equals(first));
    -        assertTrue(second.equals(second));
    -        assertTrue(first.equals(second));
    -        assertTrue(second.equals(first));
    -
    -        assertFalse(first.equals(null));
    -        assertFalse(first.equals(new Object()));
    -
    -        assertEquals(first.hashCode(), second.hashCode());
    -    }
    -
    -    @Test
    -    public void testEqualsAndHashCode() {
    -        testEqualsAndHashCode(types.getArrayType(type(Integer.class)), types.getArrayType(type(Integer.class)));
    -        testEqualsAndHashCode(types.getPrimitiveType(TypeKind.INT), types.getPrimitiveType(TypeKind.INT));
    -        TypeElement integerDeclaration = element(Integer.class);
    -        testEqualsAndHashCode(types.getDeclaredType(integerDeclaration), types.getDeclaredType(integerDeclaration));
    -        testEqualsAndHashCode(
    -            types.getIntersectionType(type(Serializable.class), type(Cloneable.class)),
    -            types.getIntersectionType(type(Serializable.class), type(Cloneable.class))
    -        );
    -        testEqualsAndHashCode(
    -            types.getWildcardType(type(Integer.class), null),
    -            types.getWildcardType(type(Integer.class), null)
    -        );
    -        testEqualsAndHashCode(types.getNullType(), types.getNullType());
    -        testEqualsAndHashCode(types.getNoType(TypeKind.VOID), types.getNoType(TypeKind.VOID));
    -        TypeElement listDeclaration = element(List.class);
    -        TypeParameterElement listTypeParameter = listDeclaration.getTypeParameters().get(0);
    -        TypeVariable listTypeArgument = (TypeVariable) listTypeParameter.asType();
    -        testEqualsAndHashCode(
    -            listTypeArgument,
    -            types.getTypeVariable(listTypeParameter, listTypeArgument.getUpperBound(), listTypeArgument.getLowerBound(),
    -                null)
    -        );
    -
    -        testEqualsAndHashCode(element(Serializable.class), element(Serializable.class));
    -        testEqualsAndHashCode(listTypeParameter, listTypeParameter);
    -    }
    -
    -    @Test
    -    public void typeElementTest() {
    -        TypeElement outerClassDeclaration = element(OuterClass.class);
    -        TypeElement innerClassDeclaration = element(OuterClass.InnerClass.class);
    -        assertEquals(innerClassDeclaration.getEnclosingElement(), outerClassDeclaration);
    -        assertTrue(outerClassDeclaration.getEnclosedElements().contains(innerClassDeclaration));
    -        assertTrue(outerClassDeclaration.getEnclosedElements().containsAll(outerClassDeclaration.getTypeParameters()));
    -
    -        TypeElement integerDeclaration = element(Integer.class);
    -        assertEquals(integerDeclaration.getSuperclass(), type(Number.class));
    -        DeclaredType integerComparableType = types.getDeclaredType(element(Comparable.class), type(Integer.class));
    -        assertEquals(integerDeclaration.getInterfaces(), Collections.singletonList(integerComparableType));
    -        assertEquals(integerDeclaration.getQualifiedName().toString(), Integer.class.getName());
    -        assertEquals(integerDeclaration.getSimpleName().toString(), Integer.class.getSimpleName());
    -        assertEquals(integerDeclaration.asType(), type(Integer.class));
    -
    -        // Support for methods not strictly necessary for type-system operations is optional (for instance,
    -        // getKind() or getNestingKind())
    -    }
    -
    -    @Test
    -    public void typeParameterElementTest() {
    -        TypeElement outerClassDeclaration = element(OuterClass.class);
    -        TypeParameterElement outerClassTypeParameter = outerClassDeclaration.getTypeParameters().get(0);
    -        assertEquals(outerClassTypeParameter.getEnclosingElement(), outerClassDeclaration);
    -        assertEquals(outerClassTypeParameter.getEnclosedElements(), Collections.emptyList());
    -        assertEquals(
    -            outerClassTypeParameter.asType(),
    -            types.getTypeVariable(outerClassTypeParameter, type(Number.class), types.getNullType(), null)
    -        );
    -        assertEquals(outerClassTypeParameter.getBounds(), Collections.singletonList(type(Number.class)));
    -        assertEquals(
    -            outerClassTypeParameter.getSimpleName().toString(),
    -            OuterClass.class.getTypeParameters()[0].getName()
    -        );
    -        assertEquals(outerClassTypeParameter.getGenericElement(), outerClassTypeParameter.getEnclosingElement());
    -    }
    -}
    diff --git a/src/test/java/net/florianschoppmann/java/type/AbstractTypesProvider.java b/src/test/java/net/florianschoppmann/java/type/AbstractTypesProvider.java
    deleted file mode 100644
    index 656393d..0000000
    --- a/src/test/java/net/florianschoppmann/java/type/AbstractTypesProvider.java
    +++ /dev/null
    @@ -1,30 +0,0 @@
    -package net.florianschoppmann.java.type;
    -
    -import javax.lang.model.element.TypeElement;
    -import java.util.Map;
    -
    -/**
    - * Provider for {@link AbstractTypes} instances in contract tests.
    - */
    -public interface AbstractTypesProvider {
    -    /**
    -     * Performs pre-contract actions.
    -     *
    -     * <p>This method is called from within an {@link org.testng.annotations.BeforeClass} annotated method. It is
    -     * therefore possible to throw a {@link org.testng.SkipException} in this method.
    -     */
    -    void preContract();
    -
    -    /**
    -     * Puts {@link TypeElement} instances into the given map (corresponding to the {@link Class} keys) and returns a
    -     * {@link AbstractTypes} instance.
    -     *
    -     * <p>Implementations of this method must put a {@link TypeElement} instance for each {@link Class} key into the
    -     * given map. Implementations must not add or remove entries to/from the given map.
    -     *
    -     * @param classTypeElementMap Map with {@link Class} objects as keys. The value for each key is initially undefined
    -     *     and must be updated with the respective {@link TypeElement} upon return.
    -     * @return the {@link AbstractTypes} instance that will be used for the contract test
    -     */
    -    AbstractTypes getTypes(Map<Class<?>, TypeElement> classTypeElementMap);
    -}
    diff --git a/src/test/java/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.java b/src/test/java/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.java
    deleted file mode 100644
    index 16601ad..0000000
    --- a/src/test/java/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.java
    +++ /dev/null
    @@ -1,112 +0,0 @@
    -package net.florianschoppmann.java.type;
    -
    -import net.florianschoppmann.java.reflect.ReflectionTypes;
    -import org.testng.Assert;
    -import org.testng.annotations.Test;
    -
    -import javax.annotation.Nullable;
    -import javax.lang.model.element.AnnotationMirror;
    -import javax.lang.model.type.TypeKind;
    -import javax.lang.model.type.TypeMirror;
    -import javax.lang.model.type.TypeVisitor;
    -import javax.lang.model.type.UnknownTypeException;
    -import java.io.Serializable;
    -import java.lang.annotation.Annotation;
    -import java.util.Arrays;
    -import java.util.List;
    -
    -/**
    - * Unit tests for {@link ExtendedTypeKindVisitor7}.
    - */
    -public class ExtendedTypeKindVisitor7Test {
    -    private final ReflectionTypes types = ReflectionTypes.getInstance();
    -
    -    private abstract static class AnnotatedConstructImpl implements AnnotatedConstruct {
    -        @Override
    -        public final List<? extends AnnotationMirror> getAnnotationMirrors() {
    -            throw new UnsupportedOperationException();
    -        }
    -
    -        @Override
    -        public final <A extends Annotation> A getAnnotation(Class<A> annotationType) {
    -            throw new UnsupportedOperationException();
    -        }
    -
    -        @Override
    -        public final <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) {
    -            throw new UnsupportedOperationException();
    -        }
    -    }
    -
    -    private static final class IntersectionTypeImpl extends AnnotatedConstructImpl implements IntersectionType {
    -        private final List<TypeMirror> bounds;
    -        private final boolean isIntersectionType;
    -
    -        private IntersectionTypeImpl(List<TypeMirror> bounds, boolean isIntersectionType) {
    -            this.bounds = bounds;
    -            this.isIntersectionType = isIntersectionType;
    -        }
    -
    -        @Override
    -        public List<? extends TypeMirror> getBounds() {
    -            return bounds;
    -        }
    -
    -        @Override
    -        public boolean isIntersectionType() {
    -            return isIntersectionType;
    -        }
    -
    -        @Override
    -        public TypeKind getKind() {
    -            return TypeKind.OTHER;
    -        }
    -
    -        @Override
    -        public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
    -            return visitor.visitUnknown(this, parameter);
    -        }
    -    }
    -
    -    private static final class OtherType extends AnnotatedConstructImpl implements TypeMirror {
    -        @Override
    -        public TypeKind getKind() {
    -            return TypeKind.OTHER;
    -        }
    -
    -        @Override
    -        public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
    -            return visitor.visitUnknown(this, parameter);
    -        }
    -    }
    -
    -    private static final class SomeVisitor extends ExtendedTypeKindVisitor7<String, String> {
    -        @Override
    -        public String visitOther(TypeMirror typeMirror, @Nullable String parameter) {
    -            return "unknown";
    -        }
    -    }
    -
    -    @Test
    -    public void test() {
    -        final List<TypeMirror> bounds
    -            = Arrays.asList(types.typeMirror(Serializable.class), types.typeMirror(Cloneable.class));
    -
    -        ExtendedTypeKindVisitor7<String, String> visitor = new ExtendedTypeKindVisitor7<>("42");
    -        SomeVisitor someVisitor = new SomeVisitor();
    -
    -        try {
    -            visitor.visitUnknown(new IntersectionTypeImpl(bounds, false), "24");
    -            Assert.fail("Expected exception.");
    -        } catch (UnknownTypeException ignored) { }
    -
    -        try {
    -            visitor.visitUnknown(new OtherType(), "24");
    -            Assert.fail("Expected exception.");
    -        } catch (UnknownTypeException ignored) { }
    -
    -        Assert.assertEquals(someVisitor.visitUnknown(new OtherType(), "24"), "unknown");
    -
    -        Assert.assertEquals(visitor.visitUnknown(new IntersectionTypeImpl(bounds, true), "24"), "42");
    -    }
    -}
    diff --git a/team-list.html b/team-list.html
    new file mode 100644
    index 0000000..00e63a6
    --- /dev/null
    +++ b/team-list.html
    @@ -0,0 +1,143 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<!-- Generated by Apache Maven Doxia Site Renderer 1.4 at 2015-05-25 -->
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    +    <title>Java Types - Project Team</title>
    +    <style type="text/css" media="all">
    +      @import url("./css/maven-base.css");
    +      @import url("./css/maven-theme.css");
    +      @import url("./css/site.css");
    +    </style>
    +    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
    +    <meta name="Date-Revision-yyyymmdd" content="20150525" />
    +    <meta http-equiv="Content-Language" content="en" />
    +        
    +        </head>
    +  <body class="composite">
    +    <div id="banner">
    +                    <div id="bannerLeft">
    +                Java Types
    +                </div>
    +                    <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="breadcrumbs">
    +            
    +                    
    +                <div class="xleft">
    +        <span id="publishDate">Last Published: 2015-05-25</span>
    +                  &nbsp;| <span id="projectVersion">Version: 1.0.1</span>
    +                      </div>
    +            <div class="xright">                    <a href="./" title="Java Types">Java Types</a>
    +              
    +                    
    +      </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +    <div id="leftColumn">
    +      <div id="navcolumn">
    +             
    +                    
    +                                          <h5>Project Documentation</h5>
    +                  <ul>
    +                                                                                                                                                                                                                                                                                                      <li class="expanded">
    +                          <a href="project-info.html" title="Project Information">Project Information</a>
    +                    <ul>
    +                      <li class="none">
    +                          <a href="integration.html" title="Continuous Integration">Continuous Integration</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependencies.html" title="Dependencies">Dependencies</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-convergence.html" title="Dependency Convergence">Dependency Convergence</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="dependency-info.html" title="Dependency Information">Dependency Information</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="distribution-management.html" title="Distribution Management">Distribution Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="index.html" title="About">About</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="license.html" title="Project License">Project License</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="plugin-management.html" title="Plugin Management">Plugin Management</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="plugins.html" title="Project Plugins">Project Plugins</a>
    +            </li>
    +                      <li class="none">
    +            <strong>Project Team</strong>
    +          </li>
    +                      <li class="none">
    +                          <a href="source-repository.html" title="Source Repository">Source Repository</a>
    +            </li>
    +                      <li class="none">
    +                          <a href="project-summary.html" title="Project Summary">Project Summary</a>
    +            </li>
    +              </ul>
    +        </li>
    +                                                                                                                                                                                <li class="collapsed">
    +                          <a href="project-reports.html" title="Project Reports">Project Reports</a>
    +                  </li>
    +          </ul>
    +                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
    +        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
    +      </a>
    +                   
    +                    
    +            </div>
    +    </div>
    +    <div id="bodyColumn">
    +      <div id="contentBox">
    +        <div class="section">
    +<h2>The Team<a name="The_Team"></a></h2><a name="The_Team"></a>
    +<p>A successful project requires many people to play many roles. Some members write code or documentation, while others are valuable as testers, submitting patches and suggestions.</p>
    +<p>The team is comprised of Members and Contributors. Members have direct access to the source of a project and actively evolve the code-base. Contributors improve the project through submission of patches and suggestions to the Members. The number of Contributors to the project is unbounded. Get involved today. All contributions to the project are greatly appreciated.</p>
    +<div class="section">
    +<h3>Members<a name="Members"></a></h3><a name="Members"></a>
    +<p>The following is a list of developers with commit privileges that have directly contributed to the project in one way or another.</p>
    +<table border="0" class="bodyTable">
    +<tr class="a">
    +<th>Image</th>
    +<th>Id</th>
    +<th>Name</th>
    +<th>Email</th>
    +<th>URL</th></tr>
    +<tr class="b">
    +<td><img src="http://www.gravatar.com/avatar/8701df142ece14e67867fb2618ad9ae5?d=mm&amp;s=60" alt="" /></td>
    +<td><a name="fschopp"></a>fschopp</td>
    +<td>Florian Schoppmann</td>
    +<td><a class="externalLink" href="mailto:mail@florian-schoppmann.net">mail@florian-schoppmann.net</a></td>
    +<td><a class="externalLink" href="http://www.florian-schoppmann.net">http://www.florian-schoppmann.net</a></td></tr></table></div>
    +<div class="section">
    +<h3>Contributors<a name="Contributors"></a></h3><a name="Contributors"></a>
    +<p>There are no contributors listed for this project. Please check back again later.</p></div></div>
    +      </div>
    +    </div>
    +    <div class="clear">
    +      <hr/>
    +    </div>
    +    <div id="footer">
    +      <div class="xright">
    +              Copyright &#169;                   2014-2015.
    +          All Rights Reserved.      
    +                    
    +                  </div>
    +      <div class="clear">
    +        <hr/>
    +      </div>
    +    </div>
    +  </body>
    +</html>
    diff --git a/testapidocs/allclasses-frame.html b/testapidocs/allclasses-frame.html
    new file mode 100644
    index 0000000..03f99ab
    --- /dev/null
    +++ b/testapidocs/allclasses-frame.html
    @@ -0,0 +1,24 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>All Classes (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
    +<script type="text/javascript" src="script.js"></script>
    +</head>
    +<body>
    +<h1 class="bar">All&nbsp;Classes</h1>
    +<div class="indexContainer">
    +<ul>
    +<li><a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type" target="classFrame">AbstractTypesContract</a></li>
    +<li><a href="net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type" target="classFrame"><span class="interfaceName">AbstractTypesProvider</span></a></li>
    +<li><a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type" target="classFrame">ExtendedTypeKindVisitor7Test</a></li>
    +<li><a href="net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect" target="classFrame">ImmutableListTest</a></li>
    +<li><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect" target="classFrame">ReflectionTypesTest</a></li>
    +</ul>
    +</div>
    +</body>
    +</html>
    diff --git a/testapidocs/allclasses-noframe.html b/testapidocs/allclasses-noframe.html
    new file mode 100644
    index 0000000..9dfaa0f
    --- /dev/null
    +++ b/testapidocs/allclasses-noframe.html
    @@ -0,0 +1,24 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>All Classes (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
    +<script type="text/javascript" src="script.js"></script>
    +</head>
    +<body>
    +<h1 class="bar">All&nbsp;Classes</h1>
    +<div class="indexContainer">
    +<ul>
    +<li><a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></li>
    +<li><a href="net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type"><span class="interfaceName">AbstractTypesProvider</span></a></li>
    +<li><a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type">ExtendedTypeKindVisitor7Test</a></li>
    +<li><a href="net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect">ImmutableListTest</a></li>
    +<li><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></li>
    +</ul>
    +</div>
    +</body>
    +</html>
    diff --git a/testapidocs/constant-values.html b/testapidocs/constant-values.html
    new file mode 100644
    index 0000000..338d3e1
    --- /dev/null
    +++ b/testapidocs/constant-values.html
    @@ -0,0 +1,126 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Constant Field Values (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
    +<script type="text/javascript" src="script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Constant Field Values (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="overview-summary.html">Overview</a></li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li><a href="overview-tree.html">Tree</a></li>
    +<li><a href="deprecated-list.html">Deprecated</a></li>
    +<li><a href="index-all.html">Index</a></li>
    +<li><a href="help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
    +<li><a href="constant-values.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h1 title="Constant Field Values" class="title">Constant Field Values</h1>
    +<h2 title="Contents">Contents</h2>
    +</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="overview-summary.html">Overview</a></li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li><a href="overview-tree.html">Tree</a></li>
    +<li><a href="deprecated-list.html">Deprecated</a></li>
    +<li><a href="index-all.html">Index</a></li>
    +<li><a href="help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
    +<li><a href="constant-values.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/deprecated-list.html b/testapidocs/deprecated-list.html
    new file mode 100644
    index 0000000..3623e86
    --- /dev/null
    +++ b/testapidocs/deprecated-list.html
    @@ -0,0 +1,126 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Deprecated List (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
    +<script type="text/javascript" src="script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Deprecated List (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="overview-summary.html">Overview</a></li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li><a href="overview-tree.html">Tree</a></li>
    +<li class="navBarCell1Rev">Deprecated</li>
    +<li><a href="index-all.html">Index</a></li>
    +<li><a href="help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
    +<li><a href="deprecated-list.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h1 title="Deprecated API" class="title">Deprecated API</h1>
    +<h2 title="Contents">Contents</h2>
    +</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="overview-summary.html">Overview</a></li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li><a href="overview-tree.html">Tree</a></li>
    +<li class="navBarCell1Rev">Deprecated</li>
    +<li><a href="index-all.html">Index</a></li>
    +<li><a href="help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
    +<li><a href="deprecated-list.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/help-doc.html b/testapidocs/help-doc.html
    new file mode 100644
    index 0000000..e4d2ca9
    --- /dev/null
    +++ b/testapidocs/help-doc.html
    @@ -0,0 +1,231 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>API Help (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
    +<script type="text/javascript" src="script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="API Help (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="overview-summary.html">Overview</a></li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li><a href="overview-tree.html">Tree</a></li>
    +<li><a href="deprecated-list.html">Deprecated</a></li>
    +<li><a href="index-all.html">Index</a></li>
    +<li class="navBarCell1Rev">Help</li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
    +<li><a href="help-doc.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h1 class="title">How This API Document Is Organized</h1>
    +<div class="subTitle">This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.</div>
    +</div>
    +<div class="contentContainer">
    +<ul class="blockList">
    +<li class="blockList">
    +<h2>Overview</h2>
    +<p>The <a href="overview-summary.html">Overview</a> page is the front page of this API document and provides a list of all packages with a summary for each.  This page can also contain an overall description of the set of packages.</p>
    +</li>
    +<li class="blockList">
    +<h2>Package</h2>
    +<p>Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:</p>
    +<ul>
    +<li>Interfaces (italic)</li>
    +<li>Classes</li>
    +<li>Enums</li>
    +<li>Exceptions</li>
    +<li>Errors</li>
    +<li>Annotation Types</li>
    +</ul>
    +</li>
    +<li class="blockList">
    +<h2>Class/Interface</h2>
    +<p>Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:</p>
    +<ul>
    +<li>Class inheritance diagram</li>
    +<li>Direct Subclasses</li>
    +<li>All Known Subinterfaces</li>
    +<li>All Known Implementing Classes</li>
    +<li>Class/interface declaration</li>
    +<li>Class/interface description</li>
    +</ul>
    +<ul>
    +<li>Nested Class Summary</li>
    +<li>Field Summary</li>
    +<li>Constructor Summary</li>
    +<li>Method Summary</li>
    +</ul>
    +<ul>
    +<li>Field Detail</li>
    +<li>Constructor Detail</li>
    +<li>Method Detail</li>
    +</ul>
    +<p>Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</p>
    +</li>
    +<li class="blockList">
    +<h2>Annotation Type</h2>
    +<p>Each annotation type has its own separate page with the following sections:</p>
    +<ul>
    +<li>Annotation Type declaration</li>
    +<li>Annotation Type description</li>
    +<li>Required Element Summary</li>
    +<li>Optional Element Summary</li>
    +<li>Element Detail</li>
    +</ul>
    +</li>
    +<li class="blockList">
    +<h2>Enum</h2>
    +<p>Each enum has its own separate page with the following sections:</p>
    +<ul>
    +<li>Enum declaration</li>
    +<li>Enum description</li>
    +<li>Enum Constant Summary</li>
    +<li>Enum Constant Detail</li>
    +</ul>
    +</li>
    +<li class="blockList">
    +<h2>Use</h2>
    +<p>Each documented package, class and interface has its own Use page.  This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A.  You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.</p>
    +</li>
    +<li class="blockList">
    +<h2>Tree (Class Hierarchy)</h2>
    +<p>There is a <a href="overview-tree.html">Class Hierarchy</a> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.</p>
    +<ul>
    +<li>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.</li>
    +<li>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</li>
    +</ul>
    +</li>
    +<li class="blockList">
    +<h2>Deprecated API</h2>
    +<p>The <a href="deprecated-list.html">Deprecated API</a> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</p>
    +</li>
    +<li class="blockList">
    +<h2>Index</h2>
    +<p>The <a href="index-all.html">Index</a> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</p>
    +</li>
    +<li class="blockList">
    +<h2>Prev/Next</h2>
    +<p>These links take you to the next or previous class, interface, package, or related page.</p>
    +</li>
    +<li class="blockList">
    +<h2>Frames/No Frames</h2>
    +<p>These links show and hide the HTML frames.  All pages are available with or without frames.</p>
    +</li>
    +<li class="blockList">
    +<h2>All Classes</h2>
    +<p>The <a href="allclasses-noframe.html">All Classes</a> link shows all classes and interfaces except non-static nested types.</p>
    +</li>
    +<li class="blockList">
    +<h2>Serialized Form</h2>
    +<p>Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.</p>
    +</li>
    +<li class="blockList">
    +<h2>Constant Field Values</h2>
    +<p>The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.</p>
    +</li>
    +</ul>
    +<span class="emphasizedPhrase">This help file applies to API documentation generated using the standard doclet.</span></div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="overview-summary.html">Overview</a></li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li><a href="overview-tree.html">Tree</a></li>
    +<li><a href="deprecated-list.html">Deprecated</a></li>
    +<li><a href="index-all.html">Index</a></li>
    +<li class="navBarCell1Rev">Help</li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
    +<li><a href="help-doc.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/index-all.html b/testapidocs/index-all.html
    new file mode 100644
    index 0000000..f077e31
    --- /dev/null
    +++ b/testapidocs/index-all.html
    @@ -0,0 +1,442 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Index (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
    +<script type="text/javascript" src="script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Index (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="overview-summary.html">Overview</a></li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li><a href="overview-tree.html">Tree</a></li>
    +<li><a href="deprecated-list.html">Deprecated</a></li>
    +<li class="navBarCell1Rev">Index</li>
    +<li><a href="help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?index-all.html" target="_top">Frames</a></li>
    +<li><a href="index-all.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="contentContainer"><a href="#I:A">A</a>&nbsp;<a href="#I:B">B</a>&nbsp;<a href="#I:C">C</a>&nbsp;<a href="#I:D">D</a>&nbsp;<a href="#I:E">E</a>&nbsp;<a href="#I:G">G</a>&nbsp;<a href="#I:I">I</a>&nbsp;<a href="#I:M">M</a>&nbsp;<a href="#I:N">N</a>&nbsp;<a href="#I:P">P</a>&nbsp;<a href="#I:R">R</a>&nbsp;<a href="#I:S">S</a>&nbsp;<a href="#I:T">T</a>&nbsp;<a href="#I:U">U</a>&nbsp;<a name="I:A">
    +<!--   -->
    +</a>
    +<h2 class="title">A</h2>
    +<dl>
    +<dt><a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type"><span class="typeNameLink">AbstractTypesContract</span></a> - Class in <a href="net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a></dt>
    +<dd>
    +<div class="block">Contract test for <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#AbstractTypesContract-net.florianschoppmann.java.type.AbstractTypesProvider-">AbstractTypesContract(AbstractTypesProvider)</a></span> - Constructor for class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Constructs a new contract-test instance with the given provider.</div>
    +</dd>
    +<dt><a href="net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type"><span class="typeNameLink">AbstractTypesProvider</span></a> - Interface in <a href="net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a></dt>
    +<dd>
    +<div class="block">Provider for <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a> instances in contract tests.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#asElement--">asElement()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#asElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.asElement(TypeMirror)</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#asElementInvalidArguments--">asElementInvalidArguments()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies that <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#asElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.asElement(TypeMirror)</code></a> throws expected exceptions.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#asMemberOf--">asMemberOf()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#asType--">asType()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/Element.html?is-external=true#asType--" title="class or interface in javax.lang.model.element"><code>Element.asType()</code></a>.</div>
    +</dd>
    +</dl>
    +<a name="I:B">
    +<!--   -->
    +</a>
    +<h2 class="title">B</h2>
    +<dl>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#boxedClass--">boxedClass()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#boxedClass-javax.lang.model.type.PrimitiveType-" title="class or interface in javax.lang.model.util"><code>Types.boxedClass(PrimitiveType)</code></a> throws expected exceptions.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#boxingAndUnboxing--">boxingAndUnboxing()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#unboxedType-javax.lang.model.type.TypeMirror-" title="class or interface in javax.lang.model.util"><code>Types.unboxedType(TypeMirror)</code></a> and <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#boxedClass-javax.lang.model.type.PrimitiveType-" title="class or interface in javax.lang.model.util"><code>Types.boxedClass(PrimitiveType)</code></a>
    + are (essentially) inverse methods of each other.</div>
    +</dd>
    +</dl>
    +<a name="I:C">
    +<!--   -->
    +</a>
    +<h2 class="title">C</h2>
    +<dl>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#capture--">capture()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#capture-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.capture(TypeMirror)</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#captureInterdependentRecursiveBound--">captureInterdependentRecursiveBound()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#captureSingleRecursiveBound--">captureSingleRecursiveBound()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#createTests--">createTests()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#createTypeVariable--">createTypeVariable()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#createTypeVariable-javax.lang.model.element.TypeParameterElement-javax.lang.model.type.WildcardType-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.createTypeVariable(TypeParameterElement, WildcardType)</code></a>.</div>
    +</dd>
    +</dl>
    +<a name="I:D">
    +<!--   -->
    +</a>
    +<h2 class="title">D</h2>
    +<dl>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#directSupertypes--">directSupertypes()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +</dl>
    +<a name="I:E">
    +<!--   -->
    +</a>
    +<h2 class="title">E</h2>
    +<dl>
    +<dt><a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type"><span class="typeNameLink">ExtendedTypeKindVisitor7Test</span></a> - Class in <a href="net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a></dt>
    +<dd>
    +<div class="block">Unit tests for <a href="../apidocs/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>ExtendedTypeKindVisitor7</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html#ExtendedTypeKindVisitor7Test--">ExtendedTypeKindVisitor7Test()</a></span> - Constructor for class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type">ExtendedTypeKindVisitor7Test</a></dt>
    +<dd>&nbsp;</dd>
    +</dl>
    +<a name="I:G">
    +<!--   -->
    +</a>
    +<h2 class="title">G</h2>
    +<dl>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#getTestName--">getTestName()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesProvider.html#getTypes-java.util.Map-">getTypes(Map&lt;Class&lt;?&gt;, TypeElement&gt;)</a></span> - Method in interface net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type">AbstractTypesProvider</a></dt>
    +<dd>
    +<div class="block">Puts <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/TypeElement.html?is-external=true" title="class or interface in javax.lang.model.element"><code>TypeElement</code></a> instances into the given map (corresponding to the <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a> keys) and returns a
    + <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a> instance.</div>
    +</dd>
    +</dl>
    +<a name="I:I">
    +<!--   -->
    +</a>
    +<h2 class="title">I</h2>
    +<dl>
    +<dt><a href="net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect"><span class="typeNameLink">ImmutableListTest</span></a> - Class in <a href="net/florianschoppmann/java/reflect/package-summary.html">net.florianschoppmann.java.reflect</a></dt>
    +<dd>
    +<div class="block">Unit tests for <a href="../apidocs/net/florianschoppmann/java/reflect/ImmutableList.html?is-external=true" title="class or interface in net.florianschoppmann.java.reflect"><code>ImmutableList</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ImmutableListTest.html#ImmutableListTest--">ImmutableListTest()</a></span> - Constructor for class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect">ImmutableListTest</a></dt>
    +<dd>&nbsp;</dd>
    +</dl>
    +<a name="I:M">
    +<!--   -->
    +</a>
    +<h2 class="title">M</h2>
    +<dl>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#methodWithTypeParameter-T-">methodWithTypeParameter(T)</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +</dl>
    +<a name="I:N">
    +<!--   -->
    +</a>
    +<h2 class="title">N</h2>
    +<dl>
    +<dt><a href="net/florianschoppmann/java/reflect/package-summary.html">net.florianschoppmann.java.reflect</a> - package net.florianschoppmann.java.reflect</dt>
    +<dd>&nbsp;</dd>
    +<dt><a href="net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a> - package net.florianschoppmann.java.type</dt>
    +<dd>&nbsp;</dd>
    +</dl>
    +<a name="I:P">
    +<!--   -->
    +</a>
    +<h2 class="title">P</h2>
    +<dl>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesProvider.html#preContract--">preContract()</a></span> - Method in interface net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type">AbstractTypesProvider</a></dt>
    +<dd>
    +<div class="block">Performs pre-contract actions.</div>
    +</dd>
    +</dl>
    +<a name="I:R">
    +<!--   -->
    +</a>
    +<h2 class="title">R</h2>
    +<dl>
    +<dt><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect"><span class="typeNameLink">ReflectionTypesTest</span></a> - Class in <a href="net/florianschoppmann/java/reflect/package-summary.html">net.florianschoppmann.java.reflect</a></dt>
    +<dd>
    +<div class="block">Unit tests for <a href="../apidocs/net/florianschoppmann/java/reflect/ReflectionTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.reflect"><code>ReflectionTypes</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#ReflectionTypesTest--">ReflectionTypesTest()</a></span> - Constructor for class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#requireCondition--">requireCondition()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#requireValidElement--">requireValidElement()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#requireValidElement--">requireValidElement()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies that <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#requireValidElement-javax.lang.model.element.Element-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.requireValidElement(javax.lang.model.element.Element)</code></a> throws a
    + <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><code>NullPointerException</code></a> if passed null.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#requireValidType--">requireValidType()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#requireValidType--">requireValidType()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies that <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#requireValidType-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.requireValidType(TypeMirror)</code></a> does not throw an
    + exception if passed null.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#requireValidTypes--">requireValidTypes()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies that <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#requireValidTypes-javax.lang.model.type.TypeMirror:A-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.requireValidTypes(TypeMirror[])</code></a> throws exceptions if
    + passed null or an array with null element.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#resolveActualTypeArguments--">resolveActualTypeArguments()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#resolveActualTypeArguments-javax.lang.model.element.TypeElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.resolveActualTypeArguments(TypeElement, TypeMirror)</code></a> when the second argument is
    + a generic type, a non-generic type, or a primitive type.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#resolveActualTypeArgumentsArrays--">resolveActualTypeArgumentsArrays()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#resolveActualTypeArguments-javax.lang.model.element.TypeElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.resolveActualTypeArguments(TypeElement, TypeMirror)</code></a> if the second argument
    + contains an actual type argument that is an array type.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#resolveActualTypeArgumentsRaw--">resolveActualTypeArgumentsRaw()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#resolveActualTypeArguments-javax.lang.model.element.TypeElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.resolveActualTypeArguments(TypeElement, TypeMirror)</code></a> if the second argument is a
    + raw type.</div>
    +</dd>
    +</dl>
    +<a name="I:S">
    +<!--   -->
    +</a>
    +<h2 class="title">S</h2>
    +<dl>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#setup--">setup()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#setup--">setup()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Performs initialization steps necessary in order to run the contract tests subsequently.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#substitute--">substitute()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#substitute-javax.lang.model.type.TypeMirror-java.util.Map-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.substitute(TypeMirror, Map)</code></a>.</div>
    +</dd>
    +</dl>
    +<a name="I:T">
    +<!--   -->
    +</a>
    +<h2 class="title">T</h2>
    +<dl>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ImmutableListTest.html#test--">test()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect">ImmutableListTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html#test--">test()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type">ExtendedTypeKindVisitor7Test</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testContains--">testContains()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#contains-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.contains(TypeMirror, TypeMirror)</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testContainsInvalidArguments--">testContainsInvalidArguments()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies that <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#contains-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.contains(TypeMirror, TypeMirror)</code></a> throws expected exceptions.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testEqualsAndHashCode--">testEqualsAndHashCode()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testErasure--">testErasure()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#erasure-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.erasure(TypeMirror)</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testErasureInvalidArguments--">testErasureInvalidArguments()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies that <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#erasure-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.erasure(TypeMirror)</code></a> throws expected exceptions.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testGetIntersectionType--">testGetIntersectionType()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testGetNoType--">testGetNoType()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testGetNullType--">testGetNullType()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testGetPrimitiveType--">testGetPrimitiveType()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#getPrimitiveType-javax.lang.model.type.TypeKind-" title="class or interface in javax.lang.model.util"><code>Types.getPrimitiveType(TypeKind)</code></a> throws expected exceptions.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testGetTypeVariable--">testGetTypeVariable()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies
    + <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#getTypeVariable-javax.lang.model.element.TypeParameterElement-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-javax.lang.model.type.WildcardType-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.getTypeVariable(TypeParameterElement, TypeMirror, TypeMirror, WildcardType)</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#testIsAssignable--">testIsAssignable()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSameType--">testIsSameType()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSameType-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSameType(TypeMirror, TypeMirror)</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSameTypeInvalidArguments--">testIsSameTypeInvalidArguments()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies that <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSameType-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSameType(TypeMirror, TypeMirror)</code></a> throws expected exceptions.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeArray--">testIsSubtypeArray()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is an array type.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeArrayTypeParameters--">testIsSubtypeArrayTypeParameters()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeIntersection--">testIsSubtypeIntersection()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is an intersection type.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeNull--">testIsSubtypeNull()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is the null type.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypePrimitive--">testIsSubtypePrimitive()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is a primitive type.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeRaw--">testIsSubtypeRaw()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is a raw type.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeSimpleTypeParameters--">testIsSubtypeSimpleTypeParameters()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeWildcards--">testIsSubtypeWildcards()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testSetTypeVariableBounds--">testSetTypeVariableBounds()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#setTypeVariableBounds-javax.lang.model.type.TypeVariable-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testSetup--">testSetup()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies the <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/TypeElement.html?is-external=true" title="class or interface in javax.lang.model.element"><code>TypeElement</code></a> instances in <a href="net/florianschoppmann/java/type/AbstractTypesContract.html#typeElementMap"><code>typeElementMap</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#testToString--">testToString()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#testToString--">testToString()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#typeElement--">typeElement()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#typeElementTest--">typeElementTest()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#typeMirror--">typeMirror()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#typeMirror--">typeMirror()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies <a href="../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#typeMirror-java.lang.reflect.Type-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.typeMirror(java.lang.reflect.Type)</code></a>.</div>
    +</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html#typeParameterElement--">typeParameterElement()</a></span> - Method in class net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></dt>
    +<dd>&nbsp;</dd>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#typeParameterElementTest--">typeParameterElementTest()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>&nbsp;</dd>
    +</dl>
    +<a name="I:U">
    +<!--   -->
    +</a>
    +<h2 class="title">U</h2>
    +<dl>
    +<dt><span class="memberNameLink"><a href="net/florianschoppmann/java/type/AbstractTypesContract.html#unboxedType--">unboxedType()</a></span> - Method in class net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></dt>
    +<dd>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#unboxedType-javax.lang.model.type.TypeMirror-" title="class or interface in javax.lang.model.util"><code>Types.unboxedType(TypeMirror)</code></a> throws expected exceptions.</div>
    +</dd>
    +</dl>
    +<a href="#I:A">A</a>&nbsp;<a href="#I:B">B</a>&nbsp;<a href="#I:C">C</a>&nbsp;<a href="#I:D">D</a>&nbsp;<a href="#I:E">E</a>&nbsp;<a href="#I:G">G</a>&nbsp;<a href="#I:I">I</a>&nbsp;<a href="#I:M">M</a>&nbsp;<a href="#I:N">N</a>&nbsp;<a href="#I:P">P</a>&nbsp;<a href="#I:R">R</a>&nbsp;<a href="#I:S">S</a>&nbsp;<a href="#I:T">T</a>&nbsp;<a href="#I:U">U</a>&nbsp;</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="overview-summary.html">Overview</a></li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li><a href="overview-tree.html">Tree</a></li>
    +<li><a href="deprecated-list.html">Deprecated</a></li>
    +<li class="navBarCell1Rev">Index</li>
    +<li><a href="help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?index-all.html" target="_top">Frames</a></li>
    +<li><a href="index-all.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/index.html b/testapidocs/index.html
    new file mode 100644
    index 0000000..41d1889
    --- /dev/null
    +++ b/testapidocs/index.html
    @@ -0,0 +1,75 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Java Types 1.0.1 Test API</title>
    +<script type="text/javascript">
    +    targetPage = "" + window.location.search;
    +    if (targetPage != "" && targetPage != "undefined")
    +        targetPage = targetPage.substring(1);
    +    if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
    +        targetPage = "undefined";
    +    function validURL(url) {
    +        try {
    +            url = decodeURIComponent(url);
    +        }
    +        catch (error) {
    +            return false;
    +        }
    +        var pos = url.indexOf(".html");
    +        if (pos == -1 || pos != url.length - 5)
    +            return false;
    +        var allowNumber = false;
    +        var allowSep = false;
    +        var seenDot = false;
    +        for (var i = 0; i < url.length - 5; i++) {
    +            var ch = url.charAt(i);
    +            if ('a' <= ch && ch <= 'z' ||
    +                    'A' <= ch && ch <= 'Z' ||
    +                    ch == '$' ||
    +                    ch == '_' ||
    +                    ch.charCodeAt(0) > 127) {
    +                allowNumber = true;
    +                allowSep = true;
    +            } else if ('0' <= ch && ch <= '9'
    +                    || ch == '-') {
    +                if (!allowNumber)
    +                     return false;
    +            } else if (ch == '/' || ch == '.') {
    +                if (!allowSep)
    +                    return false;
    +                allowNumber = false;
    +                allowSep = false;
    +                if (ch == '.')
    +                     seenDot = true;
    +                if (ch == '/' && seenDot)
    +                     return false;
    +            } else {
    +                return false;
    +            }
    +        }
    +        return true;
    +    }
    +    function loadFrames() {
    +        if (targetPage != "" && targetPage != "undefined")
    +             top.classFrame.location = top.targetPage;
    +    }
    +</script>
    +</head>
    +<frameset cols="20%,80%" title="Documentation frame" onload="top.loadFrames()">
    +<frameset rows="30%,70%" title="Left frames" onload="top.loadFrames()">
    +<frame src="overview-frame.html" name="packageListFrame" title="All Packages">
    +<frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
    +</frameset>
    +<frame src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
    +<noframes>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<h2>Frame Alert</h2>
    +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p>
    +</noframes>
    +</frameset>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/reflect/ImmutableListTest.html b/testapidocs/net/florianschoppmann/java/reflect/ImmutableListTest.html
    new file mode 100644
    index 0000000..022b5ff
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/reflect/ImmutableListTest.html
    @@ -0,0 +1,274 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>ImmutableListTest (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="ImmutableListTest (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +var methods = {"i0":10};
    +var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
    +var altColor = "altColor";
    +var rowColor = "rowColor";
    +var tableTab = "tableTab";
    +var activeTableTab = "activeTableTab";
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li class="navBarCell1Rev">Class</li>
    +<li><a href="class-use/ImmutableListTest.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev&nbsp;Class</li>
    +<li><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/reflect/ImmutableListTest.html" target="_top">Frames</a></li>
    +<li><a href="ImmutableListTest.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<div>
    +<ul class="subNavList">
    +<li>Summary:&nbsp;</li>
    +<li>Nested&nbsp;|&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.summary">Method</a></li>
    +</ul>
    +<ul class="subNavList">
    +<li>Detail:&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.detail">Method</a></li>
    +</ul>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<!-- ======== START OF CLASS DATA ======== -->
    +<div class="header">
    +<div class="subTitle">net.florianschoppmann.java.reflect</div>
    +<h2 title="Class ImmutableListTest" class="title">Class ImmutableListTest</h2>
    +</div>
    +<div class="contentContainer">
    +<ul class="inheritance">
    +<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
    +<li>
    +<ul class="inheritance">
    +<li>net.florianschoppmann.java.reflect.ImmutableListTest</li>
    +</ul>
    +</li>
    +</ul>
    +<div class="description">
    +<ul class="blockList">
    +<li class="blockList">
    +<hr>
    +<br>
    +<pre>public class <span class="typeNameLabel">ImmutableListTest</span>
    +extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
    +<div class="block">Unit tests for <a href="../../../../../apidocs/net/florianschoppmann/java/reflect/ImmutableList.html?is-external=true" title="class or interface in net.florianschoppmann.java.reflect"><code>ImmutableList</code></a>.</div>
    +</li>
    +</ul>
    +</div>
    +<div class="summary">
    +<ul class="blockList">
    +<li class="blockList">
    +<!-- ======== CONSTRUCTOR SUMMARY ======== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="constructor.summary">
    +<!--   -->
    +</a>
    +<h3>Constructor Summary</h3>
    +<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
    +<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colOne" scope="col">Constructor and Description</th>
    +</tr>
    +<tr class="altColor">
    +<td class="colOne"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ImmutableListTest.html#ImmutableListTest--">ImmutableListTest</a></span>()</code>&nbsp;</td>
    +</tr>
    +</table>
    +</li>
    +</ul>
    +<!-- ========== METHOD SUMMARY =========== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="method.summary">
    +<!--   -->
    +</a>
    +<h3>Method Summary</h3>
    +<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
    +<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
    +<tr>
    +<th class="colFirst" scope="col">Modifier and Type</th>
    +<th class="colLast" scope="col">Method and Description</th>
    +</tr>
    +<tr id="i0" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ImmutableListTest.html#test--">test</a></span>()</code>&nbsp;</td>
    +</tr>
    +</table>
    +<ul class="blockList">
    +<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
    +<!--   -->
    +</a>
    +<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
    +<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
    +</ul>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +<div class="details">
    +<ul class="blockList">
    +<li class="blockList">
    +<!-- ========= CONSTRUCTOR DETAIL ======== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="constructor.detail">
    +<!--   -->
    +</a>
    +<h3>Constructor Detail</h3>
    +<a name="ImmutableListTest--">
    +<!--   -->
    +</a>
    +<ul class="blockListLast">
    +<li class="blockList">
    +<h4>ImmutableListTest</h4>
    +<pre>public&nbsp;ImmutableListTest()</pre>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +<!-- ============ METHOD DETAIL ========== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="method.detail">
    +<!--   -->
    +</a>
    +<h3>Method Detail</h3>
    +<a name="test--">
    +<!--   -->
    +</a>
    +<ul class="blockListLast">
    +<li class="blockList">
    +<h4>test</h4>
    +<pre>public&nbsp;void&nbsp;test()</pre>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +</div>
    +<!-- ========= END OF CLASS DATA ========= -->
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li class="navBarCell1Rev">Class</li>
    +<li><a href="class-use/ImmutableListTest.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev&nbsp;Class</li>
    +<li><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/reflect/ImmutableListTest.html" target="_top">Frames</a></li>
    +<li><a href="ImmutableListTest.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<div>
    +<ul class="subNavList">
    +<li>Summary:&nbsp;</li>
    +<li>Nested&nbsp;|&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.summary">Method</a></li>
    +</ul>
    +<ul class="subNavList">
    +<li>Detail:&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.detail">Method</a></li>
    +</ul>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/reflect/ReflectionTypesTest.html b/testapidocs/net/florianschoppmann/java/reflect/ReflectionTypesTest.html
    new file mode 100644
    index 0000000..cd97cca
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/reflect/ReflectionTypesTest.html
    @@ -0,0 +1,437 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>ReflectionTypesTest (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="ReflectionTypesTest (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10};
    +var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
    +var altColor = "altColor";
    +var rowColor = "rowColor";
    +var tableTab = "tableTab";
    +var activeTableTab = "activeTableTab";
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li class="navBarCell1Rev">Class</li>
    +<li><a href="class-use/ReflectionTypesTest.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li><a href="../../../../net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
    +<li>Next&nbsp;Class</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/reflect/ReflectionTypesTest.html" target="_top">Frames</a></li>
    +<li><a href="ReflectionTypesTest.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<div>
    +<ul class="subNavList">
    +<li>Summary:&nbsp;</li>
    +<li>Nested&nbsp;|&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.summary">Method</a></li>
    +</ul>
    +<ul class="subNavList">
    +<li>Detail:&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.detail">Method</a></li>
    +</ul>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<!-- ======== START OF CLASS DATA ======== -->
    +<div class="header">
    +<div class="subTitle">net.florianschoppmann.java.reflect</div>
    +<h2 title="Class ReflectionTypesTest" class="title">Class ReflectionTypesTest</h2>
    +</div>
    +<div class="contentContainer">
    +<ul class="inheritance">
    +<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
    +<li>
    +<ul class="inheritance">
    +<li>net.florianschoppmann.java.reflect.ReflectionTypesTest</li>
    +</ul>
    +</li>
    +</ul>
    +<div class="description">
    +<ul class="blockList">
    +<li class="blockList">
    +<hr>
    +<br>
    +<pre>public final class <span class="typeNameLabel">ReflectionTypesTest</span>
    +extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
    +<div class="block">Unit tests for <a href="../../../../../apidocs/net/florianschoppmann/java/reflect/ReflectionTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.reflect"><code>ReflectionTypes</code></a>.</div>
    +</li>
    +</ul>
    +</div>
    +<div class="summary">
    +<ul class="blockList">
    +<li class="blockList">
    +<!-- ======== CONSTRUCTOR SUMMARY ======== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="constructor.summary">
    +<!--   -->
    +</a>
    +<h3>Constructor Summary</h3>
    +<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
    +<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colOne" scope="col">Constructor and Description</th>
    +</tr>
    +<tr class="altColor">
    +<td class="colOne"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#ReflectionTypesTest--">ReflectionTypesTest</a></span>()</code>&nbsp;</td>
    +</tr>
    +</table>
    +</li>
    +</ul>
    +<!-- ========== METHOD SUMMARY =========== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="method.summary">
    +<!--   -->
    +</a>
    +<h3>Method Summary</h3>
    +<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
    +<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
    +<tr>
    +<th class="colFirst" scope="col">Modifier and Type</th>
    +<th class="colLast" scope="col">Method and Description</th>
    +</tr>
    +<tr id="i0" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#asMemberOf--">asMemberOf</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i1" class="rowColor">
    +<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#createTests--">createTests</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i2" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#directSupertypes--">directSupertypes</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i3" class="rowColor">
    +<td class="colFirst"><code>&lt;T extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Number.html?is-external=true" title="class or interface in java.lang">Number</a>&gt;<br>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#methodWithTypeParameter-T-">methodWithTypeParameter</a></span>(T&nbsp;argument)</code>&nbsp;</td>
    +</tr>
    +<tr id="i4" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#requireCondition--">requireCondition</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i5" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#requireValidElement--">requireValidElement</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i6" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#requireValidType--">requireValidType</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i7" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#setup--">setup</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i8" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#testIsAssignable--">testIsAssignable</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i9" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#testToString--">testToString</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i10" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#typeElement--">typeElement</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i11" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#typeMirror--">typeMirror</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i12" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html#typeParameterElement--">typeParameterElement</a></span>()</code>&nbsp;</td>
    +</tr>
    +</table>
    +<ul class="blockList">
    +<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
    +<!--   -->
    +</a>
    +<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
    +<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
    +</ul>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +<div class="details">
    +<ul class="blockList">
    +<li class="blockList">
    +<!-- ========= CONSTRUCTOR DETAIL ======== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="constructor.detail">
    +<!--   -->
    +</a>
    +<h3>Constructor Detail</h3>
    +<a name="ReflectionTypesTest--">
    +<!--   -->
    +</a>
    +<ul class="blockListLast">
    +<li class="blockList">
    +<h4>ReflectionTypesTest</h4>
    +<pre>public&nbsp;ReflectionTypesTest()</pre>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +<!-- ============ METHOD DETAIL ========== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="method.detail">
    +<!--   -->
    +</a>
    +<h3>Method Detail</h3>
    +<a name="setup--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>setup</h4>
    +<pre>public&nbsp;void&nbsp;setup()</pre>
    +</li>
    +</ul>
    +<a name="createTests--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>createTests</h4>
    +<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;createTests()</pre>
    +</li>
    +</ul>
    +<a name="requireValidElement--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>requireValidElement</h4>
    +<pre>public&nbsp;void&nbsp;requireValidElement()</pre>
    +</li>
    +</ul>
    +<a name="requireValidType--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>requireValidType</h4>
    +<pre>public&nbsp;void&nbsp;requireValidType()</pre>
    +</li>
    +</ul>
    +<a name="typeElement--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>typeElement</h4>
    +<pre>public&nbsp;void&nbsp;typeElement()</pre>
    +</li>
    +</ul>
    +<a name="typeParameterElement--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>typeParameterElement</h4>
    +<pre>public&nbsp;void&nbsp;typeParameterElement()</pre>
    +</li>
    +</ul>
    +<a name="methodWithTypeParameter-java.lang.Number-">
    +<!--   -->
    +</a><a name="methodWithTypeParameter-T-">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>methodWithTypeParameter</h4>
    +<pre>public&nbsp;&lt;T extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Number.html?is-external=true" title="class or interface in java.lang">Number</a>&gt;&nbsp;void&nbsp;methodWithTypeParameter(T&nbsp;argument)</pre>
    +</li>
    +</ul>
    +<a name="typeMirror--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>typeMirror</h4>
    +<pre>public&nbsp;void&nbsp;typeMirror()
    +                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NoSuchMethodException.html?is-external=true" title="class or interface in java.lang">NoSuchMethodException</a></pre>
    +<dl>
    +<dt><span class="throwsLabel">Throws:</span></dt>
    +<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NoSuchMethodException.html?is-external=true" title="class or interface in java.lang">NoSuchMethodException</a></code></dd>
    +</dl>
    +</li>
    +</ul>
    +<a name="testToString--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testToString</h4>
    +<pre>public&nbsp;void&nbsp;testToString()</pre>
    +</li>
    +</ul>
    +<a name="requireCondition--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>requireCondition</h4>
    +<pre>public&nbsp;void&nbsp;requireCondition()</pre>
    +</li>
    +</ul>
    +<a name="testIsAssignable--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testIsAssignable</h4>
    +<pre>public&nbsp;void&nbsp;testIsAssignable()</pre>
    +</li>
    +</ul>
    +<a name="directSupertypes--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>directSupertypes</h4>
    +<pre>public&nbsp;void&nbsp;directSupertypes()</pre>
    +</li>
    +</ul>
    +<a name="asMemberOf--">
    +<!--   -->
    +</a>
    +<ul class="blockListLast">
    +<li class="blockList">
    +<h4>asMemberOf</h4>
    +<pre>public&nbsp;void&nbsp;asMemberOf()</pre>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +</div>
    +<!-- ========= END OF CLASS DATA ========= -->
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li class="navBarCell1Rev">Class</li>
    +<li><a href="class-use/ReflectionTypesTest.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li><a href="../../../../net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
    +<li>Next&nbsp;Class</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/reflect/ReflectionTypesTest.html" target="_top">Frames</a></li>
    +<li><a href="ReflectionTypesTest.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<div>
    +<ul class="subNavList">
    +<li>Summary:&nbsp;</li>
    +<li>Nested&nbsp;|&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.summary">Method</a></li>
    +</ul>
    +<ul class="subNavList">
    +<li>Detail:&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.detail">Method</a></li>
    +</ul>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/reflect/class-use/ImmutableListTest.html b/testapidocs/net/florianschoppmann/java/reflect/class-use/ImmutableListTest.html
    new file mode 100644
    index 0000000..b1e9efa
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/reflect/class-use/ImmutableListTest.html
    @@ -0,0 +1,126 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Uses of Class net.florianschoppmann.java.reflect.ImmutableListTest (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Uses of Class net.florianschoppmann.java.reflect.ImmutableListTest (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../../overview-summary.html">Overview</a></li>
    +<li><a href="../package-summary.html">Package</a></li>
    +<li><a href="../../../../../net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect">Class</a></li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="../package-tree.html">Tree</a></li>
    +<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../../index.html?net/florianschoppmann/java/reflect/class-use/ImmutableListTest.html" target="_top">Frames</a></li>
    +<li><a href="ImmutableListTest.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h2 title="Uses of Class net.florianschoppmann.java.reflect.ImmutableListTest" class="title">Uses of Class<br>net.florianschoppmann.java.reflect.ImmutableListTest</h2>
    +</div>
    +<div class="classUseContainer">No usage of net.florianschoppmann.java.reflect.ImmutableListTest</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../../overview-summary.html">Overview</a></li>
    +<li><a href="../package-summary.html">Package</a></li>
    +<li><a href="../../../../../net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect">Class</a></li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="../package-tree.html">Tree</a></li>
    +<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../../index.html?net/florianschoppmann/java/reflect/class-use/ImmutableListTest.html" target="_top">Frames</a></li>
    +<li><a href="ImmutableListTest.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/reflect/class-use/ReflectionTypesTest.html b/testapidocs/net/florianschoppmann/java/reflect/class-use/ReflectionTypesTest.html
    new file mode 100644
    index 0000000..2496e5c
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/reflect/class-use/ReflectionTypesTest.html
    @@ -0,0 +1,126 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Uses of Class net.florianschoppmann.java.reflect.ReflectionTypesTest (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Uses of Class net.florianschoppmann.java.reflect.ReflectionTypesTest (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../../overview-summary.html">Overview</a></li>
    +<li><a href="../package-summary.html">Package</a></li>
    +<li><a href="../../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">Class</a></li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="../package-tree.html">Tree</a></li>
    +<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../../index.html?net/florianschoppmann/java/reflect/class-use/ReflectionTypesTest.html" target="_top">Frames</a></li>
    +<li><a href="ReflectionTypesTest.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h2 title="Uses of Class net.florianschoppmann.java.reflect.ReflectionTypesTest" class="title">Uses of Class<br>net.florianschoppmann.java.reflect.ReflectionTypesTest</h2>
    +</div>
    +<div class="classUseContainer">No usage of net.florianschoppmann.java.reflect.ReflectionTypesTest</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../../overview-summary.html">Overview</a></li>
    +<li><a href="../package-summary.html">Package</a></li>
    +<li><a href="../../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">Class</a></li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="../package-tree.html">Tree</a></li>
    +<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../../index.html?net/florianschoppmann/java/reflect/class-use/ReflectionTypesTest.html" target="_top">Frames</a></li>
    +<li><a href="ReflectionTypesTest.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/reflect/package-frame.html b/testapidocs/net/florianschoppmann/java/reflect/package-frame.html
    new file mode 100644
    index 0000000..81f1338
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/reflect/package-frame.html
    @@ -0,0 +1,22 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>net.florianschoppmann.java.reflect (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<h1 class="bar"><a href="../../../../net/florianschoppmann/java/reflect/package-summary.html" target="classFrame">net.florianschoppmann.java.reflect</a></h1>
    +<div class="indexContainer">
    +<h2 title="Classes">Classes</h2>
    +<ul title="Classes">
    +<li><a href="ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect" target="classFrame">ImmutableListTest</a></li>
    +<li><a href="ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect" target="classFrame">ReflectionTypesTest</a></li>
    +</ul>
    +</div>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/reflect/package-summary.html b/testapidocs/net/florianschoppmann/java/reflect/package-summary.html
    new file mode 100644
    index 0000000..c8efe94
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/reflect/package-summary.html
    @@ -0,0 +1,152 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>net.florianschoppmann.java.reflect (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="net.florianschoppmann.java.reflect (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li class="navBarCell1Rev">Package</li>
    +<li>Class</li>
    +<li><a href="package-use.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev&nbsp;Package</li>
    +<li><a href="../../../../net/florianschoppmann/java/type/package-summary.html">Next&nbsp;Package</a></li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/reflect/package-summary.html" target="_top">Frames</a></li>
    +<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h1 title="Package" class="title">Package&nbsp;net.florianschoppmann.java.reflect</h1>
    +</div>
    +<div class="contentContainer">
    +<ul class="blockList">
    +<li class="blockList">
    +<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
    +<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colFirst" scope="col">Class</th>
    +<th class="colLast" scope="col">Description</th>
    +</tr>
    +<tbody>
    +<tr class="altColor">
    +<td class="colFirst"><a href="../../../../net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect">ImmutableListTest</a></td>
    +<td class="colLast">
    +<div class="block">Unit tests for <a href="../../../../../apidocs/net/florianschoppmann/java/reflect/ImmutableList.html?is-external=true" title="class or interface in net.florianschoppmann.java.reflect"><code>ImmutableList</code></a>.</div>
    +</td>
    +</tr>
    +<tr class="rowColor">
    +<td class="colFirst"><a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect">ReflectionTypesTest</a></td>
    +<td class="colLast">
    +<div class="block">Unit tests for <a href="../../../../../apidocs/net/florianschoppmann/java/reflect/ReflectionTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.reflect"><code>ReflectionTypes</code></a>.</div>
    +</td>
    +</tr>
    +</tbody>
    +</table>
    +</li>
    +</ul>
    +</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li class="navBarCell1Rev">Package</li>
    +<li>Class</li>
    +<li><a href="package-use.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev&nbsp;Package</li>
    +<li><a href="../../../../net/florianschoppmann/java/type/package-summary.html">Next&nbsp;Package</a></li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/reflect/package-summary.html" target="_top">Frames</a></li>
    +<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/reflect/package-tree.html b/testapidocs/net/florianschoppmann/java/reflect/package-tree.html
    new file mode 100644
    index 0000000..2c461d3
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/reflect/package-tree.html
    @@ -0,0 +1,140 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>net.florianschoppmann.java.reflect Class Hierarchy (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="net.florianschoppmann.java.reflect Class Hierarchy (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li>Class</li>
    +<li>Use</li>
    +<li class="navBarCell1Rev">Tree</li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li><a href="../../../../net/florianschoppmann/java/type/package-tree.html">Next</a></li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/reflect/package-tree.html" target="_top">Frames</a></li>
    +<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h1 class="title">Hierarchy For Package net.florianschoppmann.java.reflect</h1>
    +<span class="packageHierarchyLabel">Package Hierarchies:</span>
    +<ul class="horizontal">
    +<li><a href="../../../../overview-tree.html">All Packages</a></li>
    +</ul>
    +</div>
    +<div class="contentContainer">
    +<h2 title="Class Hierarchy">Class Hierarchy</h2>
    +<ul>
    +<li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
    +<ul>
    +<li type="circle">net.florianschoppmann.java.reflect.<a href="../../../../net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect"><span class="typeNameLink">ImmutableListTest</span></a></li>
    +<li type="circle">net.florianschoppmann.java.reflect.<a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect"><span class="typeNameLink">ReflectionTypesTest</span></a></li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li>Class</li>
    +<li>Use</li>
    +<li class="navBarCell1Rev">Tree</li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li><a href="../../../../net/florianschoppmann/java/type/package-tree.html">Next</a></li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/reflect/package-tree.html" target="_top">Frames</a></li>
    +<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/reflect/package-use.html b/testapidocs/net/florianschoppmann/java/reflect/package-use.html
    new file mode 100644
    index 0000000..8c60ee4
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/reflect/package-use.html
    @@ -0,0 +1,126 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Uses of Package net.florianschoppmann.java.reflect (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Uses of Package net.florianschoppmann.java.reflect (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li>Class</li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/reflect/package-use.html" target="_top">Frames</a></li>
    +<li><a href="package-use.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h1 title="Uses of Package net.florianschoppmann.java.reflect" class="title">Uses of Package<br>net.florianschoppmann.java.reflect</h1>
    +</div>
    +<div class="contentContainer">No usage of net.florianschoppmann.java.reflect</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li>Class</li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/reflect/package-use.html" target="_top">Frames</a></li>
    +<li><a href="package-use.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/type/AbstractTypesContract.html b/testapidocs/net/florianschoppmann/java/type/AbstractTypesContract.html
    new file mode 100644
    index 0000000..a2bb4f7
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/type/AbstractTypesContract.html
    @@ -0,0 +1,990 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>AbstractTypesContract (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="AbstractTypesContract (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10};
    +var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
    +var altColor = "altColor";
    +var rowColor = "rowColor";
    +var tableTab = "tableTab";
    +var activeTableTab = "activeTableTab";
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li class="navBarCell1Rev">Class</li>
    +<li><a href="class-use/AbstractTypesContract.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev&nbsp;Class</li>
    +<li><a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/AbstractTypesContract.html" target="_top">Frames</a></li>
    +<li><a href="AbstractTypesContract.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<div>
    +<ul class="subNavList">
    +<li>Summary:&nbsp;</li>
    +<li>Nested&nbsp;|&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.summary">Method</a></li>
    +</ul>
    +<ul class="subNavList">
    +<li>Detail:&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.detail">Method</a></li>
    +</ul>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<!-- ======== START OF CLASS DATA ======== -->
    +<div class="header">
    +<div class="subTitle">net.florianschoppmann.java.type</div>
    +<h2 title="Class AbstractTypesContract" class="title">Class AbstractTypesContract</h2>
    +</div>
    +<div class="contentContainer">
    +<ul class="inheritance">
    +<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
    +<li>
    +<ul class="inheritance">
    +<li>net.florianschoppmann.java.type.AbstractTypesContract</li>
    +</ul>
    +</li>
    +</ul>
    +<div class="description">
    +<ul class="blockList">
    +<li class="blockList">
    +<dl>
    +<dt>All Implemented Interfaces:</dt>
    +<dd>org.testng.ITest</dd>
    +</dl>
    +<hr>
    +<br>
    +<pre>public final class <span class="typeNameLabel">AbstractTypesContract</span>
    +extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
    +implements org.testng.ITest</pre>
    +<div class="block">Contract test for <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a>.
    +
    + <p>This class should be instantiated and returned by a TestNG factory method (that is, a method annotated with
    + <code>Factory</code>).</div>
    +</li>
    +</ul>
    +</div>
    +<div class="summary">
    +<ul class="blockList">
    +<li class="blockList">
    +<!-- ======== CONSTRUCTOR SUMMARY ======== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="constructor.summary">
    +<!--   -->
    +</a>
    +<h3>Constructor Summary</h3>
    +<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
    +<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colOne" scope="col">Constructor and Description</th>
    +</tr>
    +<tr class="altColor">
    +<td class="colOne"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#AbstractTypesContract-net.florianschoppmann.java.type.AbstractTypesProvider-">AbstractTypesContract</a></span>(<a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type">AbstractTypesProvider</a>&nbsp;provider)</code>
    +<div class="block">Constructs a new contract-test instance with the given provider.</div>
    +</td>
    +</tr>
    +</table>
    +</li>
    +</ul>
    +<!-- ========== METHOD SUMMARY =========== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="method.summary">
    +<!--   -->
    +</a>
    +<h3>Method Summary</h3>
    +<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
    +<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
    +<tr>
    +<th class="colFirst" scope="col">Modifier and Type</th>
    +<th class="colLast" scope="col">Method and Description</th>
    +</tr>
    +<tr id="i0" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#asElement--">asElement</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#asElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.asElement(TypeMirror)</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i1" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#asElementInvalidArguments--">asElementInvalidArguments</a></span>()</code>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#asElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.asElement(TypeMirror)</code></a> throws expected exceptions.</div>
    +</td>
    +</tr>
    +<tr id="i2" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#asType--">asType</a></span>()</code>
    +<div class="block">Verifies <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/Element.html?is-external=true#asType--" title="class or interface in javax.lang.model.element"><code>Element.asType()</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i3" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#boxedClass--">boxedClass</a></span>()</code>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#boxedClass-javax.lang.model.type.PrimitiveType-" title="class or interface in javax.lang.model.util"><code>Types.boxedClass(PrimitiveType)</code></a> throws expected exceptions.</div>
    +</td>
    +</tr>
    +<tr id="i4" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#boxingAndUnboxing--">boxingAndUnboxing</a></span>()</code>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#unboxedType-javax.lang.model.type.TypeMirror-" title="class or interface in javax.lang.model.util"><code>Types.unboxedType(TypeMirror)</code></a> and <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#boxedClass-javax.lang.model.type.PrimitiveType-" title="class or interface in javax.lang.model.util"><code>Types.boxedClass(PrimitiveType)</code></a>
    + are (essentially) inverse methods of each other.</div>
    +</td>
    +</tr>
    +<tr id="i5" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#capture--">capture</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#capture-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.capture(TypeMirror)</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i6" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#captureInterdependentRecursiveBound--">captureInterdependentRecursiveBound</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i7" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#captureSingleRecursiveBound--">captureSingleRecursiveBound</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i8" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#createTypeVariable--">createTypeVariable</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#createTypeVariable-javax.lang.model.element.TypeParameterElement-javax.lang.model.type.WildcardType-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.createTypeVariable(TypeParameterElement, WildcardType)</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i9" class="rowColor">
    +<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#getTestName--">getTestName</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i10" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#requireValidElement--">requireValidElement</a></span>()</code>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#requireValidElement-javax.lang.model.element.Element-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.requireValidElement(javax.lang.model.element.Element)</code></a> throws a
    + <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><code>NullPointerException</code></a> if passed null.</div>
    +</td>
    +</tr>
    +<tr id="i11" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#requireValidType--">requireValidType</a></span>()</code>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#requireValidType-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.requireValidType(TypeMirror)</code></a> does not throw an
    + exception if passed null.</div>
    +</td>
    +</tr>
    +<tr id="i12" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#requireValidTypes--">requireValidTypes</a></span>()</code>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#requireValidTypes-javax.lang.model.type.TypeMirror:A-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.requireValidTypes(TypeMirror[])</code></a> throws exceptions if
    + passed null or an array with null element.</div>
    +</td>
    +</tr>
    +<tr id="i13" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#resolveActualTypeArguments--">resolveActualTypeArguments</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#resolveActualTypeArguments-javax.lang.model.element.TypeElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.resolveActualTypeArguments(TypeElement, TypeMirror)</code></a> when the second argument is
    + a generic type, a non-generic type, or a primitive type.</div>
    +</td>
    +</tr>
    +<tr id="i14" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#resolveActualTypeArgumentsArrays--">resolveActualTypeArgumentsArrays</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#resolveActualTypeArguments-javax.lang.model.element.TypeElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.resolveActualTypeArguments(TypeElement, TypeMirror)</code></a> if the second argument
    + contains an actual type argument that is an array type.</div>
    +</td>
    +</tr>
    +<tr id="i15" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#resolveActualTypeArgumentsRaw--">resolveActualTypeArgumentsRaw</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#resolveActualTypeArguments-javax.lang.model.element.TypeElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.resolveActualTypeArguments(TypeElement, TypeMirror)</code></a> if the second argument is a
    + raw type.</div>
    +</td>
    +</tr>
    +<tr id="i16" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#setup--">setup</a></span>()</code>
    +<div class="block">Performs initialization steps necessary in order to run the contract tests subsequently.</div>
    +</td>
    +</tr>
    +<tr id="i17" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#substitute--">substitute</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#substitute-javax.lang.model.type.TypeMirror-java.util.Map-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.substitute(TypeMirror, Map)</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i18" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testContains--">testContains</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#contains-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.contains(TypeMirror, TypeMirror)</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i19" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testContainsInvalidArguments--">testContainsInvalidArguments</a></span>()</code>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#contains-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.contains(TypeMirror, TypeMirror)</code></a> throws expected exceptions.</div>
    +</td>
    +</tr>
    +<tr id="i20" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testEqualsAndHashCode--">testEqualsAndHashCode</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i21" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testErasure--">testErasure</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#erasure-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.erasure(TypeMirror)</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i22" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testErasureInvalidArguments--">testErasureInvalidArguments</a></span>()</code>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#erasure-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.erasure(TypeMirror)</code></a> throws expected exceptions.</div>
    +</td>
    +</tr>
    +<tr id="i23" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testGetIntersectionType--">testGetIntersectionType</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i24" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testGetNoType--">testGetNoType</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i25" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testGetNullType--">testGetNullType</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i26" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testGetPrimitiveType--">testGetPrimitiveType</a></span>()</code>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#getPrimitiveType-javax.lang.model.type.TypeKind-" title="class or interface in javax.lang.model.util"><code>Types.getPrimitiveType(TypeKind)</code></a> throws expected exceptions.</div>
    +</td>
    +</tr>
    +<tr id="i27" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testGetTypeVariable--">testGetTypeVariable</a></span>()</code>
    +<div class="block">Verifies
    + <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#getTypeVariable-javax.lang.model.element.TypeParameterElement-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-javax.lang.model.type.WildcardType-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.getTypeVariable(TypeParameterElement, TypeMirror, TypeMirror, WildcardType)</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i28" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSameType--">testIsSameType</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSameType-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSameType(TypeMirror, TypeMirror)</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i29" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSameTypeInvalidArguments--">testIsSameTypeInvalidArguments</a></span>()</code>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSameType-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSameType(TypeMirror, TypeMirror)</code></a> throws expected exceptions.</div>
    +</td>
    +</tr>
    +<tr id="i30" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeArray--">testIsSubtypeArray</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is an array type.</div>
    +</td>
    +</tr>
    +<tr id="i31" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeArrayTypeParameters--">testIsSubtypeArrayTypeParameters</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i32" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeIntersection--">testIsSubtypeIntersection</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is an intersection type.</div>
    +</td>
    +</tr>
    +<tr id="i33" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeNull--">testIsSubtypeNull</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is the null type.</div>
    +</td>
    +</tr>
    +<tr id="i34" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypePrimitive--">testIsSubtypePrimitive</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is a primitive type.</div>
    +</td>
    +</tr>
    +<tr id="i35" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeRaw--">testIsSubtypeRaw</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is a raw type.</div>
    +</td>
    +</tr>
    +<tr id="i36" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeSimpleTypeParameters--">testIsSubtypeSimpleTypeParameters</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i37" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testIsSubtypeWildcards--">testIsSubtypeWildcards</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i38" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testSetTypeVariableBounds--">testSetTypeVariableBounds</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#setTypeVariableBounds-javax.lang.model.type.TypeVariable-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i39" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testSetup--">testSetup</a></span>()</code>
    +<div class="block">Verifies the <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/TypeElement.html?is-external=true" title="class or interface in javax.lang.model.element"><code>TypeElement</code></a> instances in <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#typeElementMap"><code>typeElementMap</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i40" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#testToString--">testToString</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i41" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#typeElementTest--">typeElementTest</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i42" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#typeMirror--">typeMirror</a></span>()</code>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#typeMirror-java.lang.reflect.Type-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.typeMirror(java.lang.reflect.Type)</code></a>.</div>
    +</td>
    +</tr>
    +<tr id="i43" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#typeParameterElementTest--">typeParameterElementTest</a></span>()</code>&nbsp;</td>
    +</tr>
    +<tr id="i44" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#unboxedType--">unboxedType</a></span>()</code>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#unboxedType-javax.lang.model.type.TypeMirror-" title="class or interface in javax.lang.model.util"><code>Types.unboxedType(TypeMirror)</code></a> throws expected exceptions.</div>
    +</td>
    +</tr>
    +</table>
    +<ul class="blockList">
    +<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
    +<!--   -->
    +</a>
    +<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
    +<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
    +</ul>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +<div class="details">
    +<ul class="blockList">
    +<li class="blockList">
    +<!-- ========= CONSTRUCTOR DETAIL ======== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="constructor.detail">
    +<!--   -->
    +</a>
    +<h3>Constructor Detail</h3>
    +<a name="AbstractTypesContract-net.florianschoppmann.java.type.AbstractTypesProvider-">
    +<!--   -->
    +</a>
    +<ul class="blockListLast">
    +<li class="blockList">
    +<h4>AbstractTypesContract</h4>
    +<pre>public&nbsp;AbstractTypesContract(<a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type">AbstractTypesProvider</a>&nbsp;provider)</pre>
    +<div class="block">Constructs a new contract-test instance with the given provider.</div>
    +<dl>
    +<dt><span class="paramLabel">Parameters:</span></dt>
    +<dd><code>provider</code> - provider of <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a> instance, must not be null</dd>
    +<dt><span class="throwsLabel">Throws:</span></dt>
    +<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd>
    +</dl>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +<!-- ============ METHOD DETAIL ========== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="method.detail">
    +<!--   -->
    +</a>
    +<h3>Method Detail</h3>
    +<a name="getTestName--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>getTestName</h4>
    +<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;getTestName()</pre>
    +<dl>
    +<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
    +<dd><code>getTestName</code>&nbsp;in interface&nbsp;<code>org.testng.ITest</code></dd>
    +</dl>
    +</li>
    +</ul>
    +<a name="setup--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>setup</h4>
    +<pre>public&nbsp;void&nbsp;setup()</pre>
    +<div class="block">Performs initialization steps necessary in order to run the contract tests subsequently.</div>
    +</li>
    +</ul>
    +<a name="testSetup--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testSetup</h4>
    +<pre>public&nbsp;void&nbsp;testSetup()</pre>
    +<div class="block">Verifies the <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/TypeElement.html?is-external=true" title="class or interface in javax.lang.model.element"><code>TypeElement</code></a> instances in <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#typeElementMap"><code>typeElementMap</code></a>.
    +
    + <p>The following is verified:
    + <ul><li>
    +     <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/Element.html?is-external=true#asType--" title="class or interface in javax.lang.model.element"><code>Element.asType()</code></a> returns "a <i>prototypical</i> type" which is "the element's invocation on the
    +     type variables corresponding to its own formal type parameters".
    + </li><li>
    +     <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#type-java.lang.Class-"><code>type(Class)</code></a> returns a raw type if the given class object represents a generic type declaration.
    + </li><li>
    +     Passing the raw type returned by <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#type-java.lang.Class-"><code>type(Class)</code></a> to
    +     <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#toString-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.toString(TypeMirror)</code></a> yields a string equal to the class's name.
    + </li></ul></div>
    +</li>
    +</ul>
    +<a name="requireValidElement--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>requireValidElement</h4>
    +<pre>public&nbsp;void&nbsp;requireValidElement()</pre>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#requireValidElement-javax.lang.model.element.Element-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.requireValidElement(javax.lang.model.element.Element)</code></a> throws a
    + <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><code>NullPointerException</code></a> if passed null.</div>
    +</li>
    +</ul>
    +<a name="requireValidType--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>requireValidType</h4>
    +<pre>public&nbsp;void&nbsp;requireValidType()</pre>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#requireValidType-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.requireValidType(TypeMirror)</code></a> does not throw an
    + exception if passed null.</div>
    +</li>
    +</ul>
    +<a name="requireValidTypes--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>requireValidTypes</h4>
    +<pre>public&nbsp;void&nbsp;requireValidTypes()</pre>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#requireValidTypes-javax.lang.model.type.TypeMirror:A-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.requireValidTypes(TypeMirror[])</code></a> throws exceptions if
    + passed null or an array with null element.</div>
    +</li>
    +</ul>
    +<a name="typeMirror--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>typeMirror</h4>
    +<pre>public&nbsp;void&nbsp;typeMirror()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#typeMirror-java.lang.reflect.Type-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.typeMirror(java.lang.reflect.Type)</code></a>.</div>
    +</li>
    +</ul>
    +<a name="substitute--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>substitute</h4>
    +<pre>public&nbsp;void&nbsp;substitute()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#substitute-javax.lang.model.type.TypeMirror-java.util.Map-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.substitute(TypeMirror, Map)</code></a>.</div>
    +</li>
    +</ul>
    +<a name="resolveActualTypeArguments--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>resolveActualTypeArguments</h4>
    +<pre>public&nbsp;void&nbsp;resolveActualTypeArguments()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#resolveActualTypeArguments-javax.lang.model.element.TypeElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.resolveActualTypeArguments(TypeElement, TypeMirror)</code></a> when the second argument is
    + a generic type, a non-generic type, or a primitive type.</div>
    +</li>
    +</ul>
    +<a name="resolveActualTypeArgumentsRaw--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>resolveActualTypeArgumentsRaw</h4>
    +<pre>public&nbsp;void&nbsp;resolveActualTypeArgumentsRaw()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#resolveActualTypeArguments-javax.lang.model.element.TypeElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.resolveActualTypeArguments(TypeElement, TypeMirror)</code></a> if the second argument is a
    + raw type.</div>
    +</li>
    +</ul>
    +<a name="resolveActualTypeArgumentsArrays--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>resolveActualTypeArgumentsArrays</h4>
    +<pre>public&nbsp;void&nbsp;resolveActualTypeArgumentsArrays()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#resolveActualTypeArguments-javax.lang.model.element.TypeElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.resolveActualTypeArguments(TypeElement, TypeMirror)</code></a> if the second argument
    + contains an actual type argument that is an array type.</div>
    +</li>
    +</ul>
    +<a name="testIsSubtypePrimitive--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testIsSubtypePrimitive</h4>
    +<pre>public&nbsp;void&nbsp;testIsSubtypePrimitive()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is a primitive type.</div>
    +</li>
    +</ul>
    +<a name="testIsSubtypeNull--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testIsSubtypeNull</h4>
    +<pre>public&nbsp;void&nbsp;testIsSubtypeNull()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is the null type.</div>
    +</li>
    +</ul>
    +<a name="testIsSubtypeArray--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testIsSubtypeArray</h4>
    +<pre>public&nbsp;void&nbsp;testIsSubtypeArray()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is an array type.</div>
    +</li>
    +</ul>
    +<a name="testIsSubtypeIntersection--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testIsSubtypeIntersection</h4>
    +<pre>public&nbsp;void&nbsp;testIsSubtypeIntersection()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is an intersection type.</div>
    +</li>
    +</ul>
    +<a name="testIsSubtypeRaw--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testIsSubtypeRaw</h4>
    +<pre>public&nbsp;void&nbsp;testIsSubtypeRaw()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSubtype-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSubtype(TypeMirror, TypeMirror)</code></a> if one of the types is a raw type.</div>
    +</li>
    +</ul>
    +<a name="testIsSubtypeArrayTypeParameters--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testIsSubtypeArrayTypeParameters</h4>
    +<pre>public&nbsp;void&nbsp;testIsSubtypeArrayTypeParameters()</pre>
    +</li>
    +</ul>
    +<a name="testIsSubtypeSimpleTypeParameters--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testIsSubtypeSimpleTypeParameters</h4>
    +<pre>public&nbsp;void&nbsp;testIsSubtypeSimpleTypeParameters()</pre>
    +</li>
    +</ul>
    +<a name="testIsSubtypeWildcards--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testIsSubtypeWildcards</h4>
    +<pre>public&nbsp;void&nbsp;testIsSubtypeWildcards()</pre>
    +</li>
    +</ul>
    +<a name="capture--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>capture</h4>
    +<pre>public&nbsp;void&nbsp;capture()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#capture-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.capture(TypeMirror)</code></a>.</div>
    +</li>
    +</ul>
    +<a name="captureSingleRecursiveBound--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>captureSingleRecursiveBound</h4>
    +<pre>public&nbsp;void&nbsp;captureSingleRecursiveBound()</pre>
    +</li>
    +</ul>
    +<a name="captureInterdependentRecursiveBound--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>captureInterdependentRecursiveBound</h4>
    +<pre>public&nbsp;void&nbsp;captureInterdependentRecursiveBound()</pre>
    +</li>
    +</ul>
    +<a name="testContainsInvalidArguments--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testContainsInvalidArguments</h4>
    +<pre>public&nbsp;void&nbsp;testContainsInvalidArguments()</pre>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#contains-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.contains(TypeMirror, TypeMirror)</code></a> throws expected exceptions.</div>
    +</li>
    +</ul>
    +<a name="testContains--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testContains</h4>
    +<pre>public&nbsp;void&nbsp;testContains()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#contains-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.contains(TypeMirror, TypeMirror)</code></a>.</div>
    +</li>
    +</ul>
    +<a name="testErasureInvalidArguments--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testErasureInvalidArguments</h4>
    +<pre>public&nbsp;void&nbsp;testErasureInvalidArguments()</pre>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#erasure-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.erasure(TypeMirror)</code></a> throws expected exceptions.</div>
    +</li>
    +</ul>
    +<a name="testErasure--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testErasure</h4>
    +<pre>public&nbsp;void&nbsp;testErasure()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#erasure-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.erasure(TypeMirror)</code></a>.</div>
    +</li>
    +</ul>
    +<a name="asElementInvalidArguments--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>asElementInvalidArguments</h4>
    +<pre>public&nbsp;void&nbsp;asElementInvalidArguments()</pre>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#asElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.asElement(TypeMirror)</code></a> throws expected exceptions.</div>
    +</li>
    +</ul>
    +<a name="asElement--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>asElement</h4>
    +<pre>public&nbsp;void&nbsp;asElement()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#asElement-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.asElement(TypeMirror)</code></a>.</div>
    +</li>
    +</ul>
    +<a name="asType--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>asType</h4>
    +<pre>public&nbsp;void&nbsp;asType()</pre>
    +<div class="block">Verifies <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/Element.html?is-external=true#asType--" title="class or interface in javax.lang.model.element"><code>Element.asType()</code></a>.</div>
    +</li>
    +</ul>
    +<a name="testIsSameTypeInvalidArguments--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testIsSameTypeInvalidArguments</h4>
    +<pre>public&nbsp;void&nbsp;testIsSameTypeInvalidArguments()</pre>
    +<div class="block">Verifies that <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSameType-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSameType(TypeMirror, TypeMirror)</code></a> throws expected exceptions.</div>
    +</li>
    +</ul>
    +<a name="testIsSameType--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testIsSameType</h4>
    +<pre>public&nbsp;void&nbsp;testIsSameType()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#isSameType-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.isSameType(TypeMirror, TypeMirror)</code></a>.</div>
    +</li>
    +</ul>
    +<a name="testGetTypeVariable--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testGetTypeVariable</h4>
    +<pre>public&nbsp;void&nbsp;testGetTypeVariable()</pre>
    +<div class="block">Verifies
    + <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#getTypeVariable-javax.lang.model.element.TypeParameterElement-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-javax.lang.model.type.WildcardType-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.getTypeVariable(TypeParameterElement, TypeMirror, TypeMirror, WildcardType)</code></a>.</div>
    +</li>
    +</ul>
    +<a name="createTypeVariable--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>createTypeVariable</h4>
    +<pre>public&nbsp;void&nbsp;createTypeVariable()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#createTypeVariable-javax.lang.model.element.TypeParameterElement-javax.lang.model.type.WildcardType-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.createTypeVariable(TypeParameterElement, WildcardType)</code></a>.</div>
    +</li>
    +</ul>
    +<a name="testSetTypeVariableBounds--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testSetTypeVariableBounds</h4>
    +<pre>public&nbsp;void&nbsp;testSetTypeVariableBounds()</pre>
    +<div class="block">Verifies <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true#setTypeVariableBounds-javax.lang.model.type.TypeVariable-javax.lang.model.type.TypeMirror-javax.lang.model.type.TypeMirror-" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes.setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)</code></a>.</div>
    +</li>
    +</ul>
    +<a name="testGetIntersectionType--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testGetIntersectionType</h4>
    +<pre>public&nbsp;void&nbsp;testGetIntersectionType()</pre>
    +</li>
    +</ul>
    +<a name="testToString--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testToString</h4>
    +<pre>public&nbsp;void&nbsp;testToString()</pre>
    +</li>
    +</ul>
    +<a name="unboxedType--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>unboxedType</h4>
    +<pre>public&nbsp;void&nbsp;unboxedType()</pre>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#unboxedType-javax.lang.model.type.TypeMirror-" title="class or interface in javax.lang.model.util"><code>Types.unboxedType(TypeMirror)</code></a> throws expected exceptions.</div>
    +</li>
    +</ul>
    +<a name="boxedClass--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>boxedClass</h4>
    +<pre>public&nbsp;void&nbsp;boxedClass()</pre>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#boxedClass-javax.lang.model.type.PrimitiveType-" title="class or interface in javax.lang.model.util"><code>Types.boxedClass(PrimitiveType)</code></a> throws expected exceptions.</div>
    +</li>
    +</ul>
    +<a name="boxingAndUnboxing--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>boxingAndUnboxing</h4>
    +<pre>public&nbsp;void&nbsp;boxingAndUnboxing()</pre>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#unboxedType-javax.lang.model.type.TypeMirror-" title="class or interface in javax.lang.model.util"><code>Types.unboxedType(TypeMirror)</code></a> and <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#boxedClass-javax.lang.model.type.PrimitiveType-" title="class or interface in javax.lang.model.util"><code>Types.boxedClass(PrimitiveType)</code></a>
    + are (essentially) inverse methods of each other.</div>
    +</li>
    +</ul>
    +<a name="testGetPrimitiveType--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testGetPrimitiveType</h4>
    +<pre>public&nbsp;void&nbsp;testGetPrimitiveType()</pre>
    +<div class="block">Verifies that <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/util/Types.html?is-external=true#getPrimitiveType-javax.lang.model.type.TypeKind-" title="class or interface in javax.lang.model.util"><code>Types.getPrimitiveType(TypeKind)</code></a> throws expected exceptions.</div>
    +</li>
    +</ul>
    +<a name="testGetNoType--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testGetNoType</h4>
    +<pre>public&nbsp;void&nbsp;testGetNoType()</pre>
    +</li>
    +</ul>
    +<a name="testGetNullType--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testGetNullType</h4>
    +<pre>public&nbsp;void&nbsp;testGetNullType()</pre>
    +</li>
    +</ul>
    +<a name="testEqualsAndHashCode--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>testEqualsAndHashCode</h4>
    +<pre>public&nbsp;void&nbsp;testEqualsAndHashCode()</pre>
    +</li>
    +</ul>
    +<a name="typeElementTest--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>typeElementTest</h4>
    +<pre>public&nbsp;void&nbsp;typeElementTest()</pre>
    +</li>
    +</ul>
    +<a name="typeParameterElementTest--">
    +<!--   -->
    +</a>
    +<ul class="blockListLast">
    +<li class="blockList">
    +<h4>typeParameterElementTest</h4>
    +<pre>public&nbsp;void&nbsp;typeParameterElementTest()</pre>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +</div>
    +<!-- ========= END OF CLASS DATA ========= -->
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li class="navBarCell1Rev">Class</li>
    +<li><a href="class-use/AbstractTypesContract.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev&nbsp;Class</li>
    +<li><a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/AbstractTypesContract.html" target="_top">Frames</a></li>
    +<li><a href="AbstractTypesContract.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<div>
    +<ul class="subNavList">
    +<li>Summary:&nbsp;</li>
    +<li>Nested&nbsp;|&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.summary">Method</a></li>
    +</ul>
    +<ul class="subNavList">
    +<li>Detail:&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.detail">Method</a></li>
    +</ul>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/type/AbstractTypesProvider.html b/testapidocs/net/florianschoppmann/java/type/AbstractTypesProvider.html
    new file mode 100644
    index 0000000..63c3957
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/type/AbstractTypesProvider.html
    @@ -0,0 +1,258 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>AbstractTypesProvider (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="AbstractTypesProvider (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +var methods = {"i0":6,"i1":6};
    +var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
    +var altColor = "altColor";
    +var rowColor = "rowColor";
    +var tableTab = "tableTab";
    +var activeTableTab = "activeTableTab";
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li class="navBarCell1Rev">Class</li>
    +<li><a href="class-use/AbstractTypesProvider.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
    +<li><a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/AbstractTypesProvider.html" target="_top">Frames</a></li>
    +<li><a href="AbstractTypesProvider.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<div>
    +<ul class="subNavList">
    +<li>Summary:&nbsp;</li>
    +<li>Nested&nbsp;|&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li>Constr&nbsp;|&nbsp;</li>
    +<li><a href="#method.summary">Method</a></li>
    +</ul>
    +<ul class="subNavList">
    +<li>Detail:&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li>Constr&nbsp;|&nbsp;</li>
    +<li><a href="#method.detail">Method</a></li>
    +</ul>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<!-- ======== START OF CLASS DATA ======== -->
    +<div class="header">
    +<div class="subTitle">net.florianschoppmann.java.type</div>
    +<h2 title="Interface AbstractTypesProvider" class="title">Interface AbstractTypesProvider</h2>
    +</div>
    +<div class="contentContainer">
    +<div class="description">
    +<ul class="blockList">
    +<li class="blockList">
    +<hr>
    +<br>
    +<pre>public interface <span class="typeNameLabel">AbstractTypesProvider</span></pre>
    +<div class="block">Provider for <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a> instances in contract tests.</div>
    +</li>
    +</ul>
    +</div>
    +<div class="summary">
    +<ul class="blockList">
    +<li class="blockList">
    +<!-- ========== METHOD SUMMARY =========== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="method.summary">
    +<!--   -->
    +</a>
    +<h3>Method Summary</h3>
    +<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
    +<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
    +<tr>
    +<th class="colFirst" scope="col">Modifier and Type</th>
    +<th class="colLast" scope="col">Method and Description</th>
    +</tr>
    +<tr id="i0" class="altColor">
    +<td class="colFirst"><code><a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type">AbstractTypes</a></code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html#getTypes-java.util.Map-">getTypes</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;,<a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/TypeElement.html?is-external=true" title="class or interface in javax.lang.model.element">TypeElement</a>&gt;&nbsp;classTypeElementMap)</code>
    +<div class="block">Puts <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/TypeElement.html?is-external=true" title="class or interface in javax.lang.model.element"><code>TypeElement</code></a> instances into the given map (corresponding to the <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a> keys) and returns a
    + <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a> instance.</div>
    +</td>
    +</tr>
    +<tr id="i1" class="rowColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html#preContract--">preContract</a></span>()</code>
    +<div class="block">Performs pre-contract actions.</div>
    +</td>
    +</tr>
    +</table>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +<div class="details">
    +<ul class="blockList">
    +<li class="blockList">
    +<!-- ============ METHOD DETAIL ========== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="method.detail">
    +<!--   -->
    +</a>
    +<h3>Method Detail</h3>
    +<a name="preContract--">
    +<!--   -->
    +</a>
    +<ul class="blockList">
    +<li class="blockList">
    +<h4>preContract</h4>
    +<pre>void&nbsp;preContract()</pre>
    +<div class="block">Performs pre-contract actions.
    +
    + <p>This method is called from within an <code>BeforeClass</code> annotated method. It is
    + therefore possible to throw a <code>SkipException</code> in this method.</div>
    +</li>
    +</ul>
    +<a name="getTypes-java.util.Map-">
    +<!--   -->
    +</a>
    +<ul class="blockListLast">
    +<li class="blockList">
    +<h4>getTypes</h4>
    +<pre><a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type">AbstractTypes</a>&nbsp;getTypes(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;,<a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/TypeElement.html?is-external=true" title="class or interface in javax.lang.model.element">TypeElement</a>&gt;&nbsp;classTypeElementMap)</pre>
    +<div class="block">Puts <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/TypeElement.html?is-external=true" title="class or interface in javax.lang.model.element"><code>TypeElement</code></a> instances into the given map (corresponding to the <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a> keys) and returns a
    + <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a> instance.
    +
    + <p>Implementations of this method must put a <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/TypeElement.html?is-external=true" title="class or interface in javax.lang.model.element"><code>TypeElement</code></a> instance for each <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a> key into the
    + given map. Implementations must not add or remove entries to/from the given map.</div>
    +<dl>
    +<dt><span class="paramLabel">Parameters:</span></dt>
    +<dd><code>classTypeElementMap</code> - Map with <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a> objects as keys. The value for each key is initially undefined
    +     and must be updated with the respective <a href="http://docs.oracle.com/javase/7/docs/api/javax/lang/model/element/TypeElement.html?is-external=true" title="class or interface in javax.lang.model.element"><code>TypeElement</code></a> upon return.</dd>
    +<dt><span class="returnLabel">Returns:</span></dt>
    +<dd>the <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a> instance that will be used for the contract test</dd>
    +</dl>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +</div>
    +<!-- ========= END OF CLASS DATA ========= -->
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li class="navBarCell1Rev">Class</li>
    +<li><a href="class-use/AbstractTypesProvider.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
    +<li><a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/AbstractTypesProvider.html" target="_top">Frames</a></li>
    +<li><a href="AbstractTypesProvider.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<div>
    +<ul class="subNavList">
    +<li>Summary:&nbsp;</li>
    +<li>Nested&nbsp;|&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li>Constr&nbsp;|&nbsp;</li>
    +<li><a href="#method.summary">Method</a></li>
    +</ul>
    +<ul class="subNavList">
    +<li>Detail:&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li>Constr&nbsp;|&nbsp;</li>
    +<li><a href="#method.detail">Method</a></li>
    +</ul>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html b/testapidocs/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html
    new file mode 100644
    index 0000000..ba40fd3
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html
    @@ -0,0 +1,274 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>ExtendedTypeKindVisitor7Test (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="ExtendedTypeKindVisitor7Test (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +var methods = {"i0":10};
    +var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
    +var altColor = "altColor";
    +var rowColor = "rowColor";
    +var tableTab = "tableTab";
    +var activeTableTab = "activeTableTab";
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li class="navBarCell1Rev">Class</li>
    +<li><a href="class-use/ExtendedTypeKindVisitor7Test.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li><a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
    +<li>Next&nbsp;Class</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" target="_top">Frames</a></li>
    +<li><a href="ExtendedTypeKindVisitor7Test.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<div>
    +<ul class="subNavList">
    +<li>Summary:&nbsp;</li>
    +<li>Nested&nbsp;|&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.summary">Method</a></li>
    +</ul>
    +<ul class="subNavList">
    +<li>Detail:&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.detail">Method</a></li>
    +</ul>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<!-- ======== START OF CLASS DATA ======== -->
    +<div class="header">
    +<div class="subTitle">net.florianschoppmann.java.type</div>
    +<h2 title="Class ExtendedTypeKindVisitor7Test" class="title">Class ExtendedTypeKindVisitor7Test</h2>
    +</div>
    +<div class="contentContainer">
    +<ul class="inheritance">
    +<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
    +<li>
    +<ul class="inheritance">
    +<li>net.florianschoppmann.java.type.ExtendedTypeKindVisitor7Test</li>
    +</ul>
    +</li>
    +</ul>
    +<div class="description">
    +<ul class="blockList">
    +<li class="blockList">
    +<hr>
    +<br>
    +<pre>public class <span class="typeNameLabel">ExtendedTypeKindVisitor7Test</span>
    +extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
    +<div class="block">Unit tests for <a href="../../../../../apidocs/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>ExtendedTypeKindVisitor7</code></a>.</div>
    +</li>
    +</ul>
    +</div>
    +<div class="summary">
    +<ul class="blockList">
    +<li class="blockList">
    +<!-- ======== CONSTRUCTOR SUMMARY ======== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="constructor.summary">
    +<!--   -->
    +</a>
    +<h3>Constructor Summary</h3>
    +<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
    +<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colOne" scope="col">Constructor and Description</th>
    +</tr>
    +<tr class="altColor">
    +<td class="colOne"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html#ExtendedTypeKindVisitor7Test--">ExtendedTypeKindVisitor7Test</a></span>()</code>&nbsp;</td>
    +</tr>
    +</table>
    +</li>
    +</ul>
    +<!-- ========== METHOD SUMMARY =========== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="method.summary">
    +<!--   -->
    +</a>
    +<h3>Method Summary</h3>
    +<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
    +<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
    +<tr>
    +<th class="colFirst" scope="col">Modifier and Type</th>
    +<th class="colLast" scope="col">Method and Description</th>
    +</tr>
    +<tr id="i0" class="altColor">
    +<td class="colFirst"><code>void</code></td>
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html#test--">test</a></span>()</code>&nbsp;</td>
    +</tr>
    +</table>
    +<ul class="blockList">
    +<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
    +<!--   -->
    +</a>
    +<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
    +<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
    +</ul>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +<div class="details">
    +<ul class="blockList">
    +<li class="blockList">
    +<!-- ========= CONSTRUCTOR DETAIL ======== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="constructor.detail">
    +<!--   -->
    +</a>
    +<h3>Constructor Detail</h3>
    +<a name="ExtendedTypeKindVisitor7Test--">
    +<!--   -->
    +</a>
    +<ul class="blockListLast">
    +<li class="blockList">
    +<h4>ExtendedTypeKindVisitor7Test</h4>
    +<pre>public&nbsp;ExtendedTypeKindVisitor7Test()</pre>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +<!-- ============ METHOD DETAIL ========== -->
    +<ul class="blockList">
    +<li class="blockList"><a name="method.detail">
    +<!--   -->
    +</a>
    +<h3>Method Detail</h3>
    +<a name="test--">
    +<!--   -->
    +</a>
    +<ul class="blockListLast">
    +<li class="blockList">
    +<h4>test</h4>
    +<pre>public&nbsp;void&nbsp;test()</pre>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +</div>
    +<!-- ========= END OF CLASS DATA ========= -->
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li class="navBarCell1Rev">Class</li>
    +<li><a href="class-use/ExtendedTypeKindVisitor7Test.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li><a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
    +<li>Next&nbsp;Class</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" target="_top">Frames</a></li>
    +<li><a href="ExtendedTypeKindVisitor7Test.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<div>
    +<ul class="subNavList">
    +<li>Summary:&nbsp;</li>
    +<li>Nested&nbsp;|&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.summary">Method</a></li>
    +</ul>
    +<ul class="subNavList">
    +<li>Detail:&nbsp;</li>
    +<li>Field&nbsp;|&nbsp;</li>
    +<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
    +<li><a href="#method.detail">Method</a></li>
    +</ul>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/type/class-use/AbstractTypesContract.html b/testapidocs/net/florianschoppmann/java/type/class-use/AbstractTypesContract.html
    new file mode 100644
    index 0000000..5f43a31
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/type/class-use/AbstractTypesContract.html
    @@ -0,0 +1,126 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Uses of Class net.florianschoppmann.java.type.AbstractTypesContract (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Uses of Class net.florianschoppmann.java.type.AbstractTypesContract (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../../overview-summary.html">Overview</a></li>
    +<li><a href="../package-summary.html">Package</a></li>
    +<li><a href="../../../../../net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">Class</a></li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="../package-tree.html">Tree</a></li>
    +<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../../index.html?net/florianschoppmann/java/type/class-use/AbstractTypesContract.html" target="_top">Frames</a></li>
    +<li><a href="AbstractTypesContract.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h2 title="Uses of Class net.florianschoppmann.java.type.AbstractTypesContract" class="title">Uses of Class<br>net.florianschoppmann.java.type.AbstractTypesContract</h2>
    +</div>
    +<div class="classUseContainer">No usage of net.florianschoppmann.java.type.AbstractTypesContract</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../../overview-summary.html">Overview</a></li>
    +<li><a href="../package-summary.html">Package</a></li>
    +<li><a href="../../../../../net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">Class</a></li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="../package-tree.html">Tree</a></li>
    +<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../../index.html?net/florianschoppmann/java/type/class-use/AbstractTypesContract.html" target="_top">Frames</a></li>
    +<li><a href="AbstractTypesContract.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/type/class-use/AbstractTypesProvider.html b/testapidocs/net/florianschoppmann/java/type/class-use/AbstractTypesProvider.html
    new file mode 100644
    index 0000000..326f393
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/type/class-use/AbstractTypesProvider.html
    @@ -0,0 +1,166 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Uses of Interface net.florianschoppmann.java.type.AbstractTypesProvider (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Uses of Interface net.florianschoppmann.java.type.AbstractTypesProvider (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../../overview-summary.html">Overview</a></li>
    +<li><a href="../package-summary.html">Package</a></li>
    +<li><a href="../../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type">Class</a></li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="../package-tree.html">Tree</a></li>
    +<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../../index.html?net/florianschoppmann/java/type/class-use/AbstractTypesProvider.html" target="_top">Frames</a></li>
    +<li><a href="AbstractTypesProvider.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h2 title="Uses of Interface net.florianschoppmann.java.type.AbstractTypesProvider" class="title">Uses of Interface<br>net.florianschoppmann.java.type.AbstractTypesProvider</h2>
    +</div>
    +<div class="classUseContainer">
    +<ul class="blockList">
    +<li class="blockList">
    +<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
    +<caption><span>Packages that use <a href="../../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type">AbstractTypesProvider</a></span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colFirst" scope="col">Package</th>
    +<th class="colLast" scope="col">Description</th>
    +</tr>
    +<tbody>
    +<tr class="altColor">
    +<td class="colFirst"><a href="#net.florianschoppmann.java.type">net.florianschoppmann.java.type</a></td>
    +<td class="colLast">&nbsp;</td>
    +</tr>
    +</tbody>
    +</table>
    +</li>
    +<li class="blockList">
    +<ul class="blockList">
    +<li class="blockList"><a name="net.florianschoppmann.java.type">
    +<!--   -->
    +</a>
    +<h3>Uses of <a href="../../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type">AbstractTypesProvider</a> in <a href="../../../../../net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a></h3>
    +<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
    +<caption><span>Constructors in <a href="../../../../../net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a> with parameters of type <a href="../../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type">AbstractTypesProvider</a></span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colOne" scope="col">Constructor and Description</th>
    +</tr>
    +<tbody>
    +<tr class="altColor">
    +<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../net/florianschoppmann/java/type/AbstractTypesContract.html#AbstractTypesContract-net.florianschoppmann.java.type.AbstractTypesProvider-">AbstractTypesContract</a></span>(<a href="../../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type">AbstractTypesProvider</a>&nbsp;provider)</code>
    +<div class="block">Constructs a new contract-test instance with the given provider.</div>
    +</td>
    +</tr>
    +</tbody>
    +</table>
    +</li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../../overview-summary.html">Overview</a></li>
    +<li><a href="../package-summary.html">Package</a></li>
    +<li><a href="../../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type">Class</a></li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="../package-tree.html">Tree</a></li>
    +<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../../index.html?net/florianschoppmann/java/type/class-use/AbstractTypesProvider.html" target="_top">Frames</a></li>
    +<li><a href="AbstractTypesProvider.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/type/class-use/ExtendedTypeKindVisitor7Test.html b/testapidocs/net/florianschoppmann/java/type/class-use/ExtendedTypeKindVisitor7Test.html
    new file mode 100644
    index 0000000..3d032fe
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/type/class-use/ExtendedTypeKindVisitor7Test.html
    @@ -0,0 +1,126 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Uses of Class net.florianschoppmann.java.type.ExtendedTypeKindVisitor7Test (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Uses of Class net.florianschoppmann.java.type.ExtendedTypeKindVisitor7Test (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../../overview-summary.html">Overview</a></li>
    +<li><a href="../package-summary.html">Package</a></li>
    +<li><a href="../../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type">Class</a></li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="../package-tree.html">Tree</a></li>
    +<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../../index.html?net/florianschoppmann/java/type/class-use/ExtendedTypeKindVisitor7Test.html" target="_top">Frames</a></li>
    +<li><a href="ExtendedTypeKindVisitor7Test.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h2 title="Uses of Class net.florianschoppmann.java.type.ExtendedTypeKindVisitor7Test" class="title">Uses of Class<br>net.florianschoppmann.java.type.ExtendedTypeKindVisitor7Test</h2>
    +</div>
    +<div class="classUseContainer">No usage of net.florianschoppmann.java.type.ExtendedTypeKindVisitor7Test</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../../overview-summary.html">Overview</a></li>
    +<li><a href="../package-summary.html">Package</a></li>
    +<li><a href="../../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type">Class</a></li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="../package-tree.html">Tree</a></li>
    +<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../../index.html?net/florianschoppmann/java/type/class-use/ExtendedTypeKindVisitor7Test.html" target="_top">Frames</a></li>
    +<li><a href="ExtendedTypeKindVisitor7Test.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/type/package-frame.html b/testapidocs/net/florianschoppmann/java/type/package-frame.html
    new file mode 100644
    index 0000000..bf79eae
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/type/package-frame.html
    @@ -0,0 +1,26 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>net.florianschoppmann.java.type (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<h1 class="bar"><a href="../../../../net/florianschoppmann/java/type/package-summary.html" target="classFrame">net.florianschoppmann.java.type</a></h1>
    +<div class="indexContainer">
    +<h2 title="Interfaces">Interfaces</h2>
    +<ul title="Interfaces">
    +<li><a href="AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type" target="classFrame"><span class="interfaceName">AbstractTypesProvider</span></a></li>
    +</ul>
    +<h2 title="Classes">Classes</h2>
    +<ul title="Classes">
    +<li><a href="AbstractTypesContract.html" title="class in net.florianschoppmann.java.type" target="classFrame">AbstractTypesContract</a></li>
    +<li><a href="ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type" target="classFrame">ExtendedTypeKindVisitor7Test</a></li>
    +</ul>
    +</div>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/type/package-summary.html b/testapidocs/net/florianschoppmann/java/type/package-summary.html
    new file mode 100644
    index 0000000..a36ea2f
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/type/package-summary.html
    @@ -0,0 +1,169 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>net.florianschoppmann.java.type (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="net.florianschoppmann.java.type (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li class="navBarCell1Rev">Package</li>
    +<li>Class</li>
    +<li><a href="package-use.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li><a href="../../../../net/florianschoppmann/java/reflect/package-summary.html">Prev&nbsp;Package</a></li>
    +<li>Next&nbsp;Package</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/package-summary.html" target="_top">Frames</a></li>
    +<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h1 title="Package" class="title">Package&nbsp;net.florianschoppmann.java.type</h1>
    +</div>
    +<div class="contentContainer">
    +<ul class="blockList">
    +<li class="blockList">
    +<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Interface Summary table, listing interfaces, and an explanation">
    +<caption><span>Interface Summary</span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colFirst" scope="col">Interface</th>
    +<th class="colLast" scope="col">Description</th>
    +</tr>
    +<tbody>
    +<tr class="altColor">
    +<td class="colFirst"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type">AbstractTypesProvider</a></td>
    +<td class="colLast">
    +<div class="block">Provider for <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a> instances in contract tests.</div>
    +</td>
    +</tr>
    +</tbody>
    +</table>
    +</li>
    +<li class="blockList">
    +<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
    +<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colFirst" scope="col">Class</th>
    +<th class="colLast" scope="col">Description</th>
    +</tr>
    +<tbody>
    +<tr class="altColor">
    +<td class="colFirst"><a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type">AbstractTypesContract</a></td>
    +<td class="colLast">
    +<div class="block">Contract test for <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a>.</div>
    +</td>
    +</tr>
    +<tr class="rowColor">
    +<td class="colFirst"><a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type">ExtendedTypeKindVisitor7Test</a></td>
    +<td class="colLast">
    +<div class="block">Unit tests for <a href="../../../../../apidocs/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>ExtendedTypeKindVisitor7</code></a>.</div>
    +</td>
    +</tr>
    +</tbody>
    +</table>
    +</li>
    +</ul>
    +</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li class="navBarCell1Rev">Package</li>
    +<li>Class</li>
    +<li><a href="package-use.html">Use</a></li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li><a href="../../../../net/florianschoppmann/java/reflect/package-summary.html">Prev&nbsp;Package</a></li>
    +<li>Next&nbsp;Package</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/package-summary.html" target="_top">Frames</a></li>
    +<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/type/package-tree.html b/testapidocs/net/florianschoppmann/java/type/package-tree.html
    new file mode 100644
    index 0000000..f5318b7
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/type/package-tree.html
    @@ -0,0 +1,144 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>net.florianschoppmann.java.type Class Hierarchy (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="net.florianschoppmann.java.type Class Hierarchy (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li>Class</li>
    +<li>Use</li>
    +<li class="navBarCell1Rev">Tree</li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li><a href="../../../../net/florianschoppmann/java/reflect/package-tree.html">Prev</a></li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/package-tree.html" target="_top">Frames</a></li>
    +<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h1 class="title">Hierarchy For Package net.florianschoppmann.java.type</h1>
    +<span class="packageHierarchyLabel">Package Hierarchies:</span>
    +<ul class="horizontal">
    +<li><a href="../../../../overview-tree.html">All Packages</a></li>
    +</ul>
    +</div>
    +<div class="contentContainer">
    +<h2 title="Class Hierarchy">Class Hierarchy</h2>
    +<ul>
    +<li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
    +<ul>
    +<li type="circle">net.florianschoppmann.java.type.<a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type"><span class="typeNameLink">AbstractTypesContract</span></a> (implements org.testng.ITest)</li>
    +<li type="circle">net.florianschoppmann.java.type.<a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type"><span class="typeNameLink">ExtendedTypeKindVisitor7Test</span></a></li>
    +</ul>
    +</li>
    +</ul>
    +<h2 title="Interface Hierarchy">Interface Hierarchy</h2>
    +<ul>
    +<li type="circle">net.florianschoppmann.java.type.<a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type"><span class="typeNameLink">AbstractTypesProvider</span></a></li>
    +</ul>
    +</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li>Class</li>
    +<li>Use</li>
    +<li class="navBarCell1Rev">Tree</li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li><a href="../../../../net/florianschoppmann/java/reflect/package-tree.html">Prev</a></li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/package-tree.html" target="_top">Frames</a></li>
    +<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/net/florianschoppmann/java/type/package-use.html b/testapidocs/net/florianschoppmann/java/type/package-use.html
    new file mode 100644
    index 0000000..bded09b
    --- /dev/null
    +++ b/testapidocs/net/florianschoppmann/java/type/package-use.html
    @@ -0,0 +1,161 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Uses of Package net.florianschoppmann.java.type (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
    +<script type="text/javascript" src="../../../../script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Uses of Package net.florianschoppmann.java.type (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li>Class</li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/package-use.html" target="_top">Frames</a></li>
    +<li><a href="package-use.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h1 title="Uses of Package net.florianschoppmann.java.type" class="title">Uses of Package<br>net.florianschoppmann.java.type</h1>
    +</div>
    +<div class="contentContainer">
    +<ul class="blockList">
    +<li class="blockList">
    +<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
    +<caption><span>Packages that use <a href="../../../../net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a></span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colFirst" scope="col">Package</th>
    +<th class="colLast" scope="col">Description</th>
    +</tr>
    +<tbody>
    +<tr class="altColor">
    +<td class="colFirst"><a href="#net.florianschoppmann.java.type">net.florianschoppmann.java.type</a></td>
    +<td class="colLast">&nbsp;</td>
    +</tr>
    +</tbody>
    +</table>
    +</li>
    +<li class="blockList"><a name="net.florianschoppmann.java.type">
    +<!--   -->
    +</a>
    +<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
    +<caption><span>Classes in <a href="../../../../net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a> used by <a href="../../../../net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a></span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colOne" scope="col">Class and Description</th>
    +</tr>
    +<tbody>
    +<tr class="altColor">
    +<td class="colOne"><a href="../../../../net/florianschoppmann/java/type/class-use/AbstractTypesProvider.html#net.florianschoppmann.java.type">AbstractTypesProvider</a>
    +<div class="block">Provider for <a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html?is-external=true" title="class or interface in net.florianschoppmann.java.type"><code>AbstractTypes</code></a> instances in contract tests.</div>
    +</td>
    +</tr>
    +</tbody>
    +</table>
    +</li>
    +</ul>
    +</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="../../../../overview-summary.html">Overview</a></li>
    +<li><a href="package-summary.html">Package</a></li>
    +<li>Class</li>
    +<li class="navBarCell1Rev">Use</li>
    +<li><a href="package-tree.html">Tree</a></li>
    +<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
    +<li><a href="../../../../index-all.html">Index</a></li>
    +<li><a href="../../../../help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="../../../../index.html?net/florianschoppmann/java/type/package-use.html" target="_top">Frames</a></li>
    +<li><a href="package-use.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/overview-frame.html b/testapidocs/overview-frame.html
    new file mode 100644
    index 0000000..4e9f53f
    --- /dev/null
    +++ b/testapidocs/overview-frame.html
    @@ -0,0 +1,23 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Overview List (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
    +<script type="text/javascript" src="script.js"></script>
    +</head>
    +<body>
    +<div class="indexHeader"><span><a href="allclasses-frame.html" target="packageFrame">All&nbsp;Classes</a></span></div>
    +<div class="indexContainer">
    +<h2 title="Packages">Packages</h2>
    +<ul title="Packages">
    +<li><a href="net/florianschoppmann/java/reflect/package-frame.html" target="packageFrame">net.florianschoppmann.java.reflect</a></li>
    +<li><a href="net/florianschoppmann/java/type/package-frame.html" target="packageFrame">net.florianschoppmann.java.type</a></li>
    +</ul>
    +</div>
    +<p>&nbsp;</p>
    +</body>
    +</html>
    diff --git a/testapidocs/overview-summary.html b/testapidocs/overview-summary.html
    new file mode 100644
    index 0000000..10552f3
    --- /dev/null
    +++ b/testapidocs/overview-summary.html
    @@ -0,0 +1,144 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Overview (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
    +<script type="text/javascript" src="script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Overview (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li class="navBarCell1Rev">Overview</li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li><a href="overview-tree.html">Tree</a></li>
    +<li><a href="deprecated-list.html">Deprecated</a></li>
    +<li><a href="index-all.html">Index</a></li>
    +<li><a href="help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
    +<li><a href="overview-summary.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h1 class="title">Java Types 1.0.1 Test API</h1>
    +</div>
    +<div class="contentContainer">
    +<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Packages table, listing packages, and an explanation">
    +<caption><span>Packages</span><span class="tabEnd">&nbsp;</span></caption>
    +<tr>
    +<th class="colFirst" scope="col">Package</th>
    +<th class="colLast" scope="col">Description</th>
    +</tr>
    +<tbody>
    +<tr class="altColor">
    +<td class="colFirst"><a href="net/florianschoppmann/java/reflect/package-summary.html">net.florianschoppmann.java.reflect</a></td>
    +<td class="colLast">&nbsp;</td>
    +</tr>
    +<tr class="rowColor">
    +<td class="colFirst"><a href="net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a></td>
    +<td class="colLast">&nbsp;</td>
    +</tr>
    +</tbody>
    +</table>
    +</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li class="navBarCell1Rev">Overview</li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li><a href="overview-tree.html">Tree</a></li>
    +<li><a href="deprecated-list.html">Deprecated</a></li>
    +<li><a href="index-all.html">Index</a></li>
    +<li><a href="help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
    +<li><a href="overview-summary.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/overview-tree.html b/testapidocs/overview-tree.html
    new file mode 100644
    index 0000000..6345dba
    --- /dev/null
    +++ b/testapidocs/overview-tree.html
    @@ -0,0 +1,147 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<!-- NewPage -->
    +<html lang="en">
    +<head>
    +<!-- Generated by javadoc (1.8.0_40) on Mon May 25 17:26:37 PDT 2015 -->
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<title>Class Hierarchy (Java Types 1.0.1 Test API)</title>
    +<meta name="date" content="2015-05-25">
    +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
    +<script type="text/javascript" src="script.js"></script>
    +</head>
    +<body>
    +<script type="text/javascript"><!--
    +    try {
    +        if (location.href.indexOf('is-external=true') == -1) {
    +            parent.document.title="Class Hierarchy (Java Types 1.0.1 Test API)";
    +        }
    +    }
    +    catch(err) {
    +    }
    +//-->
    +</script>
    +<noscript>
    +<div>JavaScript is disabled on your browser.</div>
    +</noscript>
    +<!-- ========= START OF TOP NAVBAR ======= -->
    +<div class="topNav"><a name="navbar.top">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.top.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="overview-summary.html">Overview</a></li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li class="navBarCell1Rev">Tree</li>
    +<li><a href="deprecated-list.html">Deprecated</a></li>
    +<li><a href="index-all.html">Index</a></li>
    +<li><a href="help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
    +<li><a href="overview-tree.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_top">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_top");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.top">
    +<!--   -->
    +</a></div>
    +<!-- ========= END OF TOP NAVBAR ========= -->
    +<div class="header">
    +<h1 class="title">Hierarchy For All Packages</h1>
    +<span class="packageHierarchyLabel">Package Hierarchies:</span>
    +<ul class="horizontal">
    +<li><a href="net/florianschoppmann/java/reflect/package-tree.html">net.florianschoppmann.java.reflect</a>, </li>
    +<li><a href="net/florianschoppmann/java/type/package-tree.html">net.florianschoppmann.java.type</a></li>
    +</ul>
    +</div>
    +<div class="contentContainer">
    +<h2 title="Class Hierarchy">Class Hierarchy</h2>
    +<ul>
    +<li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
    +<ul>
    +<li type="circle">net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" title="class in net.florianschoppmann.java.type"><span class="typeNameLink">AbstractTypesContract</span></a> (implements org.testng.ITest)</li>
    +<li type="circle">net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" title="class in net.florianschoppmann.java.type"><span class="typeNameLink">ExtendedTypeKindVisitor7Test</span></a></li>
    +<li type="circle">net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ImmutableListTest.html" title="class in net.florianschoppmann.java.reflect"><span class="typeNameLink">ImmutableListTest</span></a></li>
    +<li type="circle">net.florianschoppmann.java.reflect.<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" title="class in net.florianschoppmann.java.reflect"><span class="typeNameLink">ReflectionTypesTest</span></a></li>
    +</ul>
    +</li>
    +</ul>
    +<h2 title="Interface Hierarchy">Interface Hierarchy</h2>
    +<ul>
    +<li type="circle">net.florianschoppmann.java.type.<a href="net/florianschoppmann/java/type/AbstractTypesProvider.html" title="interface in net.florianschoppmann.java.type"><span class="typeNameLink">AbstractTypesProvider</span></a></li>
    +</ul>
    +</div>
    +<!-- ======= START OF BOTTOM NAVBAR ====== -->
    +<div class="bottomNav"><a name="navbar.bottom">
    +<!--   -->
    +</a>
    +<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
    +<a name="navbar.bottom.firstrow">
    +<!--   -->
    +</a>
    +<ul class="navList" title="Navigation">
    +<li><a href="overview-summary.html">Overview</a></li>
    +<li>Package</li>
    +<li>Class</li>
    +<li>Use</li>
    +<li class="navBarCell1Rev">Tree</li>
    +<li><a href="deprecated-list.html">Deprecated</a></li>
    +<li><a href="index-all.html">Index</a></li>
    +<li><a href="help-doc.html">Help</a></li>
    +</ul>
    +</div>
    +<div class="subNav">
    +<ul class="navList">
    +<li>Prev</li>
    +<li>Next</li>
    +</ul>
    +<ul class="navList">
    +<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
    +<li><a href="overview-tree.html" target="_top">No&nbsp;Frames</a></li>
    +</ul>
    +<ul class="navList" id="allclasses_navbar_bottom">
    +<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
    +</ul>
    +<div>
    +<script type="text/javascript"><!--
    +  allClassesLink = document.getElementById("allclasses_navbar_bottom");
    +  if(window==top) {
    +    allClassesLink.style.display = "block";
    +  }
    +  else {
    +    allClassesLink.style.display = "none";
    +  }
    +  //-->
    +</script>
    +</div>
    +<a name="skip.navbar.bottom">
    +<!--   -->
    +</a></div>
    +<!-- ======== END OF BOTTOM NAVBAR ======= -->
    +<p class="legalCopy"><small>Copyright &#169; 2014&#x2013;2015. All rights reserved.</small></p>
    +</body>
    +</html>
    diff --git a/testapidocs/package-list b/testapidocs/package-list
    new file mode 100644
    index 0000000..21c406a
    --- /dev/null
    +++ b/testapidocs/package-list
    @@ -0,0 +1,2 @@
    +net.florianschoppmann.java.reflect
    +net.florianschoppmann.java.type
    diff --git a/testapidocs/script.js b/testapidocs/script.js
    new file mode 100644
    index 0000000..b346356
    --- /dev/null
    +++ b/testapidocs/script.js
    @@ -0,0 +1,30 @@
    +function show(type)
    +{
    +    count = 0;
    +    for (var key in methods) {
    +        var row = document.getElementById(key);
    +        if ((methods[key] &  type) != 0) {
    +            row.style.display = '';
    +            row.className = (count++ % 2) ? rowColor : altColor;
    +        }
    +        else
    +            row.style.display = 'none';
    +    }
    +    updateTabs(type);
    +}
    +
    +function updateTabs(type)
    +{
    +    for (var value in tabs) {
    +        var sNode = document.getElementById(tabs[value][0]);
    +        var spanNode = sNode.firstChild;
    +        if (value == type) {
    +            sNode.className = activeTableTab;
    +            spanNode.innerHTML = tabs[value][1];
    +        }
    +        else {
    +            sNode.className = tableTab;
    +            spanNode.innerHTML = "<a href=\"javascript:show("+ value + ");\">" + tabs[value][1] + "</a>";
    +        }
    +    }
    +}
    diff --git a/testapidocs/stylesheet.css b/testapidocs/stylesheet.css
    new file mode 100644
    index 0000000..cebb4fd
    --- /dev/null
    +++ b/testapidocs/stylesheet.css
    @@ -0,0 +1,574 @@
    +/* Javadoc style sheet */
    +/*
    +Overall document style
    +*/
    +
    +@import url('resources/fonts/dejavu.css');
    +
    +body {
    +    background-color:#ffffff;
    +    color:#353833;
    +    font-family:'DejaVu Sans', Arial, Helvetica, sans-serif;
    +    font-size:14px;
    +    margin:0;
    +}
    +a:link, a:visited {
    +    text-decoration:none;
    +    color:#4A6782;
    +}
    +a:hover, a:focus {
    +    text-decoration:none;
    +    color:#bb7a2a;
    +}
    +a:active {
    +    text-decoration:none;
    +    color:#4A6782;
    +}
    +a[name] {
    +    color:#353833;
    +}
    +a[name]:hover {
    +    text-decoration:none;
    +    color:#353833;
    +}
    +pre {
    +    font-family:'DejaVu Sans Mono', monospace;
    +    font-size:14px;
    +}
    +h1 {
    +    font-size:20px;
    +}
    +h2 {
    +    font-size:18px;
    +}
    +h3 {
    +    font-size:16px;
    +    font-style:italic;
    +}
    +h4 {
    +    font-size:13px;
    +}
    +h5 {
    +    font-size:12px;
    +}
    +h6 {
    +    font-size:11px;
    +}
    +ul {
    +    list-style-type:disc;
    +}
    +code, tt {
    +    font-family:'DejaVu Sans Mono', monospace;
    +    font-size:14px;
    +    padding-top:4px;
    +    margin-top:8px;
    +    line-height:1.4em;
    +}
    +dt code {
    +    font-family:'DejaVu Sans Mono', monospace;
    +    font-size:14px;
    +    padding-top:4px;
    +}
    +table tr td dt code {
    +    font-family:'DejaVu Sans Mono', monospace;
    +    font-size:14px;
    +    vertical-align:top;
    +    padding-top:4px;
    +}
    +sup {
    +    font-size:8px;
    +}
    +/*
    +Document title and Copyright styles
    +*/
    +.clear {
    +    clear:both;
    +    height:0px;
    +    overflow:hidden;
    +}
    +.aboutLanguage {
    +    float:right;
    +    padding:0px 21px;
    +    font-size:11px;
    +    z-index:200;
    +    margin-top:-9px;
    +}
    +.legalCopy {
    +    margin-left:.5em;
    +}
    +.bar a, .bar a:link, .bar a:visited, .bar a:active {
    +    color:#FFFFFF;
    +    text-decoration:none;
    +}
    +.bar a:hover, .bar a:focus {
    +    color:#bb7a2a;
    +}
    +.tab {
    +    background-color:#0066FF;
    +    color:#ffffff;
    +    padding:8px;
    +    width:5em;
    +    font-weight:bold;
    +}
    +/*
    +Navigation bar styles
    +*/
    +.bar {
    +    background-color:#4D7A97;
    +    color:#FFFFFF;
    +    padding:.8em .5em .4em .8em;
    +    height:auto;/*height:1.8em;*/
    +    font-size:11px;
    +    margin:0;
    +}
    +.topNav {
    +    background-color:#4D7A97;
    +    color:#FFFFFF;
    +    float:left;
    +    padding:0;
    +    width:100%;
    +    clear:right;
    +    height:2.8em;
    +    padding-top:10px;
    +    overflow:hidden;
    +    font-size:12px; 
    +}
    +.bottomNav {
    +    margin-top:10px;
    +    background-color:#4D7A97;
    +    color:#FFFFFF;
    +    float:left;
    +    padding:0;
    +    width:100%;
    +    clear:right;
    +    height:2.8em;
    +    padding-top:10px;
    +    overflow:hidden;
    +    font-size:12px;
    +}
    +.subNav {
    +    background-color:#dee3e9;
    +    float:left;
    +    width:100%;
    +    overflow:hidden;
    +    font-size:12px;
    +}
    +.subNav div {
    +    clear:left;
    +    float:left;
    +    padding:0 0 5px 6px;
    +    text-transform:uppercase;
    +}
    +ul.navList, ul.subNavList {
    +    float:left;
    +    margin:0 25px 0 0;
    +    padding:0;
    +}
    +ul.navList li{
    +    list-style:none;
    +    float:left;
    +    padding: 5px 6px;
    +    text-transform:uppercase;
    +}
    +ul.subNavList li{
    +    list-style:none;
    +    float:left;
    +}
    +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {
    +    color:#FFFFFF;
    +    text-decoration:none;
    +    text-transform:uppercase;
    +}
    +.topNav a:hover, .bottomNav a:hover {
    +    text-decoration:none;
    +    color:#bb7a2a;
    +    text-transform:uppercase;
    +}
    +.navBarCell1Rev {
    +    background-color:#F8981D;
    +    color:#253441;
    +    margin: auto 5px;
    +}
    +.skipNav {
    +    position:absolute;
    +    top:auto;
    +    left:-9999px;
    +    overflow:hidden;
    +}
    +/*
    +Page header and footer styles
    +*/
    +.header, .footer {
    +    clear:both;
    +    margin:0 20px;
    +    padding:5px 0 0 0;
    +}
    +.indexHeader {
    +    margin:10px;
    +    position:relative;
    +}
    +.indexHeader span{
    +    margin-right:15px;
    +}
    +.indexHeader h1 {
    +    font-size:13px;
    +}
    +.title {
    +    color:#2c4557;
    +    margin:10px 0;
    +}
    +.subTitle {
    +    margin:5px 0 0 0;
    +}
    +.header ul {
    +    margin:0 0 15px 0;
    +    padding:0;
    +}
    +.footer ul {
    +    margin:20px 0 5px 0;
    +}
    +.header ul li, .footer ul li {
    +    list-style:none;
    +    font-size:13px;
    +}
    +/*
    +Heading styles
    +*/
    +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
    +    background-color:#dee3e9;
    +    border:1px solid #d0d9e0;
    +    margin:0 0 6px -8px;
    +    padding:7px 5px;
    +}
    +ul.blockList ul.blockList ul.blockList li.blockList h3 {
    +    background-color:#dee3e9;
    +    border:1px solid #d0d9e0;
    +    margin:0 0 6px -8px;
    +    padding:7px 5px;
    +}
    +ul.blockList ul.blockList li.blockList h3 {
    +    padding:0;
    +    margin:15px 0;
    +}
    +ul.blockList li.blockList h2 {
    +    padding:0px 0 20px 0;
    +}
    +/*
    +Page layout container styles
    +*/
    +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer {
    +    clear:both;
    +    padding:10px 20px;
    +    position:relative;
    +}
    +.indexContainer {
    +    margin:10px;
    +    position:relative;
    +    font-size:12px;
    +}
    +.indexContainer h2 {
    +    font-size:13px;
    +    padding:0 0 3px 0;
    +}
    +.indexContainer ul {
    +    margin:0;
    +    padding:0;
    +}
    +.indexContainer ul li {
    +    list-style:none;
    +    padding-top:2px;
    +}
    +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {
    +    font-size:12px;
    +    font-weight:bold;
    +    margin:10px 0 0 0;
    +    color:#4E4E4E;
    +}
    +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {
    +    margin:5px 0 10px 0px;
    +    font-size:14px;
    +    font-family:'DejaVu Sans Mono',monospace;
    +}
    +.serializedFormContainer dl.nameValue dt {
    +    margin-left:1px;
    +    font-size:1.1em;
    +    display:inline;
    +    font-weight:bold;
    +}
    +.serializedFormContainer dl.nameValue dd {
    +    margin:0 0 0 1px;
    +    font-size:1.1em;
    +    display:inline;
    +}
    +/*
    +List styles
    +*/
    +ul.horizontal li {
    +    display:inline;
    +    font-size:0.9em;
    +}
    +ul.inheritance {
    +    margin:0;
    +    padding:0;
    +}
    +ul.inheritance li {
    +    display:inline;
    +    list-style:none;
    +}
    +ul.inheritance li ul.inheritance {
    +    margin-left:15px;
    +    padding-left:15px;
    +    padding-top:1px;
    +}
    +ul.blockList, ul.blockListLast {
    +    margin:10px 0 10px 0;
    +    padding:0;
    +}
    +ul.blockList li.blockList, ul.blockListLast li.blockList {
    +    list-style:none;
    +    margin-bottom:15px;
    +    line-height:1.4;
    +}
    +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList {
    +    padding:0px 20px 5px 10px;
    +    border:1px solid #ededed; 
    +    background-color:#f8f8f8;
    +}
    +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList {
    +    padding:0 0 5px 8px;
    +    background-color:#ffffff;
    +    border:none;
    +}
    +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
    +    margin-left:0;
    +    padding-left:0;
    +    padding-bottom:15px;
    +    border:none;
    +}
    +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
    +    list-style:none;
    +    border-bottom:none;
    +    padding-bottom:0;
    +}
    +table tr td dl, table tr td dl dt, table tr td dl dd {
    +    margin-top:0;
    +    margin-bottom:1px;
    +}
    +/*
    +Table styles
    +*/
    +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary {
    +    width:100%;
    +    border-left:1px solid #EEE; 
    +    border-right:1px solid #EEE; 
    +    border-bottom:1px solid #EEE; 
    +}
    +.overviewSummary, .memberSummary  {
    +    padding:0px;
    +}
    +.overviewSummary caption, .memberSummary caption, .typeSummary caption,
    +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption {
    +    position:relative;
    +    text-align:left;
    +    background-repeat:no-repeat;
    +    color:#253441;
    +    font-weight:bold;
    +    clear:none;
    +    overflow:hidden;
    +    padding:0px;
    +    padding-top:10px;
    +    padding-left:1px;
    +    margin:0px;
    +    white-space:pre;
    +}
    +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,
    +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link,
    +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,
    +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover,
    +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,
    +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active,
    +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,
    +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited {
    +    color:#FFFFFF;
    +}
    +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,
    +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {
    +    white-space:nowrap;
    +    padding-top:5px;
    +    padding-left:12px;
    +    padding-right:12px;
    +    padding-bottom:7px;
    +    display:inline-block;
    +    float:left;
    +    background-color:#F8981D;
    +    border: none;
    +    height:16px;
    +}
    +.memberSummary caption span.activeTableTab span {
    +    white-space:nowrap;
    +    padding-top:5px;
    +    padding-left:12px;
    +    padding-right:12px;
    +    margin-right:3px;
    +    display:inline-block;
    +    float:left;
    +    background-color:#F8981D;
    +    height:16px;
    +}
    +.memberSummary caption span.tableTab span {
    +    white-space:nowrap;
    +    padding-top:5px;
    +    padding-left:12px;
    +    padding-right:12px;
    +    margin-right:3px;
    +    display:inline-block;
    +    float:left;
    +    background-color:#4D7A97;
    +    height:16px;
    +}
    +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {
    +    padding-top:0px;
    +    padding-left:0px;
    +    padding-right:0px;
    +    background-image:none;
    +    float:none;
    +    display:inline;
    +}
    +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd,
    +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd {
    +    display:none;
    +    width:5px;
    +    position:relative;
    +    float:left;
    +    background-color:#F8981D;
    +}
    +.memberSummary .activeTableTab .tabEnd {
    +    display:none;
    +    width:5px;
    +    margin-right:3px;
    +    position:relative; 
    +    float:left;
    +    background-color:#F8981D;
    +}
    +.memberSummary .tableTab .tabEnd {
    +    display:none;
    +    width:5px;
    +    margin-right:3px;
    +    position:relative;
    +    background-color:#4D7A97;
    +    float:left;
    +
    +}
    +.overviewSummary td, .memberSummary td, .typeSummary td,
    +.useSummary td, .constantsSummary td, .deprecatedSummary td {
    +    text-align:left;
    +    padding:0px 0px 12px 10px;
    +    width:100%;
    +}
    +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th,
    +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{
    +    vertical-align:top;
    +    padding-right:0px;
    +    padding-top:8px;
    +    padding-bottom:3px;
    +}
    +th.colFirst, th.colLast, th.colOne, .constantsSummary th {
    +    background:#dee3e9;
    +    text-align:left;
    +    padding:8px 3px 3px 7px;
    +}
    +td.colFirst, th.colFirst {
    +    white-space:nowrap;
    +    font-size:13px;
    +}
    +td.colLast, th.colLast {
    +    font-size:13px;
    +}
    +td.colOne, th.colOne {
    +    font-size:13px;
    +}
    +.overviewSummary td.colFirst, .overviewSummary th.colFirst,
    +.overviewSummary td.colOne, .overviewSummary th.colOne,
    +.memberSummary td.colFirst, .memberSummary th.colFirst,
    +.memberSummary td.colOne, .memberSummary th.colOne,
    +.typeSummary td.colFirst{
    +    width:25%;
    +    vertical-align:top;
    +}
    +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {
    +    font-weight:bold;
    +}
    +.tableSubHeadingColor {
    +    background-color:#EEEEFF;
    +}
    +.altColor {
    +    background-color:#FFFFFF;
    +}
    +.rowColor {
    +    background-color:#EEEEEF;
    +}
    +/*
    +Content styles
    +*/
    +.description pre {
    +    margin-top:0;
    +}
    +.deprecatedContent {
    +    margin:0;
    +    padding:10px 0;
    +}
    +.docSummary {
    +    padding:0;
    +}
    +
    +ul.blockList ul.blockList ul.blockList li.blockList h3 {
    +    font-style:normal;
    +}
    +
    +div.block {
    +    font-size:14px;
    +    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
    +}
    +
    +td.colLast div {
    +    padding-top:0px;
    +}
    +
    +
    +td.colLast a {
    +    padding-bottom:3px;
    +}
    +/*
    +Formatting effect styles
    +*/
    +.sourceLineNo {
    +    color:green;
    +    padding:0 30px 0 0;
    +}
    +h1.hidden {
    +    visibility:hidden;
    +    overflow:hidden;
    +    font-size:10px;
    +}
    +.block {
    +    display:block;
    +    margin:3px 10px 2px 0px;
    +    color:#474747;
    +}
    +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink,
    +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel,
    +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink {
    +    font-weight:bold;
    +}
    +.deprecationComment, .emphasizedPhrase, .interfaceName {
    +    font-style:italic;
    +}
    +
    +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase,
    +div.block div.block span.interfaceName {
    +    font-style:normal;
    +}
    +
    +div.contentContainer ul.blockList li.blockList h2{
    +    padding-bottom:0px;
    +}
    diff --git a/xref-test/allclasses-frame.html b/xref-test/allclasses-frame.html
    new file mode 100644
    index 0000000..7d015e3
    --- /dev/null
    +++ b/xref-test/allclasses-frame.html
    @@ -0,0 +1,116 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>All Classes</title>
    +		<link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
    +    </head>
    +    <body>
    +
    +		<h3>All Classes</h3>
    +
    +		<ul>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" target="classFrame"></a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">AbstractTypesContract</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesProvider.html" target="classFrame">AbstractTypesProvider</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" target="classFrame">AnnotatedConstructImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" target="classFrame">ClassElementVisitor</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">DiamondA</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">DiamondB</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">DiamondC</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">DiamondD</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" target="classFrame">ExtendedTypeKindVisitor7Test</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">ExtendsParameterized</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">ImmutableIntegerListSet</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ImmutableListTest.html" target="classFrame">ImmutableListTest</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" target="classFrame">InnerClass</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">IntegerListSet</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">InterdependentRecursiveBoundA</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">InterdependentRecursiveBoundB</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" target="classFrame">IntersectionTypeImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" target="classFrame">OtherType</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" target="classFrame">OuterClass</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" target="classFrame">Provider</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">RawSubExtendsParameterized</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" target="classFrame">ReflectionTypesTest</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">SimpleA</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">SimpleB</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">SimpleC</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">SimpleParameterized</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html" target="classFrame">SomeVisitor</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">SubDiamondB</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">SubExtendsParameterized</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypesContract.html" target="classFrame">SubSubDiamondB</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" target="classFrame">ThrowingInvocationHandler</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionTypesTest.html" target="classFrame">TypeToken</a>
    +			</li>
    +			      </ul>
    +
    +    </body>
    +  </html>
    diff --git a/xref-test/index.html b/xref-test/index.html
    new file mode 100644
    index 0000000..9cb7429
    --- /dev/null
    +++ b/xref-test/index.html
    @@ -0,0 +1,25 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
    +<html xml:lang="en" lang="en">
    +<!-- this is a JXR report set -->
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference</title>
    +	</head>
    +    <frameset cols="20%,80%">
    +		<frameset rows="30%,70%">
    +			<frame src="overview-frame.html" name="packageListFrame" />
    +			<frame src="allclasses-frame.html" name="packageFrame" />
    +		</frameset>
    +		<frame src="overview-summary.html" name="classFrame" />
    +        <noframes>
    +            <body>
    +                <h1>Frame Alert</h1>
    +                <p>
    +                    You don't have frames. Go <a href="overview-summary.html">here</a>
    +                </p>
    +            </body>
    +        </noframes>
    +    </frameset>
    +</html>
    +
    diff --git a/xref-test/net/florianschoppmann/java/reflect/ImmutableListTest.html b/xref-test/net/florianschoppmann/java/reflect/ImmutableListTest.html
    new file mode 100644
    index 0000000..7727e0f
    --- /dev/null
    +++ b/xref-test/net/florianschoppmann/java/reflect/ImmutableListTest.html
    @@ -0,0 +1,37 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>ImmutableListTest xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../testapidocs/net/florianschoppmann/java/reflect/ImmutableListTest.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> org.testng.Assert;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> org.testng.annotations.Test;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> java.util.Arrays;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> java.util.Collections;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_javadoccomment"> * Unit tests for {@link ImmutableList}.</em>
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/ImmutableListTest.html">ImmutableListTest</a> {
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      @Test
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> test() {
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>          List&lt;Integer&gt; list = Arrays.asList(1, 2);
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>          ImmutableList&lt;Integer&gt; immutableList = ImmutableList.copyOf(list);
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>          Assert.assertEquals(immutableList, list);
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>          Assert.assertSame(ImmutableList.copyOf(immutableList), immutableList);
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>          Assert.assertEquals(ImmutableList.emptyList(), Collections.emptyList());
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>          Assert.assertSame(ImmutableList.emptyList(), ImmutableList.emptyList());
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>      }
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref-test/net/florianschoppmann/java/reflect/ReflectionTypesTest.html b/xref-test/net/florianschoppmann/java/reflect/ReflectionTypesTest.html
    new file mode 100644
    index 0000000..687533f
    --- /dev/null
    +++ b/xref-test/net/florianschoppmann/java/reflect/ReflectionTypesTest.html
    @@ -0,0 +1,363 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>ReflectionTypesTest xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../testapidocs/net/florianschoppmann/java/reflect/ReflectionTypesTest.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> net.florianschoppmann.java.type.AbstractTypes;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> net.florianschoppmann.java.type.AbstractTypesContract;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> net.florianschoppmann.java.type.AbstractTypesProvider;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> net.florianschoppmann.java.type.IntersectionType;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> org.testng.Assert;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">import</strong> org.testng.annotations.Factory;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">import</strong> org.testng.annotations.Test;
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.element.ElementKind;
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.element.ExecutableElement;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.element.PackageElement;
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.element.TypeElement;
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.element.TypeParameterElement;
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.element.VariableElement;
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.DeclaredType;
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.NoType;
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.NullType;
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.PrimitiveType;
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeMirror;
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVariable;
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.WildcardType;
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.util.AbstractElementVisitor7;
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> java.io.Serializable;
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.lang.annotation.Retention;
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.InvocationHandler;
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.Method;
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.ParameterizedType;
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.Proxy;
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.Type;
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> java.util.Arrays;
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment"> * Unit tests for {@link ReflectionTypes}.</em>
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html">ReflectionTypesTest</a> {
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <strong class="jxr_keyword">private</strong> ReflectionTypes types;
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setup() {
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>          types = ReflectionTypes.getInstance();
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      }
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      @Factory
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <strong class="jxr_keyword">public</strong> Object[] createTests() {
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>          setup();
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html">Provider</a> provider = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html">Provider</a>();
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> Object[] {
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>              <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">AbstractTypesContract</a>(provider)
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>          };
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      }
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html">Provider</a> <strong class="jxr_keyword">implements</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html">AbstractTypesProvider</a> {
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          @Override
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> preContract() { }
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          @Override
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          <strong class="jxr_keyword">public</strong> AbstractTypes getTypes(Map&lt;Class&lt;?&gt;, TypeElement&gt; classTypeElementMap) {
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>              <strong class="jxr_keyword">for</strong> (Map.Entry&lt;Class&lt;?&gt;, TypeElement&gt; entry: classTypeElementMap.entrySet()) {
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>                  entry.setValue(types.typeElement(entry.getKey()));
    +<a class="jxr_linenumber" name="L66" href="#L66">66</a>              }
    +<a class="jxr_linenumber" name="L67" href="#L67">67</a>              <strong class="jxr_keyword">return</strong> types;
    +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          }
    +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      }
    +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  
    +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      enum <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html">ThrowingInvocationHandler</a> <strong class="jxr_keyword">implements</strong> InvocationHandler {
    +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          INSTANCE;
    +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  
    +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          @Override
    +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          <strong class="jxr_keyword">public</strong> Object invoke(Object proxy, Method method, Object[] args) <strong class="jxr_keyword">throws</strong> Throwable {
    +<a class="jxr_linenumber" name="L76" href="#L76">76</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnsupportedOperationException();
    +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          }
    +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      }
    +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  
    +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      @Test
    +<a class="jxr_linenumber" name="L81" href="#L81">81</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> requireValidElement() {
    +<a class="jxr_linenumber" name="L82" href="#L82">82</a>          TypeElement typeElement = (TypeElement) Proxy.newProxyInstance(
    +<a class="jxr_linenumber" name="L83" href="#L83">83</a>              getClass().getClassLoader(), <strong class="jxr_keyword">new</strong> Class&lt;?&gt;[]{ TypeElement.<strong class="jxr_keyword">class</strong> }, ThrowingInvocationHandler.INSTANCE);
    +<a class="jxr_linenumber" name="L84" href="#L84">84</a>          <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L85" href="#L85">85</a>              types.requireValidElement(typeElement);
    +<a class="jxr_linenumber" name="L86" href="#L86">86</a>              Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L87" href="#L87">87</a>          } <strong class="jxr_keyword">catch</strong> (IllegalArgumentException exception) {
    +<a class="jxr_linenumber" name="L88" href="#L88">88</a>              Assert.assertTrue(exception.getMessage().contains(ReflectionTypes.<strong class="jxr_keyword">class</strong>.getName()));
    +<a class="jxr_linenumber" name="L89" href="#L89">89</a>          }
    +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      }
    +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  
    +<a class="jxr_linenumber" name="L92" href="#L92">92</a>      @Test
    +<a class="jxr_linenumber" name="L93" href="#L93">93</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> requireValidType() {
    +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          TypeMirror typeMirror = (TypeMirror) Proxy.newProxyInstance(
    +<a class="jxr_linenumber" name="L95" href="#L95">95</a>              getClass().getClassLoader(), <strong class="jxr_keyword">new</strong> Class&lt;?&gt;[]{ TypeMirror.<strong class="jxr_keyword">class</strong> }, ThrowingInvocationHandler.INSTANCE);
    +<a class="jxr_linenumber" name="L96" href="#L96">96</a>          <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L97" href="#L97">97</a>              types.requireValidType(typeMirror);
    +<a class="jxr_linenumber" name="L98" href="#L98">98</a>              Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L99" href="#L99">99</a>          } <strong class="jxr_keyword">catch</strong> (IllegalArgumentException exception) {
    +<a class="jxr_linenumber" name="L100" href="#L100">100</a>             Assert.assertTrue(exception.getMessage().contains(ReflectionTypes.<strong class="jxr_keyword">class</strong>.getName()));
    +<a class="jxr_linenumber" name="L101" href="#L101">101</a>         }
    +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     }
    +<a class="jxr_linenumber" name="L103" href="#L103">103</a> 
    +<a class="jxr_linenumber" name="L104" href="#L104">104</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html">ClassElementVisitor</a> <strong class="jxr_keyword">extends</strong> AbstractElementVisitor7&lt;Class&lt;?&gt;, Void&gt; {
    +<a class="jxr_linenumber" name="L105" href="#L105">105</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html">ClassElementVisitor</a> INSTANCE = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html">ClassElementVisitor</a>();
    +<a class="jxr_linenumber" name="L106" href="#L106">106</a> 
    +<a class="jxr_linenumber" name="L107" href="#L107">107</a>         @Override
    +<a class="jxr_linenumber" name="L108" href="#L108">108</a>         <strong class="jxr_keyword">public</strong> Class&lt;?&gt; visitPackage(PackageElement e, @Nullable Void ignored) {
    +<a class="jxr_linenumber" name="L109" href="#L109">109</a>             <strong class="jxr_keyword">return</strong> PackageElement.<strong class="jxr_keyword">class</strong>;
    +<a class="jxr_linenumber" name="L110" href="#L110">110</a>         }
    +<a class="jxr_linenumber" name="L111" href="#L111">111</a> 
    +<a class="jxr_linenumber" name="L112" href="#L112">112</a>         @Override
    +<a class="jxr_linenumber" name="L113" href="#L113">113</a>         <strong class="jxr_keyword">public</strong> Class&lt;?&gt; visitType(TypeElement e, @Nullable Void ignored) {
    +<a class="jxr_linenumber" name="L114" href="#L114">114</a>             <strong class="jxr_keyword">return</strong> TypeElement.<strong class="jxr_keyword">class</strong>;
    +<a class="jxr_linenumber" name="L115" href="#L115">115</a>         }
    +<a class="jxr_linenumber" name="L116" href="#L116">116</a> 
    +<a class="jxr_linenumber" name="L117" href="#L117">117</a>         @Override
    +<a class="jxr_linenumber" name="L118" href="#L118">118</a>         <strong class="jxr_keyword">public</strong> Class&lt;?&gt; visitVariable(VariableElement e, @Nullable Void ignored) {
    +<a class="jxr_linenumber" name="L119" href="#L119">119</a>             <strong class="jxr_keyword">return</strong> VariableElement.<strong class="jxr_keyword">class</strong>;
    +<a class="jxr_linenumber" name="L120" href="#L120">120</a>         }
    +<a class="jxr_linenumber" name="L121" href="#L121">121</a> 
    +<a class="jxr_linenumber" name="L122" href="#L122">122</a>         @Override
    +<a class="jxr_linenumber" name="L123" href="#L123">123</a>         <strong class="jxr_keyword">public</strong> Class&lt;?&gt; visitExecutable(ExecutableElement e, @Nullable Void ignored) {
    +<a class="jxr_linenumber" name="L124" href="#L124">124</a>             <strong class="jxr_keyword">return</strong> ExecutableElement.<strong class="jxr_keyword">class</strong>;
    +<a class="jxr_linenumber" name="L125" href="#L125">125</a>         }
    +<a class="jxr_linenumber" name="L126" href="#L126">126</a> 
    +<a class="jxr_linenumber" name="L127" href="#L127">127</a>         @Override
    +<a class="jxr_linenumber" name="L128" href="#L128">128</a>         <strong class="jxr_keyword">public</strong> Class&lt;?&gt; visitTypeParameter(TypeParameterElement e, @Nullable Void ignored) {
    +<a class="jxr_linenumber" name="L129" href="#L129">129</a>             <strong class="jxr_keyword">return</strong> TypeParameterElement.<strong class="jxr_keyword">class</strong>;
    +<a class="jxr_linenumber" name="L130" href="#L130">130</a>         }
    +<a class="jxr_linenumber" name="L131" href="#L131">131</a>     }
    +<a class="jxr_linenumber" name="L132" href="#L132">132</a> 
    +<a class="jxr_linenumber" name="L133" href="#L133">133</a>     @Test
    +<a class="jxr_linenumber" name="L134" href="#L134">134</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> typeElement() {
    +<a class="jxr_linenumber" name="L135" href="#L135">135</a>         TypeElement threadDeclaration = types.typeElement(Thread.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L136" href="#L136">136</a>         TypeElement threadStateDeclaration = types.typeElement(Thread.State.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L137" href="#L137">137</a>         Assert.assertEquals(
    +<a class="jxr_linenumber" name="L138" href="#L138">138</a>             threadStateDeclaration.getQualifiedName().toString(),
    +<a class="jxr_linenumber" name="L139" href="#L139">139</a>             Thread.State.<strong class="jxr_keyword">class</strong>.getCanonicalName()
    +<a class="jxr_linenumber" name="L140" href="#L140">140</a>         );
    +<a class="jxr_linenumber" name="L141" href="#L141">141</a>         Assert.assertEquals(threadStateDeclaration.getKind(), ElementKind.ENUM);
    +<a class="jxr_linenumber" name="L142" href="#L142">142</a>         Assert.assertEquals(threadStateDeclaration.getEnclosingElement(), types.typeElement(Thread.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L143" href="#L143">143</a>         Assert.assertEquals(threadStateDeclaration.toString(), Thread.State.<strong class="jxr_keyword">class</strong>.toString());
    +<a class="jxr_linenumber" name="L144" href="#L144">144</a>         Assert.assertEquals(threadStateDeclaration.accept(ClassElementVisitor.INSTANCE, <strong class="jxr_keyword">null</strong>), TypeElement.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L145" href="#L145">145</a> 
    +<a class="jxr_linenumber" name="L146" href="#L146">146</a>         Assert.assertEquals(types.typeElement(Retention.<strong class="jxr_keyword">class</strong>).getKind(), ElementKind.ANNOTATION_TYPE);
    +<a class="jxr_linenumber" name="L147" href="#L147">147</a> 
    +<a class="jxr_linenumber" name="L148" href="#L148">148</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L149" href="#L149">149</a>             threadDeclaration.getEnclosingElement();
    +<a class="jxr_linenumber" name="L150" href="#L150">150</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L151" href="#L151">151</a>         } <strong class="jxr_keyword">catch</strong> (UnsupportedOperationException ignored) { }
    +<a class="jxr_linenumber" name="L152" href="#L152">152</a> 
    +<a class="jxr_linenumber" name="L153" href="#L153">153</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L154" href="#L154">154</a>             threadDeclaration.getModifiers();
    +<a class="jxr_linenumber" name="L155" href="#L155">155</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L156" href="#L156">156</a>         } <strong class="jxr_keyword">catch</strong> (UnsupportedOperationException ignored) { }
    +<a class="jxr_linenumber" name="L157" href="#L157">157</a> 
    +<a class="jxr_linenumber" name="L158" href="#L158">158</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L159" href="#L159">159</a>             threadStateDeclaration.getNestingKind();
    +<a class="jxr_linenumber" name="L160" href="#L160">160</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L161" href="#L161">161</a>         } <strong class="jxr_keyword">catch</strong> (UnsupportedOperationException ignored) { }
    +<a class="jxr_linenumber" name="L162" href="#L162">162</a> 
    +<a class="jxr_linenumber" name="L163" href="#L163">163</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L164" href="#L164">164</a>             types.typeElement(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L165" href="#L165">165</a>             Assert.fail(<span class="jxr_string">"Expected exception"</span>);
    +<a class="jxr_linenumber" name="L166" href="#L166">166</a>         } <strong class="jxr_keyword">catch</strong> (IllegalArgumentException ignored) { }
    +<a class="jxr_linenumber" name="L167" href="#L167">167</a> 
    +<a class="jxr_linenumber" name="L168" href="#L168">168</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L169" href="#L169">169</a>             types.typeElement(Object[].<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L170" href="#L170">170</a>             Assert.fail(<span class="jxr_string">"Expected exception"</span>);
    +<a class="jxr_linenumber" name="L171" href="#L171">171</a>         } <strong class="jxr_keyword">catch</strong> (IllegalArgumentException ignored) { }
    +<a class="jxr_linenumber" name="L172" href="#L172">172</a>     }
    +<a class="jxr_linenumber" name="L173" href="#L173">173</a> 
    +<a class="jxr_linenumber" name="L174" href="#L174">174</a>     @Test
    +<a class="jxr_linenumber" name="L175" href="#L175">175</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> typeParameterElement() {
    +<a class="jxr_linenumber" name="L176" href="#L176">176</a>         TypeParameterElement typeParameterElement = types.typeElement(List.<strong class="jxr_keyword">class</strong>).getTypeParameters().get(0);
    +<a class="jxr_linenumber" name="L177" href="#L177">177</a>         Assert.assertEquals(typeParameterElement.getKind(), ElementKind.TYPE_PARAMETER);
    +<a class="jxr_linenumber" name="L178" href="#L178">178</a>         Assert.assertEquals(
    +<a class="jxr_linenumber" name="L179" href="#L179">179</a>             typeParameterElement.accept(ClassElementVisitor.INSTANCE, <strong class="jxr_keyword">null</strong>),
    +<a class="jxr_linenumber" name="L180" href="#L180">180</a>             TypeParameterElement.<strong class="jxr_keyword">class</strong>
    +<a class="jxr_linenumber" name="L181" href="#L181">181</a>         );
    +<a class="jxr_linenumber" name="L182" href="#L182">182</a>         Assert.assertEquals(typeParameterElement.toString(), List.<strong class="jxr_keyword">class</strong>.getTypeParameters()[0].getName());
    +<a class="jxr_linenumber" name="L183" href="#L183">183</a> 
    +<a class="jxr_linenumber" name="L184" href="#L184">184</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L185" href="#L185">185</a>             typeParameterElement.getModifiers();
    +<a class="jxr_linenumber" name="L186" href="#L186">186</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L187" href="#L187">187</a>         } <strong class="jxr_keyword">catch</strong> (UnsupportedOperationException ignored) { }
    +<a class="jxr_linenumber" name="L188" href="#L188">188</a>     }
    +<a class="jxr_linenumber" name="L189" href="#L189">189</a> 
    +<a class="jxr_linenumber" name="L190" href="#L190">190</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> OuterClass&lt;T <strong class="jxr_keyword">extends</strong> Serializable&gt; {
    +<a class="jxr_linenumber" name="L191" href="#L191">191</a>         <strong class="jxr_keyword">class</strong> InnerClass&lt;U <strong class="jxr_keyword">extends</strong> Cloneable&gt; { }
    +<a class="jxr_linenumber" name="L192" href="#L192">192</a>     }
    +<a class="jxr_linenumber" name="L193" href="#L193">193</a> 
    +<a class="jxr_linenumber" name="L194" href="#L194">194</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> TypeToken&lt;T&gt; {
    +<a class="jxr_linenumber" name="L195" href="#L195">195</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Type javaType;
    +<a class="jxr_linenumber" name="L196" href="#L196">196</a> 
    +<a class="jxr_linenumber" name="L197" href="#L197">197</a>         <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypesTest.html">TypeToken</a>() {
    +<a class="jxr_linenumber" name="L198" href="#L198">198</a>             ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
    +<a class="jxr_linenumber" name="L199" href="#L199">199</a>             javaType = genericSuperclass.getActualTypeArguments()[0];
    +<a class="jxr_linenumber" name="L200" href="#L200">200</a>         }
    +<a class="jxr_linenumber" name="L201" href="#L201">201</a> 
    +<a class="jxr_linenumber" name="L202" href="#L202">202</a>         Type getJavaType() {
    +<a class="jxr_linenumber" name="L203" href="#L203">203</a>             <strong class="jxr_keyword">return</strong> javaType;
    +<a class="jxr_linenumber" name="L204" href="#L204">204</a>         }
    +<a class="jxr_linenumber" name="L205" href="#L205">205</a>     }
    +<a class="jxr_linenumber" name="L206" href="#L206">206</a> 
    +<a class="jxr_linenumber" name="L207" href="#L207">207</a>     <strong class="jxr_keyword">public</strong> &lt;T <strong class="jxr_keyword">extends</strong> Number&gt; <strong class="jxr_keyword">void</strong> methodWithTypeParameter(T argument) { }
    +<a class="jxr_linenumber" name="L208" href="#L208">208</a> 
    +<a class="jxr_linenumber" name="L209" href="#L209">209</a>     @Test
    +<a class="jxr_linenumber" name="L210" href="#L210">210</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> typeMirror() <strong class="jxr_keyword">throws</strong> NoSuchMethodException {
    +<a class="jxr_linenumber" name="L211" href="#L211">211</a>         <em class="jxr_comment">// Class&lt;?&gt; -&gt; PrimitiveType</em>
    +<a class="jxr_linenumber" name="L212" href="#L212">212</a>         Assert.assertEquals(types.typeMirror(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>), types.getPrimitiveType(TypeKind.INT));
    +<a class="jxr_linenumber" name="L213" href="#L213">213</a> 
    +<a class="jxr_linenumber" name="L214" href="#L214">214</a>         <em class="jxr_comment">// Class&lt;?&gt; -&gt; ArrayType</em>
    +<a class="jxr_linenumber" name="L215" href="#L215">215</a>         Assert.assertEquals(
    +<a class="jxr_linenumber" name="L216" href="#L216">216</a>             types.typeMirror(Serializable[].<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L217" href="#L217">217</a>             types.getArrayType(types.getDeclaredType(types.typeElement(Serializable.<strong class="jxr_keyword">class</strong>)))
    +<a class="jxr_linenumber" name="L218" href="#L218">218</a>         );
    +<a class="jxr_linenumber" name="L219" href="#L219">219</a> 
    +<a class="jxr_linenumber" name="L220" href="#L220">220</a>         <em class="jxr_comment">// Class&lt;?&gt; -&gt; DeclaredType (non-generic)</em>
    +<a class="jxr_linenumber" name="L221" href="#L221">221</a>         Assert.assertEquals(types.typeMirror(Integer.<strong class="jxr_keyword">class</strong>), types.getDeclaredType(types.typeElement(Integer.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L222" href="#L222">222</a> 
    +<a class="jxr_linenumber" name="L223" href="#L223">223</a>         <em class="jxr_comment">// Class&lt;?&gt; -&gt; DeclaredType (raw)</em>
    +<a class="jxr_linenumber" name="L224" href="#L224">224</a>         DeclaredType javaTypesTestType = types.getDeclaredType(types.typeElement(ReflectionTypesTest.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L225" href="#L225">225</a>         DeclaredType rawOuterClassType = types.getDeclaredType(javaTypesTestType, types.typeElement(OuterClass.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L226" href="#L226">226</a>         Assert.assertEquals(
    +<a class="jxr_linenumber" name="L227" href="#L227">227</a>             types.typeMirror(OuterClass.InnerClass.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L228" href="#L228">228</a>             types.getDeclaredType(rawOuterClassType, types.typeElement(OuterClass.InnerClass.<strong class="jxr_keyword">class</strong>))
    +<a class="jxr_linenumber" name="L229" href="#L229">229</a>         );
    +<a class="jxr_linenumber" name="L230" href="#L230">230</a> 
    +<a class="jxr_linenumber" name="L231" href="#L231">231</a>         <em class="jxr_comment">// ParameterizedType -&gt; DeclaredType</em>
    +<a class="jxr_linenumber" name="L232" href="#L232">232</a>         DeclaredType actualInnerClassType = (DeclaredType) types.typeMirror(
    +<a class="jxr_linenumber" name="L233" href="#L233">233</a>             <strong class="jxr_keyword">new</strong> TypeToken&lt;OuterClass&lt;Integer&gt;.InnerClass&lt;byte[]&gt;&gt;() { }.getJavaType()
    +<a class="jxr_linenumber" name="L234" href="#L234">234</a>         );
    +<a class="jxr_linenumber" name="L235" href="#L235">235</a>         DeclaredType outerClassType = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L236" href="#L236">236</a>             javaTypesTestType,
    +<a class="jxr_linenumber" name="L237" href="#L237">237</a>             types.typeElement(OuterClass.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L238" href="#L238">238</a>             types.typeMirror(Integer.<strong class="jxr_keyword">class</strong>)
    +<a class="jxr_linenumber" name="L239" href="#L239">239</a>         );
    +<a class="jxr_linenumber" name="L240" href="#L240">240</a>         DeclaredType innerClassType = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L241" href="#L241">241</a>             outerClassType,
    +<a class="jxr_linenumber" name="L242" href="#L242">242</a>             types.typeElement(OuterClass.InnerClass.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L243" href="#L243">243</a>             types.typeMirror(byte[].<strong class="jxr_keyword">class</strong>)
    +<a class="jxr_linenumber" name="L244" href="#L244">244</a>         );
    +<a class="jxr_linenumber" name="L245" href="#L245">245</a>         Assert.assertEquals(actualInnerClassType, innerClassType);
    +<a class="jxr_linenumber" name="L246" href="#L246">246</a> 
    +<a class="jxr_linenumber" name="L247" href="#L247">247</a>         <em class="jxr_comment">// GenericArrayType -&gt; ArrayType</em>
    +<a class="jxr_linenumber" name="L248" href="#L248">248</a>         DeclaredType listOfStringType
    +<a class="jxr_linenumber" name="L249" href="#L249">249</a>             = types.getDeclaredType(types.typeElement(List.<strong class="jxr_keyword">class</strong>), types.typeMirror(String.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L250" href="#L250">250</a>         Assert.assertEquals(
    +<a class="jxr_linenumber" name="L251" href="#L251">251</a>             types.typeMirror(<strong class="jxr_keyword">new</strong> TypeToken&lt;List&lt;String&gt;[]&gt;() { }.getJavaType()),
    +<a class="jxr_linenumber" name="L252" href="#L252">252</a>             types.getArrayType(listOfStringType)
    +<a class="jxr_linenumber" name="L253" href="#L253">253</a>         );
    +<a class="jxr_linenumber" name="L254" href="#L254">254</a> 
    +<a class="jxr_linenumber" name="L255" href="#L255">255</a>         <em class="jxr_comment">// WildcardType -&gt; WildcardType</em>
    +<a class="jxr_linenumber" name="L256" href="#L256">256</a>         WildcardType actualExtendsStringType = (WildcardType) types.typeMirror(
    +<a class="jxr_linenumber" name="L257" href="#L257">257</a>             ((ParameterizedType) <strong class="jxr_keyword">new</strong> TypeToken&lt;List&lt;? <strong class="jxr_keyword">extends</strong> String&gt;&gt;() { }.getJavaType()).getActualTypeArguments()[0]
    +<a class="jxr_linenumber" name="L258" href="#L258">258</a>         );
    +<a class="jxr_linenumber" name="L259" href="#L259">259</a>         WildcardType extendsStringType = types.getWildcardType(types.typeMirror(String.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L260" href="#L260">260</a>         Assert.assertEquals(actualExtendsStringType, extendsStringType);
    +<a class="jxr_linenumber" name="L261" href="#L261">261</a> 
    +<a class="jxr_linenumber" name="L262" href="#L262">262</a>         WildcardType actualSuperStringType = (WildcardType) types.typeMirror(
    +<a class="jxr_linenumber" name="L263" href="#L263">263</a>             ((ParameterizedType) <strong class="jxr_keyword">new</strong> TypeToken&lt;List&lt;? <strong class="jxr_keyword">super</strong> String&gt;&gt;() { }.getJavaType()).getActualTypeArguments()[0]
    +<a class="jxr_linenumber" name="L264" href="#L264">264</a>         );
    +<a class="jxr_linenumber" name="L265" href="#L265">265</a>         WildcardType superStringType = types.getWildcardType(<strong class="jxr_keyword">null</strong>, types.typeMirror(String.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L266" href="#L266">266</a>         Assert.assertEquals(actualSuperStringType, superStringType);
    +<a class="jxr_linenumber" name="L267" href="#L267">267</a> 
    +<a class="jxr_linenumber" name="L268" href="#L268">268</a>         WildcardType actualWildcardType = (WildcardType) types.typeMirror(
    +<a class="jxr_linenumber" name="L269" href="#L269">269</a>             ((ParameterizedType) <strong class="jxr_keyword">new</strong> TypeToken&lt;List&lt;?&gt;&gt;() { }.getJavaType()).getActualTypeArguments()[0]
    +<a class="jxr_linenumber" name="L270" href="#L270">270</a>         );
    +<a class="jxr_linenumber" name="L271" href="#L271">271</a>         WildcardType wildcardType = types.getWildcardType(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L272" href="#L272">272</a>         Assert.assertEquals(actualWildcardType, wildcardType);
    +<a class="jxr_linenumber" name="L273" href="#L273">273</a> 
    +<a class="jxr_linenumber" name="L274" href="#L274">274</a>         <em class="jxr_comment">// TypeVariable -&gt; TypeVariable</em>
    +<a class="jxr_linenumber" name="L275" href="#L275">275</a>         TypeVariable actualTypeVariable = (TypeVariable) types.typeMirror(
    +<a class="jxr_linenumber" name="L276" href="#L276">276</a>             ((ParameterizedType) List.<strong class="jxr_keyword">class</strong>.getGenericInterfaces()[0]).getActualTypeArguments()[0]
    +<a class="jxr_linenumber" name="L277" href="#L277">277</a>         );
    +<a class="jxr_linenumber" name="L278" href="#L278">278</a>         Assert.assertEquals(actualTypeVariable, types.typeElement(List.<strong class="jxr_keyword">class</strong>).getTypeParameters().get(0).asType());
    +<a class="jxr_linenumber" name="L279" href="#L279">279</a> 
    +<a class="jxr_linenumber" name="L280" href="#L280">280</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L281" href="#L281">281</a>             types.typeMirror(getClass().getMethod(<span class="jxr_string">"methodWithTypeParameter"</span>, Number.<strong class="jxr_keyword">class</strong>).getTypeParameters()[0]);
    +<a class="jxr_linenumber" name="L282" href="#L282">282</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L283" href="#L283">283</a>         } <strong class="jxr_keyword">catch</strong> (UnsupportedOperationException ignored) { }
    +<a class="jxr_linenumber" name="L284" href="#L284">284</a>     }
    +<a class="jxr_linenumber" name="L285" href="#L285">285</a> 
    +<a class="jxr_linenumber" name="L286" href="#L286">286</a>     @Test
    +<a class="jxr_linenumber" name="L287" href="#L287">287</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testToString() {
    +<a class="jxr_linenumber" name="L288" href="#L288">288</a>         <em class="jxr_comment">// PrimitiveType</em>
    +<a class="jxr_linenumber" name="L289" href="#L289">289</a>         <strong class="jxr_keyword">for</strong> (TypeKind primitive: Arrays.asList(TypeKind.DOUBLE, TypeKind.FLOAT, TypeKind.LONG, TypeKind.INT,
    +<a class="jxr_linenumber" name="L290" href="#L290">290</a>                 TypeKind.SHORT, TypeKind.BYTE, TypeKind.CHAR, TypeKind.BOOLEAN)) {
    +<a class="jxr_linenumber" name="L291" href="#L291">291</a>             PrimitiveType primitiveType = types.getPrimitiveType(primitive);
    +<a class="jxr_linenumber" name="L292" href="#L292">292</a>             Assert.assertEquals(types.getPrimitiveType(primitive).toString(), types.toString(primitiveType));
    +<a class="jxr_linenumber" name="L293" href="#L293">293</a>         }
    +<a class="jxr_linenumber" name="L294" href="#L294">294</a> 
    +<a class="jxr_linenumber" name="L295" href="#L295">295</a>         <em class="jxr_comment">// DeclaredType</em>
    +<a class="jxr_linenumber" name="L296" href="#L296">296</a>         DeclaredType declaredType = (DeclaredType) types.typeMirror(Integer.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L297" href="#L297">297</a>         Assert.assertEquals(declaredType.toString(), types.toString(declaredType));
    +<a class="jxr_linenumber" name="L298" href="#L298">298</a> 
    +<a class="jxr_linenumber" name="L299" href="#L299">299</a>         <em class="jxr_comment">// IntersectionType</em>
    +<a class="jxr_linenumber" name="L300" href="#L300">300</a>         IntersectionType intersectionType
    +<a class="jxr_linenumber" name="L301" href="#L301">301</a>             = types.getIntersectionType(types.typeMirror(Serializable.<strong class="jxr_keyword">class</strong>), types.typeMirror(Cloneable.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L302" href="#L302">302</a>         Assert.assertEquals(intersectionType.toString(), types.toString(intersectionType));
    +<a class="jxr_linenumber" name="L303" href="#L303">303</a> 
    +<a class="jxr_linenumber" name="L304" href="#L304">304</a>         <em class="jxr_comment">// WildcardType</em>
    +<a class="jxr_linenumber" name="L305" href="#L305">305</a>         WildcardType wildcardType = types.getWildcardType(types.typeMirror(Integer.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L306" href="#L306">306</a>         Assert.assertEquals(wildcardType.toString(), types.toString(wildcardType));
    +<a class="jxr_linenumber" name="L307" href="#L307">307</a> 
    +<a class="jxr_linenumber" name="L308" href="#L308">308</a>         <em class="jxr_comment">// NullType</em>
    +<a class="jxr_linenumber" name="L309" href="#L309">309</a>         NullType nullType = types.getNullType();
    +<a class="jxr_linenumber" name="L310" href="#L310">310</a>         Assert.assertEquals(nullType.toString(), types.toString(nullType));
    +<a class="jxr_linenumber" name="L311" href="#L311">311</a> 
    +<a class="jxr_linenumber" name="L312" href="#L312">312</a>         <em class="jxr_comment">// NoType</em>
    +<a class="jxr_linenumber" name="L313" href="#L313">313</a>         NoType noType = types.getNoType(TypeKind.VOID);
    +<a class="jxr_linenumber" name="L314" href="#L314">314</a>         Assert.assertEquals(noType.toString(), types.toString(noType));
    +<a class="jxr_linenumber" name="L315" href="#L315">315</a> 
    +<a class="jxr_linenumber" name="L316" href="#L316">316</a>         <em class="jxr_comment">// TypeVariable</em>
    +<a class="jxr_linenumber" name="L317" href="#L317">317</a>         TypeVariable typeVariable = (TypeVariable) types.typeElement(List.<strong class="jxr_keyword">class</strong>).getTypeParameters().get(0).asType();
    +<a class="jxr_linenumber" name="L318" href="#L318">318</a>         Assert.assertEquals(typeVariable.toString(), types.toString(typeVariable));
    +<a class="jxr_linenumber" name="L319" href="#L319">319</a>     }
    +<a class="jxr_linenumber" name="L320" href="#L320">320</a> 
    +<a class="jxr_linenumber" name="L321" href="#L321">321</a>     @Test
    +<a class="jxr_linenumber" name="L322" href="#L322">322</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> requireCondition() {
    +<a class="jxr_linenumber" name="L323" href="#L323">323</a>         ReflectionTypes.requireCondition(<strong class="jxr_keyword">true</strong>, <span class="jxr_string">"Message: %s"</span>, 24);
    +<a class="jxr_linenumber" name="L324" href="#L324">324</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L325" href="#L325">325</a>             ReflectionTypes.requireCondition(false, <span class="jxr_string">"Message: %s"</span>, 24);
    +<a class="jxr_linenumber" name="L326" href="#L326">326</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L327" href="#L327">327</a>         } <strong class="jxr_keyword">catch</strong> (IllegalStateException exception) {
    +<a class="jxr_linenumber" name="L328" href="#L328">328</a>             Assert.assertEquals(exception.getMessage(), <span class="jxr_string">"Message: 24"</span>);
    +<a class="jxr_linenumber" name="L329" href="#L329">329</a>         }
    +<a class="jxr_linenumber" name="L330" href="#L330">330</a>     }
    +<a class="jxr_linenumber" name="L331" href="#L331">331</a> 
    +<a class="jxr_linenumber" name="L332" href="#L332">332</a>     @Test(expectedExceptions = UnsupportedOperationException.<strong class="jxr_keyword">class</strong>)
    +<a class="jxr_linenumber" name="L333" href="#L333">333</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIsAssignable() {
    +<a class="jxr_linenumber" name="L334" href="#L334">334</a>         types.isAssignable(types.getPrimitiveType(TypeKind.INT), types.getPrimitiveType(TypeKind.LONG));
    +<a class="jxr_linenumber" name="L335" href="#L335">335</a>     }
    +<a class="jxr_linenumber" name="L336" href="#L336">336</a> 
    +<a class="jxr_linenumber" name="L337" href="#L337">337</a>     @Test(expectedExceptions = UnsupportedOperationException.<strong class="jxr_keyword">class</strong>)
    +<a class="jxr_linenumber" name="L338" href="#L338">338</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> directSupertypes() {
    +<a class="jxr_linenumber" name="L339" href="#L339">339</a>         types.directSupertypes(types.getPrimitiveType(TypeKind.INT));
    +<a class="jxr_linenumber" name="L340" href="#L340">340</a>     }
    +<a class="jxr_linenumber" name="L341" href="#L341">341</a> 
    +<a class="jxr_linenumber" name="L342" href="#L342">342</a>     @Test(expectedExceptions = UnsupportedOperationException.<strong class="jxr_keyword">class</strong>)
    +<a class="jxr_linenumber" name="L343" href="#L343">343</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> asMemberOf() {
    +<a class="jxr_linenumber" name="L344" href="#L344">344</a>         TypeElement listDeclaration = types.typeElement(List.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L345" href="#L345">345</a>         types.asMemberOf(
    +<a class="jxr_linenumber" name="L346" href="#L346">346</a>             types.getDeclaredType(listDeclaration, types.typeMirror(String.<strong class="jxr_keyword">class</strong>)),
    +<a class="jxr_linenumber" name="L347" href="#L347">347</a>             listDeclaration.getTypeParameters().get(0)
    +<a class="jxr_linenumber" name="L348" href="#L348">348</a>         );
    +<a class="jxr_linenumber" name="L349" href="#L349">349</a>     }
    +<a class="jxr_linenumber" name="L350" href="#L350">350</a> }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref-test/net/florianschoppmann/java/reflect/package-frame.html b/xref-test/net/florianschoppmann/java/reflect/package-frame.html
    new file mode 100644
    index 0000000..338b534
    --- /dev/null
    +++ b/xref-test/net/florianschoppmann/java/reflect/package-frame.html
    @@ -0,0 +1,48 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference Package net.florianschoppmann.java.reflect</title>
    +		<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +
    +		<h3>
    +        	<a href="package-summary.html" target="classFrame">net.florianschoppmann.java.reflect</a>
    +      	</h3>
    +
    +      	<h3>Classes</h3>
    +
    +      	<ul>
    +      		          	<li>
    +            	<a href="ReflectionTypesTest.html" target="classFrame"></a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ReflectionTypesTest.html" target="classFrame">ClassElementVisitor</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ImmutableListTest.html" target="classFrame">ImmutableListTest</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ReflectionTypesTest.html" target="classFrame">InnerClass</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ReflectionTypesTest.html" target="classFrame">OuterClass</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ReflectionTypesTest.html" target="classFrame">Provider</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ReflectionTypesTest.html" target="classFrame">ReflectionTypesTest</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ReflectionTypesTest.html" target="classFrame">ThrowingInvocationHandler</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ReflectionTypesTest.html" target="classFrame">TypeToken</a>
    +          	</li>
    +          	      	</ul>
    +
    +	</body>
    +</html>
    \ No newline at end of file
    diff --git a/xref-test/net/florianschoppmann/java/reflect/package-summary.html b/xref-test/net/florianschoppmann/java/reflect/package-summary.html
    new file mode 100644
    index 0000000..cdbcd0f
    --- /dev/null
    +++ b/xref-test/net/florianschoppmann/java/reflect/package-summary.html
    @@ -0,0 +1,109 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference Package net.florianschoppmann.java.reflect</title>
    +		<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +		      	<div class="overview">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../overview-summary.html">Overview</a>
    +          		</li>
    +          		<li class="selected">Package</li>
    +        	</ul>
    +      	</div>
    +      	<div class="framenoframe">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../index.html" target="_top">FRAMES</a>
    +          		</li>
    +          		<li>
    +            		<a href="package-summary.html" target="_top">NO FRAMES</a>
    +          		</li>
    +        	</ul>
    +      	</div>
    +		
    +		      	<h2>Package net.florianschoppmann.java.reflect</h2>
    +
    +		<table class="summary">
    +        	<thead>
    +          		<tr>
    +            		<th>Class Summary</th>
    +          		</tr>
    +        	</thead>
    +        	<tbody>
    +        		            	<tr>
    +              		<td>
    +                		<a href="ReflectionTypesTest.html" target="classFrame"></a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ReflectionTypesTest.html" target="classFrame">ClassElementVisitor</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ImmutableListTest.html" target="classFrame">ImmutableListTest</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ReflectionTypesTest.html" target="classFrame">InnerClass</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ReflectionTypesTest.html" target="classFrame">OuterClass</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ReflectionTypesTest.html" target="classFrame">Provider</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ReflectionTypesTest.html" target="classFrame">ReflectionTypesTest</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ReflectionTypesTest.html" target="classFrame">ThrowingInvocationHandler</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ReflectionTypesTest.html" target="classFrame">TypeToken</a>
    +              		</td>
    +            	</tr>
    +				        	</tbody>
    +      	</table>
    +		
    +		      	<div class="overview">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../overview-summary.html">Overview</a>
    +          		</li>
    +          		<li class="selected">Package</li>
    +        	</ul>
    +      	</div>
    +      	<div class="framenoframe">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../index.html" target="_top">FRAMES</a>
    +          		</li>
    +          		<li>
    +            		<a href="package-summary.html" target="_top">NO FRAMES</a>
    +          		</li>
    +        	</ul>
    +      	</div>
    +				<hr />
    +		<div id="footer">
    +			Copyright &#169; 2014&#x2013;2015. All rights reserved.
    +		</div>
    +	</body>
    +</html>
    \ No newline at end of file
    diff --git a/xref-test/net/florianschoppmann/java/type/AbstractTypesContract.html b/xref-test/net/florianschoppmann/java/type/AbstractTypesContract.html
    new file mode 100644
    index 0000000..b59ae77
    --- /dev/null
    +++ b/xref-test/net/florianschoppmann/java/type/AbstractTypesContract.html
    @@ -0,0 +1,1329 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>AbstractTypesContract xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../testapidocs/net/florianschoppmann/java/type/AbstractTypesContract.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.type;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> org.testng.Assert;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> org.testng.ITest;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> org.testng.annotations.BeforeClass;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> org.testng.annotations.Test;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.TypeElement;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.TypeParameterElement;
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.DeclaredType;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.PrimitiveType;
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeMirror;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVariable;
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.WildcardType;
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <strong class="jxr_keyword">import</strong> java.io.Serializable;
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <strong class="jxr_keyword">import</strong> java.util.Arrays;
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <strong class="jxr_keyword">import</strong> java.util.Collection;
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <strong class="jxr_keyword">import</strong> java.util.Collections;
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <strong class="jxr_keyword">import</strong> java.util.LinkedHashMap;
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  <strong class="jxr_keyword">import</strong> java.util.Set;
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.testng.Assert.assertEquals;
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.testng.Assert.assertFalse;
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.testng.Assert.assertNull;
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.testng.Assert.assertTrue;
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment"> * Contract test for {@link AbstractTypes}.</em>
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;This class should be instantiated and returned by a TestNG factory method (that is, a method annotated with</em>
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * {@link org.testng.annotations.Factory}).</em>
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">AbstractTypesContract</a> <strong class="jxr_keyword">implements</strong> ITest {
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html">AbstractTypesProvider</a> provider;
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <strong class="jxr_keyword">private</strong> AbstractTypes types;
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;Class&lt;?&gt;, TypeElement&gt; typeElementMap = <strong class="jxr_keyword">new</strong> LinkedHashMap&lt;&gt;();
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     * Constructs a new contract-test instance with the given provider.</em>
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * @param provider provider of {@link AbstractTypes} instance, must not be null</em>
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     * @throws NullPointerException if the argument is null</em>
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">AbstractTypesContract</a>(<a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html">AbstractTypesProvider</a> provider) {
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>          Objects.requireNonNull(provider);
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          <strong class="jxr_keyword">this</strong>.provider = provider;
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      }
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      @Override
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">public</strong> String getTestName() {
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          <strong class="jxr_keyword">return</strong> provider.getClass().getName();
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      }
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      <strong class="jxr_keyword">final</strong> TypeElement element(Class&lt;?&gt; clazz) {
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          <strong class="jxr_keyword">return</strong> Objects.requireNonNull(typeElementMap.get(clazz));
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      }
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      <strong class="jxr_keyword">private</strong> PrimitiveType primitiveType(Class&lt;?&gt; clazz) {
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>          assert clazz.isPrimitive();
    +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  
    +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          <strong class="jxr_keyword">if</strong> (clazz.equals(<strong class="jxr_keyword">double</strong>.<strong class="jxr_keyword">class</strong>)) {
    +<a class="jxr_linenumber" name="L68" href="#L68">68</a>              <strong class="jxr_keyword">return</strong> types.getPrimitiveType(TypeKind.DOUBLE);
    +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (clazz.equals(<strong class="jxr_keyword">float</strong>.<strong class="jxr_keyword">class</strong>)) {
    +<a class="jxr_linenumber" name="L70" href="#L70">70</a>              <strong class="jxr_keyword">return</strong> types.getPrimitiveType(TypeKind.FLOAT);
    +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (clazz.equals(<strong class="jxr_keyword">long</strong>.<strong class="jxr_keyword">class</strong>)) {
    +<a class="jxr_linenumber" name="L72" href="#L72">72</a>              <strong class="jxr_keyword">return</strong> types.getPrimitiveType(TypeKind.LONG);
    +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (clazz.equals(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>)) {
    +<a class="jxr_linenumber" name="L74" href="#L74">74</a>              <strong class="jxr_keyword">return</strong> types.getPrimitiveType(TypeKind.INT);
    +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (clazz.equals(<strong class="jxr_keyword">short</strong>.<strong class="jxr_keyword">class</strong>)) {
    +<a class="jxr_linenumber" name="L76" href="#L76">76</a>              <strong class="jxr_keyword">return</strong> types.getPrimitiveType(TypeKind.SHORT);
    +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (clazz.equals(byte.<strong class="jxr_keyword">class</strong>)) {
    +<a class="jxr_linenumber" name="L78" href="#L78">78</a>              <strong class="jxr_keyword">return</strong> types.getPrimitiveType(TypeKind.BYTE);
    +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (clazz.equals(<strong class="jxr_keyword">boolean</strong>.<strong class="jxr_keyword">class</strong>)) {
    +<a class="jxr_linenumber" name="L80" href="#L80">80</a>              <strong class="jxr_keyword">return</strong> types.getPrimitiveType(TypeKind.BOOLEAN);
    +<a class="jxr_linenumber" name="L81" href="#L81">81</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (clazz.equals(<strong class="jxr_keyword">char</strong>.<strong class="jxr_keyword">class</strong>)) {
    +<a class="jxr_linenumber" name="L82" href="#L82">82</a>              <strong class="jxr_keyword">return</strong> types.getPrimitiveType(TypeKind.CHAR);
    +<a class="jxr_linenumber" name="L83" href="#L83">83</a>          } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L84" href="#L84">84</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(String.format(<span class="jxr_string">"Unexpected primitive type: %s"</span>, clazz));
    +<a class="jxr_linenumber" name="L85" href="#L85">85</a>          }
    +<a class="jxr_linenumber" name="L86" href="#L86">86</a>      }
    +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  
    +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     * Returns the type mirror corresponding to the given {@link Class} object.</em>
    +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;If the given class is a generic declaration, the returned type will be a raw type (by calling</em>
    +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     * {@link AbstractTypes#getDeclaredType(TypeElement, TypeMirror...)} with an empty list of type arguments).</em>
    +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">     * @param clazz the {@link Class} object</em>
    +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  <em class="jxr_javadoccomment">     * @return the type mirror</em>
    +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L97" href="#L97">97</a>      <strong class="jxr_keyword">private</strong> TypeMirror type(Class&lt;?&gt; clazz) {
    +<a class="jxr_linenumber" name="L98" href="#L98">98</a>          <strong class="jxr_keyword">if</strong> (clazz.isPrimitive()) {
    +<a class="jxr_linenumber" name="L99" href="#L99">99</a>              <strong class="jxr_keyword">return</strong> primitiveType(clazz);
    +<a class="jxr_linenumber" name="L100" href="#L100">100</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (clazz.isArray()) {
    +<a class="jxr_linenumber" name="L101" href="#L101">101</a>             <strong class="jxr_keyword">return</strong> types.getArrayType(type(clazz.getComponentType()));
    +<a class="jxr_linenumber" name="L102" href="#L102">102</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (typeElementMap.containsKey(clazz)) {
    +<a class="jxr_linenumber" name="L103" href="#L103">103</a>             <em class="jxr_comment">// If clazz represents a generic type declaration, this method returns the raw type.</em>
    +<a class="jxr_linenumber" name="L104" href="#L104">104</a>             <strong class="jxr_keyword">return</strong> types.getDeclaredType(typeElementMap.get(clazz));
    +<a class="jxr_linenumber" name="L105" href="#L105">105</a>         }
    +<a class="jxr_linenumber" name="L106" href="#L106">106</a> 
    +<a class="jxr_linenumber" name="L107" href="#L107">107</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(String.format(<span class="jxr_string">"Unexpected type: %s"</span>, clazz));
    +<a class="jxr_linenumber" name="L108" href="#L108">108</a>     }
    +<a class="jxr_linenumber" name="L109" href="#L109">109</a> 
    +<a class="jxr_linenumber" name="L110" href="#L110">110</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">SimpleA</a> { }
    +<a class="jxr_linenumber" name="L111" href="#L111">111</a> 
    +<a class="jxr_linenumber" name="L112" href="#L112">112</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">SimpleB</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">SimpleA</a> { }
    +<a class="jxr_linenumber" name="L113" href="#L113">113</a> 
    +<a class="jxr_linenumber" name="L114" href="#L114">114</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">SimpleC</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">SimpleB</a> { }
    +<a class="jxr_linenumber" name="L115" href="#L115">115</a> 
    +<a class="jxr_linenumber" name="L116" href="#L116">116</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> SimpleParameterized&lt;T&gt; <strong class="jxr_keyword">extends</strong> Serializable { }
    +<a class="jxr_linenumber" name="L117" href="#L117">117</a> 
    +<a class="jxr_linenumber" name="L118" href="#L118">118</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> ExtendsParameterized&lt;T <strong class="jxr_keyword">extends</strong> SimpleC&gt; { }
    +<a class="jxr_linenumber" name="L119" href="#L119">119</a> 
    +<a class="jxr_linenumber" name="L120" href="#L120">120</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> SubExtendsParameterized&lt;T <strong class="jxr_keyword">extends</strong> SimpleC&gt; <strong class="jxr_keyword">extends</strong> ExtendsParameterized&lt;T&gt; { }
    +<a class="jxr_linenumber" name="L121" href="#L121">121</a> 
    +<a class="jxr_linenumber" name="L122" href="#L122">122</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> RawSubExtendsParameterized&lt;T&gt; <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">ExtendsParameterized</a> { }
    +<a class="jxr_linenumber" name="L123" href="#L123">123</a> 
    +<a class="jxr_linenumber" name="L124" href="#L124">124</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> DiamondA&lt;T, U&gt; { }
    +<a class="jxr_linenumber" name="L125" href="#L125">125</a> 
    +<a class="jxr_linenumber" name="L126" href="#L126">126</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> DiamondB&lt;T&gt; <strong class="jxr_keyword">extends</strong> DiamondA&lt;T[], Integer[]&gt; { }
    +<a class="jxr_linenumber" name="L127" href="#L127">127</a> 
    +<a class="jxr_linenumber" name="L128" href="#L128">128</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> DiamondC&lt;U&gt; <strong class="jxr_keyword">extends</strong> DiamondA&lt;String[], U[]&gt; { }
    +<a class="jxr_linenumber" name="L129" href="#L129">129</a> 
    +<a class="jxr_linenumber" name="L130" href="#L130">130</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">DiamondD</a> <strong class="jxr_keyword">extends</strong> DiamondB&lt;String&gt;, DiamondC&lt;Integer&gt; { }
    +<a class="jxr_linenumber" name="L131" href="#L131">131</a> 
    +<a class="jxr_linenumber" name="L132" href="#L132">132</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> SubDiamondB&lt;T&gt; <strong class="jxr_keyword">extends</strong> DiamondB&lt;T[]&gt; { }
    +<a class="jxr_linenumber" name="L133" href="#L133">133</a> 
    +<a class="jxr_linenumber" name="L134" href="#L134">134</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">SubSubDiamondB</a> <strong class="jxr_keyword">extends</strong> SubDiamondB&lt;Integer[]&gt; { }
    +<a class="jxr_linenumber" name="L135" href="#L135">135</a> 
    +<a class="jxr_linenumber" name="L136" href="#L136">136</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">IntegerListSet</a> <strong class="jxr_keyword">implements</strong> Set&lt;List&lt;Integer&gt;&gt;, Comparable&lt;IntegerListSet&gt; { }
    +<a class="jxr_linenumber" name="L137" href="#L137">137</a> 
    +<a class="jxr_linenumber" name="L138" href="#L138">138</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">ImmutableIntegerListSet</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">IntegerListSet</a> { }
    +<a class="jxr_linenumber" name="L139" href="#L139">139</a> 
    +<a class="jxr_linenumber" name="L140" href="#L140">140</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> InterdependentRecursiveBoundA&lt;
    +<a class="jxr_linenumber" name="L141" href="#L141">141</a>         T <strong class="jxr_keyword">extends</strong> InterdependentRecursiveBoundA&lt;T, U&gt;,
    +<a class="jxr_linenumber" name="L142" href="#L142">142</a>         U <strong class="jxr_keyword">extends</strong> T
    +<a class="jxr_linenumber" name="L143" href="#L143">143</a>     &gt; { }
    +<a class="jxr_linenumber" name="L144" href="#L144">144</a> 
    +<a class="jxr_linenumber" name="L145" href="#L145">145</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesContract.html">InterdependentRecursiveBoundB</a>
    +<a class="jxr_linenumber" name="L146" href="#L146">146</a>             <strong class="jxr_keyword">extends</strong> InterdependentRecursiveBoundA&lt;InterdependentRecursiveBoundB, InterdependentRecursiveBoundB&gt;
    +<a class="jxr_linenumber" name="L147" href="#L147">147</a>             <strong class="jxr_keyword">implements</strong> Serializable {
    +<a class="jxr_linenumber" name="L148" href="#L148">148</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> serialVersionUID = -4490638717891611814L;
    +<a class="jxr_linenumber" name="L149" href="#L149">149</a>     }
    +<a class="jxr_linenumber" name="L150" href="#L150">150</a> 
    +<a class="jxr_linenumber" name="L151" href="#L151">151</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> OuterClass&lt;T <strong class="jxr_keyword">extends</strong> Number&gt; {
    +<a class="jxr_linenumber" name="L152" href="#L152">152</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> InnerClass&lt;U <strong class="jxr_keyword">extends</strong> List&lt;?&gt; &amp; Serializable&gt; { }
    +<a class="jxr_linenumber" name="L153" href="#L153">153</a>     }
    +<a class="jxr_linenumber" name="L154" href="#L154">154</a> 
    +<a class="jxr_linenumber" name="L155" href="#L155">155</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L156" href="#L156">156</a> <em class="jxr_javadoccomment">     * Performs initialization steps necessary in order to run the contract tests subsequently.</em>
    +<a class="jxr_linenumber" name="L157" href="#L157">157</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L158" href="#L158">158</a>     @BeforeClass
    +<a class="jxr_linenumber" name="L159" href="#L159">159</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setup() {
    +<a class="jxr_linenumber" name="L160" href="#L160">160</a>         provider.preContract();
    +<a class="jxr_linenumber" name="L161" href="#L161">161</a> 
    +<a class="jxr_linenumber" name="L162" href="#L162">162</a>         List&lt;Class&lt;?&gt;&gt; classesNeeded = Arrays.asList(
    +<a class="jxr_linenumber" name="L163" href="#L163">163</a>             Object.<strong class="jxr_keyword">class</strong>, Enum.<strong class="jxr_keyword">class</strong>, Cloneable.<strong class="jxr_keyword">class</strong>, Serializable.<strong class="jxr_keyword">class</strong>, Comparable.<strong class="jxr_keyword">class</strong>,
    +<a class="jxr_linenumber" name="L164" href="#L164">164</a>             Collection.<strong class="jxr_keyword">class</strong>, List.<strong class="jxr_keyword">class</strong>, ArrayList.<strong class="jxr_keyword">class</strong>, Set.<strong class="jxr_keyword">class</strong>,
    +<a class="jxr_linenumber" name="L165" href="#L165">165</a>             Number.<strong class="jxr_keyword">class</strong>, Integer.<strong class="jxr_keyword">class</strong>,
    +<a class="jxr_linenumber" name="L166" href="#L166">166</a>             String.<strong class="jxr_keyword">class</strong>,
    +<a class="jxr_linenumber" name="L167" href="#L167">167</a>             getClass(),
    +<a class="jxr_linenumber" name="L168" href="#L168">168</a>             IntegerListSet.<strong class="jxr_keyword">class</strong>, ImmutableIntegerListSet.<strong class="jxr_keyword">class</strong>,
    +<a class="jxr_linenumber" name="L169" href="#L169">169</a>             DiamondA.<strong class="jxr_keyword">class</strong>, DiamondB.<strong class="jxr_keyword">class</strong>, DiamondC.<strong class="jxr_keyword">class</strong>, DiamondD.<strong class="jxr_keyword">class</strong>, SubDiamondB.<strong class="jxr_keyword">class</strong>, SubSubDiamondB.<strong class="jxr_keyword">class</strong>,
    +<a class="jxr_linenumber" name="L170" href="#L170">170</a>             SimpleA.<strong class="jxr_keyword">class</strong>, SimpleB.<strong class="jxr_keyword">class</strong>, SimpleC.<strong class="jxr_keyword">class</strong>,
    +<a class="jxr_linenumber" name="L171" href="#L171">171</a>             ExtendsParameterized.<strong class="jxr_keyword">class</strong>, SubExtendsParameterized.<strong class="jxr_keyword">class</strong>,
    +<a class="jxr_linenumber" name="L172" href="#L172">172</a>             RawSubExtendsParameterized.<strong class="jxr_keyword">class</strong>,
    +<a class="jxr_linenumber" name="L173" href="#L173">173</a>             SimpleParameterized.<strong class="jxr_keyword">class</strong>,
    +<a class="jxr_linenumber" name="L174" href="#L174">174</a>             InterdependentRecursiveBoundA.<strong class="jxr_keyword">class</strong>, InterdependentRecursiveBoundB.<strong class="jxr_keyword">class</strong>,
    +<a class="jxr_linenumber" name="L175" href="#L175">175</a>             OuterClass.<strong class="jxr_keyword">class</strong>, OuterClass.InnerClass.<strong class="jxr_keyword">class</strong>
    +<a class="jxr_linenumber" name="L176" href="#L176">176</a>         );
    +<a class="jxr_linenumber" name="L177" href="#L177">177</a> 
    +<a class="jxr_linenumber" name="L178" href="#L178">178</a>         <strong class="jxr_keyword">for</strong> (Class&lt;?&gt; clazz: classesNeeded) {
    +<a class="jxr_linenumber" name="L179" href="#L179">179</a>             typeElementMap.put(clazz, <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L180" href="#L180">180</a>         }
    +<a class="jxr_linenumber" name="L181" href="#L181">181</a> 
    +<a class="jxr_linenumber" name="L182" href="#L182">182</a>         types = provider.getTypes(typeElementMap);
    +<a class="jxr_linenumber" name="L183" href="#L183">183</a>     }
    +<a class="jxr_linenumber" name="L184" href="#L184">184</a> 
    +<a class="jxr_linenumber" name="L185" href="#L185">185</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L186" href="#L186">186</a> <em class="jxr_javadoccomment">     * Verifies the {@link TypeElement} instances in {@link #typeElementMap}.</em>
    +<a class="jxr_linenumber" name="L187" href="#L187">187</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L188" href="#L188">188</a> <em class="jxr_javadoccomment">     * &lt;p&gt;The following is verified:</em>
    +<a class="jxr_linenumber" name="L189" href="#L189">189</a> <em class="jxr_javadoccomment">     * &lt;ul&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L190" href="#L190">190</a> <em class="jxr_javadoccomment">     *     {@link TypeElement#asType()} returns "a &lt;i&gt;prototypical&lt;/i&gt; type" which is "the element's invocation on the</em>
    +<a class="jxr_linenumber" name="L191" href="#L191">191</a> <em class="jxr_javadoccomment">     *     type variables corresponding to its own formal type parameters".</em>
    +<a class="jxr_linenumber" name="L192" href="#L192">192</a> <em class="jxr_javadoccomment">     * &lt;/li&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L193" href="#L193">193</a> <em class="jxr_javadoccomment">     *     {@link #type(Class)} returns a raw type if the given class object represents a generic type declaration.</em>
    +<a class="jxr_linenumber" name="L194" href="#L194">194</a> <em class="jxr_javadoccomment">     * &lt;/li&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L195" href="#L195">195</a> <em class="jxr_javadoccomment">     *     Passing the raw type returned by {@link #type(Class)} to</em>
    +<a class="jxr_linenumber" name="L196" href="#L196">196</a> <em class="jxr_javadoccomment">     *     {@link AbstractTypes#toString(TypeMirror)} yields a string equal to the class's name.</em>
    +<a class="jxr_linenumber" name="L197" href="#L197">197</a> <em class="jxr_javadoccomment">     * &lt;/li&gt;&lt;/ul&gt;</em>
    +<a class="jxr_linenumber" name="L198" href="#L198">198</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L199" href="#L199">199</a>     @Test
    +<a class="jxr_linenumber" name="L200" href="#L200">200</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testSetup() {
    +<a class="jxr_linenumber" name="L201" href="#L201">201</a>         <strong class="jxr_keyword">for</strong> (Map.Entry&lt;Class&lt;?&gt;, TypeElement&gt; entry: typeElementMap.entrySet()) {
    +<a class="jxr_linenumber" name="L202" href="#L202">202</a>             Class&lt;?&gt; clazz = entry.getKey();
    +<a class="jxr_linenumber" name="L203" href="#L203">203</a>             TypeElement typeElement = entry.getValue();
    +<a class="jxr_linenumber" name="L204" href="#L204">204</a> 
    +<a class="jxr_linenumber" name="L205" href="#L205">205</a>             assertTrue(typeElement.getKind().isClass() || typeElement.getKind().isInterface());
    +<a class="jxr_linenumber" name="L206" href="#L206">206</a>             DeclaredType prototypicalType = (DeclaredType) typeElement.asType();
    +<a class="jxr_linenumber" name="L207" href="#L207">207</a>             assertEquals(typeElement.getTypeParameters().size(), prototypicalType.getTypeArguments().size());
    +<a class="jxr_linenumber" name="L208" href="#L208">208</a> 
    +<a class="jxr_linenumber" name="L209" href="#L209">209</a>             <strong class="jxr_keyword">for</strong> (TypeMirror typeArgument: prototypicalType.getTypeArguments()) {
    +<a class="jxr_linenumber" name="L210" href="#L210">210</a>                 assertTrue(typeArgument.getKind() == TypeKind.TYPEVAR &amp;&amp; typeArgument instanceof TypeVariable);
    +<a class="jxr_linenumber" name="L211" href="#L211">211</a>             }
    +<a class="jxr_linenumber" name="L212" href="#L212">212</a> 
    +<a class="jxr_linenumber" name="L213" href="#L213">213</a>             DeclaredType rawType = (DeclaredType) type(clazz);
    +<a class="jxr_linenumber" name="L214" href="#L214">214</a>             assertTrue(rawType.getTypeArguments().isEmpty());
    +<a class="jxr_linenumber" name="L215" href="#L215">215</a> 
    +<a class="jxr_linenumber" name="L216" href="#L216">216</a>             assertEquals(clazz.getCanonicalName(), types.toString(rawType));
    +<a class="jxr_linenumber" name="L217" href="#L217">217</a>         }
    +<a class="jxr_linenumber" name="L218" href="#L218">218</a>     }
    +<a class="jxr_linenumber" name="L219" href="#L219">219</a> 
    +<a class="jxr_linenumber" name="L220" href="#L220">220</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L221" href="#L221">221</a> <em class="jxr_javadoccomment">     * Verifies that {@link AbstractTypes#requireValidElement(javax.lang.model.element.Element)} throws a</em>
    +<a class="jxr_linenumber" name="L222" href="#L222">222</a> <em class="jxr_javadoccomment">     * {@link NullPointerException} if passed null.</em>
    +<a class="jxr_linenumber" name="L223" href="#L223">223</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L224" href="#L224">224</a>     @Test(expectedExceptions = NullPointerException.<strong class="jxr_keyword">class</strong>)
    +<a class="jxr_linenumber" name="L225" href="#L225">225</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> requireValidElement() {
    +<a class="jxr_linenumber" name="L226" href="#L226">226</a>         types.requireValidElement(<strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L227" href="#L227">227</a>     }
    +<a class="jxr_linenumber" name="L228" href="#L228">228</a> 
    +<a class="jxr_linenumber" name="L229" href="#L229">229</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L230" href="#L230">230</a> <em class="jxr_javadoccomment">     * Verifies that {@link AbstractTypes#requireValidType(TypeMirror)} does not throw an</em>
    +<a class="jxr_linenumber" name="L231" href="#L231">231</a> <em class="jxr_javadoccomment">     * exception if passed null.</em>
    +<a class="jxr_linenumber" name="L232" href="#L232">232</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L233" href="#L233">233</a>     @Test
    +<a class="jxr_linenumber" name="L234" href="#L234">234</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> requireValidType() {
    +<a class="jxr_linenumber" name="L235" href="#L235">235</a>         types.requireValidType(<strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L236" href="#L236">236</a>     }
    +<a class="jxr_linenumber" name="L237" href="#L237">237</a> 
    +<a class="jxr_linenumber" name="L238" href="#L238">238</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L239" href="#L239">239</a> <em class="jxr_javadoccomment">     * Verifies that {@link AbstractTypes#requireValidTypes(TypeMirror[])} throws exceptions if</em>
    +<a class="jxr_linenumber" name="L240" href="#L240">240</a> <em class="jxr_javadoccomment">     * passed null or an array with null element.</em>
    +<a class="jxr_linenumber" name="L241" href="#L241">241</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L242" href="#L242">242</a>     @Test
    +<a class="jxr_linenumber" name="L243" href="#L243">243</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> requireValidTypes() {
    +<a class="jxr_linenumber" name="L244" href="#L244">244</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L245" href="#L245">245</a>             types.requireValidTypes(<strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L246" href="#L246">246</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L247" href="#L247">247</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignored) { }
    +<a class="jxr_linenumber" name="L248" href="#L248">248</a> 
    +<a class="jxr_linenumber" name="L249" href="#L249">249</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L250" href="#L250">250</a>             types.requireValidTypes(<strong class="jxr_keyword">new</strong> TypeMirror[] { <strong class="jxr_keyword">null</strong> });
    +<a class="jxr_linenumber" name="L251" href="#L251">251</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L252" href="#L252">252</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignored) { }
    +<a class="jxr_linenumber" name="L253" href="#L253">253</a>     }
    +<a class="jxr_linenumber" name="L254" href="#L254">254</a> 
    +<a class="jxr_linenumber" name="L255" href="#L255">255</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> typeMirrorAssertExpectedName(TypeMirror typeMirror, Class&lt;?&gt; clazz) {
    +<a class="jxr_linenumber" name="L256" href="#L256">256</a>         assertEquals(typeMirror.getKind(), TypeKind.DECLARED);
    +<a class="jxr_linenumber" name="L257" href="#L257">257</a>         TypeElement element = (TypeElement) ((DeclaredType) typeMirror).asElement();
    +<a class="jxr_linenumber" name="L258" href="#L258">258</a>         assertEquals(element.getQualifiedName().toString(), clazz.getName());
    +<a class="jxr_linenumber" name="L259" href="#L259">259</a>     }
    +<a class="jxr_linenumber" name="L260" href="#L260">260</a> 
    +<a class="jxr_linenumber" name="L261" href="#L261">261</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L262" href="#L262">262</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#typeMirror(java.lang.reflect.Type)}.</em>
    +<a class="jxr_linenumber" name="L263" href="#L263">263</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L264" href="#L264">264</a>     @Test
    +<a class="jxr_linenumber" name="L265" href="#L265">265</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> typeMirror() {
    +<a class="jxr_linenumber" name="L266" href="#L266">266</a>         typeMirrorAssertExpectedName(types.typeMirror(Object.<strong class="jxr_keyword">class</strong>), Object.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L267" href="#L267">267</a>         typeMirrorAssertExpectedName(types.typeMirror(Serializable.<strong class="jxr_keyword">class</strong>), Serializable.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L268" href="#L268">268</a>         typeMirrorAssertExpectedName(types.typeMirror(Cloneable.<strong class="jxr_keyword">class</strong>), Cloneable.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L269" href="#L269">269</a>     }
    +<a class="jxr_linenumber" name="L270" href="#L270">270</a> 
    +<a class="jxr_linenumber" name="L271" href="#L271">271</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L272" href="#L272">272</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#substitute(TypeMirror, Map)}.</em>
    +<a class="jxr_linenumber" name="L273" href="#L273">273</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L274" href="#L274">274</a>     @Test
    +<a class="jxr_linenumber" name="L275" href="#L275">275</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> substitute() {
    +<a class="jxr_linenumber" name="L276" href="#L276">276</a>         TypeElement diamondADeclaration = element(DiamondA.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L277" href="#L277">277</a>         Map&lt;TypeParameterElement, TypeMirror&gt; substitutions = <strong class="jxr_keyword">new</strong> LinkedHashMap&lt;&gt;();
    +<a class="jxr_linenumber" name="L278" href="#L278">278</a>         substitutions.put(diamondADeclaration.getTypeParameters().get(0), type(String.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L279" href="#L279">279</a>         DeclaredType expectedType = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L280" href="#L280">280</a>             (DeclaredType) type(getClass()),
    +<a class="jxr_linenumber" name="L281" href="#L281">281</a>             diamondADeclaration,
    +<a class="jxr_linenumber" name="L282" href="#L282">282</a>             type(String.<strong class="jxr_keyword">class</strong>), diamondADeclaration.getTypeParameters().get(1).asType()
    +<a class="jxr_linenumber" name="L283" href="#L283">283</a>         );
    +<a class="jxr_linenumber" name="L284" href="#L284">284</a>         assertEquals(types.substitute(diamondADeclaration.asType(), substitutions), expectedType);
    +<a class="jxr_linenumber" name="L285" href="#L285">285</a> 
    +<a class="jxr_linenumber" name="L286" href="#L286">286</a>         WildcardType extendsStringWildcardArgument = types.getWildcardType(type(String.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L287" href="#L287">287</a>         assertEquals(types.substitute(extendsStringWildcardArgument, substitutions), extendsStringWildcardArgument);
    +<a class="jxr_linenumber" name="L288" href="#L288">288</a>     }
    +<a class="jxr_linenumber" name="L289" href="#L289">289</a> 
    +<a class="jxr_linenumber" name="L290" href="#L290">290</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L291" href="#L291">291</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#resolveActualTypeArguments(TypeElement, TypeMirror)} when the second argument is</em>
    +<a class="jxr_linenumber" name="L292" href="#L292">292</a> <em class="jxr_javadoccomment">     * a generic type, a non-generic type, or a primitive type.</em>
    +<a class="jxr_linenumber" name="L293" href="#L293">293</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L294" href="#L294">294</a>     @Test
    +<a class="jxr_linenumber" name="L295" href="#L295">295</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> resolveActualTypeArguments() {
    +<a class="jxr_linenumber" name="L296" href="#L296">296</a>         <em class="jxr_comment">// Verify edge case: resolving type arguments on the same type</em>
    +<a class="jxr_linenumber" name="L297" href="#L297">297</a>         assertEquals(types.resolveActualTypeArguments(element(List.<strong class="jxr_keyword">class</strong>), type(List.<strong class="jxr_keyword">class</strong>)), Collections.emptyList());
    +<a class="jxr_linenumber" name="L298" href="#L298">298</a> 
    +<a class="jxr_linenumber" name="L299" href="#L299">299</a>         <em class="jxr_comment">// listOfIntegersType now represents List&lt;Integer&gt;</em>
    +<a class="jxr_linenumber" name="L300" href="#L300">300</a>         DeclaredType listOfIntegersType = types.getDeclaredType(element(List.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L301" href="#L301">301</a> 
    +<a class="jxr_linenumber" name="L302" href="#L302">302</a>         <em class="jxr_comment">// Simple test without inheritance: List and List&lt;Integer&gt;</em>
    +<a class="jxr_linenumber" name="L303" href="#L303">303</a>         assertEquals(
    +<a class="jxr_linenumber" name="L304" href="#L304">304</a>             types.resolveActualTypeArguments(element(List.<strong class="jxr_keyword">class</strong>), listOfIntegersType),
    +<a class="jxr_linenumber" name="L305" href="#L305">305</a>             Collections.singletonList(type(Integer.<strong class="jxr_keyword">class</strong>))
    +<a class="jxr_linenumber" name="L306" href="#L306">306</a>         );
    +<a class="jxr_linenumber" name="L307" href="#L307">307</a> 
    +<a class="jxr_linenumber" name="L308" href="#L308">308</a>         <em class="jxr_comment">// Now with inheritance.</em>
    +<a class="jxr_linenumber" name="L309" href="#L309">309</a>         assertEquals(
    +<a class="jxr_linenumber" name="L310" href="#L310">310</a>             types.resolveActualTypeArguments(element(Set.<strong class="jxr_keyword">class</strong>), type(IntegerListSet.<strong class="jxr_keyword">class</strong>)),
    +<a class="jxr_linenumber" name="L311" href="#L311">311</a>             Collections.singletonList(listOfIntegersType)
    +<a class="jxr_linenumber" name="L312" href="#L312">312</a>         );
    +<a class="jxr_linenumber" name="L313" href="#L313">313</a>         assertEquals(
    +<a class="jxr_linenumber" name="L314" href="#L314">314</a>             types.resolveActualTypeArguments(element(Set.<strong class="jxr_keyword">class</strong>), type(ImmutableIntegerListSet.<strong class="jxr_keyword">class</strong>)),
    +<a class="jxr_linenumber" name="L315" href="#L315">315</a>             Collections.singletonList(listOfIntegersType)
    +<a class="jxr_linenumber" name="L316" href="#L316">316</a>         );
    +<a class="jxr_linenumber" name="L317" href="#L317">317</a> 
    +<a class="jxr_linenumber" name="L318" href="#L318">318</a>         <em class="jxr_comment">// Verify that non-generic type does not have actual type arguments</em>
    +<a class="jxr_linenumber" name="L319" href="#L319">319</a>         assertEquals(
    +<a class="jxr_linenumber" name="L320" href="#L320">320</a>             types.resolveActualTypeArguments(element(IntegerListSet.<strong class="jxr_keyword">class</strong>), type(ImmutableIntegerListSet.<strong class="jxr_keyword">class</strong>)),
    +<a class="jxr_linenumber" name="L321" href="#L321">321</a>             Collections.emptyList()
    +<a class="jxr_linenumber" name="L322" href="#L322">322</a>         );
    +<a class="jxr_linenumber" name="L323" href="#L323">323</a> 
    +<a class="jxr_linenumber" name="L324" href="#L324">324</a>         <em class="jxr_comment">// In case there is no subtype relationship, null is returned</em>
    +<a class="jxr_linenumber" name="L325" href="#L325">325</a>         assertNull(
    +<a class="jxr_linenumber" name="L326" href="#L326">326</a>             types.resolveActualTypeArguments(element(ImmutableIntegerListSet.<strong class="jxr_keyword">class</strong>), type(IntegerListSet.<strong class="jxr_keyword">class</strong>))
    +<a class="jxr_linenumber" name="L327" href="#L327">327</a>         );
    +<a class="jxr_linenumber" name="L328" href="#L328">328</a>         assertNull(types.resolveActualTypeArguments(element(List.<strong class="jxr_keyword">class</strong>), type(Collection.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L329" href="#L329">329</a>         assertNull(types.resolveActualTypeArguments(element(List.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L330" href="#L330">330</a>     }
    +<a class="jxr_linenumber" name="L331" href="#L331">331</a> 
    +<a class="jxr_linenumber" name="L332" href="#L332">332</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L333" href="#L333">333</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#resolveActualTypeArguments(TypeElement, TypeMirror)} if the second argument is a</em>
    +<a class="jxr_linenumber" name="L334" href="#L334">334</a> <em class="jxr_javadoccomment">     * raw type.</em>
    +<a class="jxr_linenumber" name="L335" href="#L335">335</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L336" href="#L336">336</a>     @Test
    +<a class="jxr_linenumber" name="L337" href="#L337">337</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> resolveActualTypeArgumentsRaw() {
    +<a class="jxr_linenumber" name="L338" href="#L338">338</a>         <em class="jxr_comment">// Resolving unbound type parameters (because the subclass inherits from a raw type) returns an empty list</em>
    +<a class="jxr_linenumber" name="L339" href="#L339">339</a>         assertEquals(
    +<a class="jxr_linenumber" name="L340" href="#L340">340</a>             types.resolveActualTypeArguments(
    +<a class="jxr_linenumber" name="L341" href="#L341">341</a>                 element(ExtendsParameterized.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L342" href="#L342">342</a>                 type(RawSubExtendsParameterized.<strong class="jxr_keyword">class</strong>)
    +<a class="jxr_linenumber" name="L343" href="#L343">343</a>             ),
    +<a class="jxr_linenumber" name="L344" href="#L344">344</a>             Collections.emptyList()
    +<a class="jxr_linenumber" name="L345" href="#L345">345</a>         );
    +<a class="jxr_linenumber" name="L346" href="#L346">346</a> 
    +<a class="jxr_linenumber" name="L347" href="#L347">347</a>         <em class="jxr_comment">// Resolving the type argument of a raw type is the same as resolving the type arguments of the corresponding</em>
    +<a class="jxr_linenumber" name="L348" href="#L348">348</a>         <em class="jxr_comment">// prototypical type of the sub-type declaration.</em>
    +<a class="jxr_linenumber" name="L349" href="#L349">349</a>         assertEquals(
    +<a class="jxr_linenumber" name="L350" href="#L350">350</a>             types.resolveActualTypeArguments(
    +<a class="jxr_linenumber" name="L351" href="#L351">351</a>                 element(ExtendsParameterized.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L352" href="#L352">352</a>                 type(SubExtendsParameterized.<strong class="jxr_keyword">class</strong>)
    +<a class="jxr_linenumber" name="L353" href="#L353">353</a>             ),
    +<a class="jxr_linenumber" name="L354" href="#L354">354</a>             types.resolveActualTypeArguments(
    +<a class="jxr_linenumber" name="L355" href="#L355">355</a>                 element(ExtendsParameterized.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L356" href="#L356">356</a>                 element(SubExtendsParameterized.<strong class="jxr_keyword">class</strong>).asType()
    +<a class="jxr_linenumber" name="L357" href="#L357">357</a>             )
    +<a class="jxr_linenumber" name="L358" href="#L358">358</a>         );
    +<a class="jxr_linenumber" name="L359" href="#L359">359</a>         assertEquals(
    +<a class="jxr_linenumber" name="L360" href="#L360">360</a>             ((DeclaredType) element(SubExtendsParameterized.<strong class="jxr_keyword">class</strong>).asType()).getTypeArguments().get(0),
    +<a class="jxr_linenumber" name="L361" href="#L361">361</a>             element(SubExtendsParameterized.<strong class="jxr_keyword">class</strong>).getTypeParameters().get(0).asType()
    +<a class="jxr_linenumber" name="L362" href="#L362">362</a>         );
    +<a class="jxr_linenumber" name="L363" href="#L363">363</a>     }
    +<a class="jxr_linenumber" name="L364" href="#L364">364</a> 
    +<a class="jxr_linenumber" name="L365" href="#L365">365</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L366" href="#L366">366</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#resolveActualTypeArguments(TypeElement, TypeMirror)} if the second argument</em>
    +<a class="jxr_linenumber" name="L367" href="#L367">367</a> <em class="jxr_javadoccomment">     * contains an actual type argument that is an array type.</em>
    +<a class="jxr_linenumber" name="L368" href="#L368">368</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L369" href="#L369">369</a>     @Test
    +<a class="jxr_linenumber" name="L370" href="#L370">370</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> resolveActualTypeArgumentsArrays() {
    +<a class="jxr_linenumber" name="L371" href="#L371">371</a>         <em class="jxr_comment">// declaredType now represents DiamondB&lt;String[]&gt;</em>
    +<a class="jxr_linenumber" name="L372" href="#L372">372</a>         DeclaredType declaredType = types.getDeclaredType(element(DiamondB.<strong class="jxr_keyword">class</strong>), types.getArrayType(type(String.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L373" href="#L373">373</a>         assertEquals(
    +<a class="jxr_linenumber" name="L374" href="#L374">374</a>             types.resolveActualTypeArguments(element(DiamondA.<strong class="jxr_keyword">class</strong>), declaredType),
    +<a class="jxr_linenumber" name="L375" href="#L375">375</a>             Arrays.asList(type(String[][].<strong class="jxr_keyword">class</strong>), type(Integer[].<strong class="jxr_keyword">class</strong>))
    +<a class="jxr_linenumber" name="L376" href="#L376">376</a>         );
    +<a class="jxr_linenumber" name="L377" href="#L377">377</a> 
    +<a class="jxr_linenumber" name="L378" href="#L378">378</a>         assertEquals(
    +<a class="jxr_linenumber" name="L379" href="#L379">379</a>             types.resolveActualTypeArguments(element(DiamondA.<strong class="jxr_keyword">class</strong>), type(DiamondD.<strong class="jxr_keyword">class</strong>)),
    +<a class="jxr_linenumber" name="L380" href="#L380">380</a>             Arrays.asList(type(String[].<strong class="jxr_keyword">class</strong>), type(Integer[].<strong class="jxr_keyword">class</strong>))
    +<a class="jxr_linenumber" name="L381" href="#L381">381</a>         );
    +<a class="jxr_linenumber" name="L382" href="#L382">382</a> 
    +<a class="jxr_linenumber" name="L383" href="#L383">383</a>         <em class="jxr_comment">// Test raw type SubDiamondB. The super types of a raw type are the supertypes of the prototypical type (as defined by</em>
    +<a class="jxr_linenumber" name="L384" href="#L384">384</a>         <em class="jxr_comment">// TypeElement#asType())</em>
    +<a class="jxr_linenumber" name="L385" href="#L385">385</a>         TypeMirror expectedTypeArgument
    +<a class="jxr_linenumber" name="L386" href="#L386">386</a>             = types.getArrayType(types.getArrayType(element(SubDiamondB.<strong class="jxr_keyword">class</strong>).getTypeParameters().get(0).asType()));
    +<a class="jxr_linenumber" name="L387" href="#L387">387</a>         assertEquals(
    +<a class="jxr_linenumber" name="L388" href="#L388">388</a>             types.resolveActualTypeArguments(element(DiamondA.<strong class="jxr_keyword">class</strong>), type(SubDiamondB.<strong class="jxr_keyword">class</strong>)),
    +<a class="jxr_linenumber" name="L389" href="#L389">389</a>             Arrays.asList(expectedTypeArgument, type(Integer[].<strong class="jxr_keyword">class</strong>))
    +<a class="jxr_linenumber" name="L390" href="#L390">390</a>         );
    +<a class="jxr_linenumber" name="L391" href="#L391">391</a> 
    +<a class="jxr_linenumber" name="L392" href="#L392">392</a>         assertEquals(
    +<a class="jxr_linenumber" name="L393" href="#L393">393</a>             types.resolveActualTypeArguments(element(DiamondA.<strong class="jxr_keyword">class</strong>), type(SubSubDiamondB.<strong class="jxr_keyword">class</strong>)),
    +<a class="jxr_linenumber" name="L394" href="#L394">394</a>             Arrays.asList(type(Integer[][][].<strong class="jxr_keyword">class</strong>), type(Integer[].<strong class="jxr_keyword">class</strong>))
    +<a class="jxr_linenumber" name="L395" href="#L395">395</a>         );
    +<a class="jxr_linenumber" name="L396" href="#L396">396</a>     }
    +<a class="jxr_linenumber" name="L397" href="#L397">397</a> 
    +<a class="jxr_linenumber" name="L398" href="#L398">398</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L399" href="#L399">399</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} if one of the types is a primitive type.</em>
    +<a class="jxr_linenumber" name="L400" href="#L400">400</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L401" href="#L401">401</a>     @Test
    +<a class="jxr_linenumber" name="L402" href="#L402">402</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIsSubtypePrimitive() {
    +<a class="jxr_linenumber" name="L403" href="#L403">403</a>         <em class="jxr_comment">// Primitives</em>
    +<a class="jxr_linenumber" name="L404" href="#L404">404</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">double</strong>.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">double</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L405" href="#L405">405</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">float</strong>.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">double</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L406" href="#L406">406</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">long</strong>.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">double</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L407" href="#L407">407</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>),  type(<strong class="jxr_keyword">double</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L408" href="#L408">408</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">short</strong>.<strong class="jxr_keyword">class</strong>),type(<strong class="jxr_keyword">double</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L409" href="#L409">409</a>         assertTrue(types.isSubtype(type(byte.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">double</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L410" href="#L410">410</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">char</strong>.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">double</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L411" href="#L411">411</a> 
    +<a class="jxr_linenumber" name="L412" href="#L412">412</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L413" href="#L413">413</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">short</strong>.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L414" href="#L414">414</a>         assertTrue(types.isSubtype(type(byte.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L415" href="#L415">415</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">char</strong>.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L416" href="#L416">416</a> 
    +<a class="jxr_linenumber" name="L417" href="#L417">417</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">short</strong>.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">short</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L418" href="#L418">418</a>         assertTrue(types.isSubtype(type(byte.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">short</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L419" href="#L419">419</a>         assertFalse(types.isSubtype(type(<strong class="jxr_keyword">char</strong>.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">short</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L420" href="#L420">420</a> 
    +<a class="jxr_linenumber" name="L421" href="#L421">421</a>         assertFalse(types.isSubtype(type(Object.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L422" href="#L422">422</a>         assertFalse(types.isSubtype(type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>), type(Object.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L423" href="#L423">423</a>         assertFalse(types.isSubtype(type(Integer.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L424" href="#L424">424</a>         assertFalse(types.isSubtype(type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L425" href="#L425">425</a>         assertFalse(types.isSubtype(type(<strong class="jxr_keyword">int</strong>[].<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L426" href="#L426">426</a>         assertFalse(types.isSubtype(type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">int</strong>[].<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L427" href="#L427">427</a> 
    +<a class="jxr_linenumber" name="L428" href="#L428">428</a>         <em class="jxr_comment">// JLS-mandated classes</em>
    +<a class="jxr_linenumber" name="L429" href="#L429">429</a>         assertTrue(types.isSubtype(type(Object.<strong class="jxr_keyword">class</strong>), type(Object.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L430" href="#L430">430</a>         assertTrue(types.isSubtype(type(Serializable.<strong class="jxr_keyword">class</strong>), type(Object.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L431" href="#L431">431</a>         assertFalse(types.isSubtype(type(Object.<strong class="jxr_keyword">class</strong>), type(Serializable.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L432" href="#L432">432</a> 
    +<a class="jxr_linenumber" name="L433" href="#L433">433</a>         <em class="jxr_comment">// Elementary subtyping</em>
    +<a class="jxr_linenumber" name="L434" href="#L434">434</a>         assertTrue(types.isSubtype(type(Number.<strong class="jxr_keyword">class</strong>), type(Object.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L435" href="#L435">435</a>         assertFalse(types.isSubtype(type(Object.<strong class="jxr_keyword">class</strong>), type(Number.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L436" href="#L436">436</a>     }
    +<a class="jxr_linenumber" name="L437" href="#L437">437</a> 
    +<a class="jxr_linenumber" name="L438" href="#L438">438</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L439" href="#L439">439</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} if one of the types is the null type.</em>
    +<a class="jxr_linenumber" name="L440" href="#L440">440</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L441" href="#L441">441</a>     @Test
    +<a class="jxr_linenumber" name="L442" href="#L442">442</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIsSubtypeNull() {
    +<a class="jxr_linenumber" name="L443" href="#L443">443</a>         assertFalse(types.isSubtype(types.getNullType(), type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L444" href="#L444">444</a>         assertFalse(types.isSubtype(type(<strong class="jxr_keyword">int</strong>.<strong class="jxr_keyword">class</strong>), types.getNullType()));
    +<a class="jxr_linenumber" name="L445" href="#L445">445</a> 
    +<a class="jxr_linenumber" name="L446" href="#L446">446</a>         assertFalse(types.isSubtype(type(Object.<strong class="jxr_keyword">class</strong>), types.getNullType()));
    +<a class="jxr_linenumber" name="L447" href="#L447">447</a>         assertTrue(types.isSubtype(types.getNullType(), type(Object.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L448" href="#L448">448</a>     }
    +<a class="jxr_linenumber" name="L449" href="#L449">449</a> 
    +<a class="jxr_linenumber" name="L450" href="#L450">450</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L451" href="#L451">451</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} if one of the types is an array type.</em>
    +<a class="jxr_linenumber" name="L452" href="#L452">452</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L453" href="#L453">453</a>     @Test
    +<a class="jxr_linenumber" name="L454" href="#L454">454</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIsSubtypeArray() {
    +<a class="jxr_linenumber" name="L455" href="#L455">455</a>         <em class="jxr_comment">// arrayType represents List&lt;String&gt;[][]</em>
    +<a class="jxr_linenumber" name="L456" href="#L456">456</a>         TypeMirror arrayType
    +<a class="jxr_linenumber" name="L457" href="#L457">457</a>             = types.getArrayType(types.getArrayType(types.getDeclaredType(element(List.<strong class="jxr_keyword">class</strong>), type(String.<strong class="jxr_keyword">class</strong>))));
    +<a class="jxr_linenumber" name="L458" href="#L458">458</a> 
    +<a class="jxr_linenumber" name="L459" href="#L459">459</a>         assertTrue(types.isSubtype(arrayType, arrayType));
    +<a class="jxr_linenumber" name="L460" href="#L460">460</a>         assertTrue(types.isSubtype(arrayType, type(Serializable.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L461" href="#L461">461</a>         assertTrue(types.isSubtype(arrayType, type(Cloneable.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L462" href="#L462">462</a>         assertTrue(types.isSubtype(arrayType, type(Object.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L463" href="#L463">463</a>         assertTrue(types.isSubtype(arrayType, type(Object[].<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L464" href="#L464">464</a>         assertTrue(types.isSubtype(arrayType, type(Object[][].<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L465" href="#L465">465</a> 
    +<a class="jxr_linenumber" name="L466" href="#L466">466</a>         assertFalse(types.isSubtype(arrayType, type(Number.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L467" href="#L467">467</a>         assertFalse(types.isSubtype(type(Number.<strong class="jxr_keyword">class</strong>), arrayType));
    +<a class="jxr_linenumber" name="L468" href="#L468">468</a> 
    +<a class="jxr_linenumber" name="L469" href="#L469">469</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">int</strong>[][].<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">int</strong>[][].<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L470" href="#L470">470</a>         assertTrue(types.isSubtype(type(<strong class="jxr_keyword">char</strong>[][].<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">int</strong>[][].<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L471" href="#L471">471</a>         assertFalse(types.isSubtype(type(<strong class="jxr_keyword">int</strong>[][].<strong class="jxr_keyword">class</strong>), type(<strong class="jxr_keyword">char</strong>[][].<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L472" href="#L472">472</a>     }
    +<a class="jxr_linenumber" name="L473" href="#L473">473</a> 
    +<a class="jxr_linenumber" name="L474" href="#L474">474</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L475" href="#L475">475</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} if one of the types is an intersection type.</em>
    +<a class="jxr_linenumber" name="L476" href="#L476">476</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L477" href="#L477">477</a>     @Test
    +<a class="jxr_linenumber" name="L478" href="#L478">478</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIsSubtypeIntersection() {
    +<a class="jxr_linenumber" name="L479" href="#L479">479</a>         TypeMirror serializableAndCloneableType
    +<a class="jxr_linenumber" name="L480" href="#L480">480</a>             = types.getIntersectionType(type(Serializable.<strong class="jxr_keyword">class</strong>), type(Cloneable.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L481" href="#L481">481</a> 
    +<a class="jxr_linenumber" name="L482" href="#L482">482</a>         assertTrue(types.isSubtype(serializableAndCloneableType, type(Serializable.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L483" href="#L483">483</a>         assertTrue(types.isSubtype(serializableAndCloneableType, type(Cloneable.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L484" href="#L484">484</a>         assertTrue(types.isSubtype(serializableAndCloneableType, serializableAndCloneableType));
    +<a class="jxr_linenumber" name="L485" href="#L485">485</a>         assertFalse(types.isSubtype(type(Cloneable.<strong class="jxr_keyword">class</strong>), serializableAndCloneableType));
    +<a class="jxr_linenumber" name="L486" href="#L486">486</a> 
    +<a class="jxr_linenumber" name="L487" href="#L487">487</a>         TypeMirror serializableCloneableListType
    +<a class="jxr_linenumber" name="L488" href="#L488">488</a>             = types.getIntersectionType(type(Serializable.<strong class="jxr_keyword">class</strong>), type(Cloneable.<strong class="jxr_keyword">class</strong>), type(List.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L489" href="#L489">489</a> 
    +<a class="jxr_linenumber" name="L490" href="#L490">490</a>         <em class="jxr_comment">// Mathematically, the following should be true, but a subtype relationship is not mandated by the JLS.</em>
    +<a class="jxr_linenumber" name="L491" href="#L491">491</a>         <em class="jxr_comment">// Therefore, currently we use assertFalse.</em>
    +<a class="jxr_linenumber" name="L492" href="#L492">492</a>         assertFalse(types.isSubtype(serializableCloneableListType, serializableAndCloneableType));
    +<a class="jxr_linenumber" name="L493" href="#L493">493</a>     }
    +<a class="jxr_linenumber" name="L494" href="#L494">494</a> 
    +<a class="jxr_linenumber" name="L495" href="#L495">495</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L496" href="#L496">496</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} if one of the types is a raw type.</em>
    +<a class="jxr_linenumber" name="L497" href="#L497">497</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L498" href="#L498">498</a>     @Test
    +<a class="jxr_linenumber" name="L499" href="#L499">499</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIsSubtypeRaw() {
    +<a class="jxr_linenumber" name="L500" href="#L500">500</a>         <em class="jxr_comment">// Test that raw type DiamondB is subtype of raw type DiamondA</em>
    +<a class="jxr_linenumber" name="L501" href="#L501">501</a>         assertTrue(types.isSubtype(type(DiamondB.<strong class="jxr_keyword">class</strong>), type(DiamondA.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L502" href="#L502">502</a> 
    +<a class="jxr_linenumber" name="L503" href="#L503">503</a>         <em class="jxr_comment">// aWildcardType: DiamondA&lt;? extends Object[], Integer[]&gt;</em>
    +<a class="jxr_linenumber" name="L504" href="#L504">504</a>         DeclaredType aWildcardType = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L505" href="#L505">505</a>             element(DiamondA.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L506" href="#L506">506</a>             types.getWildcardType(type(Object[].<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>),
    +<a class="jxr_linenumber" name="L507" href="#L507">507</a>             type(Integer[].<strong class="jxr_keyword">class</strong>)
    +<a class="jxr_linenumber" name="L508" href="#L508">508</a>         );
    +<a class="jxr_linenumber" name="L509" href="#L509">509</a>         <em class="jxr_comment">// According to JLS §4.10.2, DiamondA&lt;? extends Object[], Integer[]&gt;  :&gt;  DiamondA&lt;T[], Integer[]&gt;  :&gt;  DiamondB</em>
    +<a class="jxr_linenumber" name="L510" href="#L510">510</a>         assertTrue(types.isSubtype(type(DiamondB.<strong class="jxr_keyword">class</strong>), aWildcardType));
    +<a class="jxr_linenumber" name="L511" href="#L511">511</a> 
    +<a class="jxr_linenumber" name="L512" href="#L512">512</a> 
    +<a class="jxr_linenumber" name="L513" href="#L513">513</a>         <em class="jxr_comment">// aType: DiamondA&lt;Object[], Integer[]&gt;</em>
    +<a class="jxr_linenumber" name="L514" href="#L514">514</a>         DeclaredType aType = types.getDeclaredType(element(DiamondA.<strong class="jxr_keyword">class</strong>), type(Object[].<strong class="jxr_keyword">class</strong>), type(Integer[].<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L515" href="#L515">515</a>         <em class="jxr_comment">// Since T[] (i.e., the first type argument to DiamondB's direct superclass) is not contained by Object[] (in</em>
    +<a class="jxr_linenumber" name="L516" href="#L516">516</a>         <em class="jxr_comment">// the sense of JLS §4.5.1), the raw type DiamondB is not a subtype of DiamondA&lt;Object[], Integer[]&gt;</em>
    +<a class="jxr_linenumber" name="L517" href="#L517">517</a>         assertFalse(types.isSubtype(type(DiamondB.<strong class="jxr_keyword">class</strong>), aType));
    +<a class="jxr_linenumber" name="L518" href="#L518">518</a> 
    +<a class="jxr_linenumber" name="L519" href="#L519">519</a>         <em class="jxr_comment">// List is not a subtype of List&lt;?&gt;. While</em>
    +<a class="jxr_linenumber" name="L520" href="#L520">520</a>         <em class="jxr_comment">// List list = (List&lt;?&gt;) null</em>
    +<a class="jxr_linenumber" name="L521" href="#L521">521</a>         <em class="jxr_comment">// would compile without error (even without warning), this is not because of a subtype relationship, but only</em>
    +<a class="jxr_linenumber" name="L522" href="#L522">522</a>         <em class="jxr_comment">// allowed because of JLS §5.1.9 (unchecked conversion).</em>
    +<a class="jxr_linenumber" name="L523" href="#L523">523</a>         DeclaredType rawListType = (DeclaredType) type(List.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L524" href="#L524">524</a>         DeclaredType anyListType = types.getDeclaredType(element(List.<strong class="jxr_keyword">class</strong>), types.getWildcardType(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>));
    +<a class="jxr_linenumber" name="L525" href="#L525">525</a>         assertFalse(types.isSubtype(rawListType, anyListType));
    +<a class="jxr_linenumber" name="L526" href="#L526">526</a>         assertTrue(types.isSubtype(anyListType, rawListType));
    +<a class="jxr_linenumber" name="L527" href="#L527">527</a> 
    +<a class="jxr_linenumber" name="L528" href="#L528">528</a>         assertTrue(types.isSubtype(type(RawSubExtendsParameterized.<strong class="jxr_keyword">class</strong>), type(ExtendsParameterized.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L529" href="#L529">529</a>         <em class="jxr_comment">// rawParameterizedType: RawSubExtendsParameterized&lt;Integer&gt;</em>
    +<a class="jxr_linenumber" name="L530" href="#L530">530</a>         DeclaredType rawParameterizedType
    +<a class="jxr_linenumber" name="L531" href="#L531">531</a>             = types.getDeclaredType(element(RawSubExtendsParameterized.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L532" href="#L532">532</a>         assertTrue(types.isSubtype(rawParameterizedType, type(ExtendsParameterized.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L533" href="#L533">533</a>         <em class="jxr_comment">// See explanation for List test case above.</em>
    +<a class="jxr_linenumber" name="L534" href="#L534">534</a>         assertFalse(
    +<a class="jxr_linenumber" name="L535" href="#L535">535</a>             types.isSubtype(
    +<a class="jxr_linenumber" name="L536" href="#L536">536</a>                 rawParameterizedType,
    +<a class="jxr_linenumber" name="L537" href="#L537">537</a>                 types.getDeclaredType(element(ExtendsParameterized.<strong class="jxr_keyword">class</strong>), types.getWildcardType(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>))
    +<a class="jxr_linenumber" name="L538" href="#L538">538</a>             )
    +<a class="jxr_linenumber" name="L539" href="#L539">539</a>         );
    +<a class="jxr_linenumber" name="L540" href="#L540">540</a>     }
    +<a class="jxr_linenumber" name="L541" href="#L541">541</a> 
    +<a class="jxr_linenumber" name="L542" href="#L542">542</a>     @Test
    +<a class="jxr_linenumber" name="L543" href="#L543">543</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIsSubtypeArrayTypeParameters() {
    +<a class="jxr_linenumber" name="L544" href="#L544">544</a>         <em class="jxr_comment">// aType: DiamondA&lt;? extends Serializable, ? extends Number[]&gt;</em>
    +<a class="jxr_linenumber" name="L545" href="#L545">545</a>         DeclaredType aType = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L546" href="#L546">546</a>             element(DiamondA.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L547" href="#L547">547</a>             types.getWildcardType(type(Serializable.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>),
    +<a class="jxr_linenumber" name="L548" href="#L548">548</a>             types.getWildcardType(type(Number[].<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L549" href="#L549">549</a>         );
    +<a class="jxr_linenumber" name="L550" href="#L550">550</a>         <em class="jxr_comment">// bType: DiamondB&lt;?&gt;</em>
    +<a class="jxr_linenumber" name="L551" href="#L551">551</a>         DeclaredType bType = types.getDeclaredType(element(DiamondB.<strong class="jxr_keyword">class</strong>), types.getWildcardType(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>));
    +<a class="jxr_linenumber" name="L552" href="#L552">552</a>         assertTrue(types.isSubtype(bType, aType));
    +<a class="jxr_linenumber" name="L553" href="#L553">553</a> 
    +<a class="jxr_linenumber" name="L554" href="#L554">554</a>         <em class="jxr_comment">// a2Type: DiamondA&lt;? extends Object[], ? extends Number[]&gt;</em>
    +<a class="jxr_linenumber" name="L555" href="#L555">555</a>         DeclaredType a2Type = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L556" href="#L556">556</a>             element(DiamondA.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L557" href="#L557">557</a>             types.getWildcardType(type(Object[].<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>),
    +<a class="jxr_linenumber" name="L558" href="#L558">558</a>             types.getWildcardType(type(Number[].<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L559" href="#L559">559</a>         );
    +<a class="jxr_linenumber" name="L560" href="#L560">560</a>         <em class="jxr_comment">// b2Type: DiamondB&lt;Integer&gt;</em>
    +<a class="jxr_linenumber" name="L561" href="#L561">561</a>         DeclaredType b2Type = types.getDeclaredType(element(DiamondB.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L562" href="#L562">562</a>         assertTrue(types.isSubtype(b2Type, a2Type));
    +<a class="jxr_linenumber" name="L563" href="#L563">563</a> 
    +<a class="jxr_linenumber" name="L564" href="#L564">564</a>         <em class="jxr_comment">// a3Type: DiamondA&lt;? extends Serializable, ? extends Number[]&gt;</em>
    +<a class="jxr_linenumber" name="L565" href="#L565">565</a>         DeclaredType a3Type = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L566" href="#L566">566</a>             element(DiamondA.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L567" href="#L567">567</a>             types.getWildcardType(type(Serializable.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>),
    +<a class="jxr_linenumber" name="L568" href="#L568">568</a>             types.getWildcardType(type(Number[].<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L569" href="#L569">569</a>         );
    +<a class="jxr_linenumber" name="L570" href="#L570">570</a>         assertTrue(types.isSubtype(type(DiamondD.<strong class="jxr_keyword">class</strong>), a3Type));
    +<a class="jxr_linenumber" name="L571" href="#L571">571</a>     }
    +<a class="jxr_linenumber" name="L572" href="#L572">572</a> 
    +<a class="jxr_linenumber" name="L573" href="#L573">573</a>     @Test
    +<a class="jxr_linenumber" name="L574" href="#L574">574</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIsSubtypeSimpleTypeParameters() {
    +<a class="jxr_linenumber" name="L575" href="#L575">575</a>         <em class="jxr_comment">// collectionOfNumbersType: Collection&lt;Number&gt;</em>
    +<a class="jxr_linenumber" name="L576" href="#L576">576</a>         DeclaredType collectionOfNumbersType = types.getDeclaredType(element(Collection.<strong class="jxr_keyword">class</strong>), type(Number.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L577" href="#L577">577</a> 
    +<a class="jxr_linenumber" name="L578" href="#L578">578</a>         <em class="jxr_comment">// JLS §4.10.2, raw type is supertype</em>
    +<a class="jxr_linenumber" name="L579" href="#L579">579</a>         assertTrue(types.isSubtype(collectionOfNumbersType, type(Collection.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L580" href="#L580">580</a> 
    +<a class="jxr_linenumber" name="L581" href="#L581">581</a>         <em class="jxr_comment">// A generic type is not a supertype of the raw type. Assignment is allowed, though, through an unchecked</em>
    +<a class="jxr_linenumber" name="L582" href="#L582">582</a>         <em class="jxr_comment">// conversion (JLS §5.1.9), which "causes a compile-time unchecked warning".</em>
    +<a class="jxr_linenumber" name="L583" href="#L583">583</a>         assertFalse(types.isSubtype(type(Collection.<strong class="jxr_keyword">class</strong>), collectionOfNumbersType));
    +<a class="jxr_linenumber" name="L584" href="#L584">584</a> 
    +<a class="jxr_linenumber" name="L585" href="#L585">585</a>         <em class="jxr_comment">// collectionOfIntegersType: Collection&lt;Integer&gt;</em>
    +<a class="jxr_linenumber" name="L586" href="#L586">586</a>         DeclaredType collectionOfIntegersType = types.getDeclaredType(element(Collection.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L587" href="#L587">587</a> 
    +<a class="jxr_linenumber" name="L588" href="#L588">588</a>         <em class="jxr_comment">// Collection&lt;Integer&gt; is not a subtype of Collection&lt;Number&gt;</em>
    +<a class="jxr_linenumber" name="L589" href="#L589">589</a>         assertFalse(types.isSubtype(collectionOfIntegersType, collectionOfNumbersType));
    +<a class="jxr_linenumber" name="L590" href="#L590">590</a> 
    +<a class="jxr_linenumber" name="L591" href="#L591">591</a>         <em class="jxr_comment">// wildcardCollectionType now represents Collection&lt;? extends Number&gt;</em>
    +<a class="jxr_linenumber" name="L592" href="#L592">592</a>         DeclaredType wildcardCollectionType = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L593" href="#L593">593</a>             element(Collection.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L594" href="#L594">594</a>             types.getWildcardType(type(Number.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L595" href="#L595">595</a>         );
    +<a class="jxr_linenumber" name="L596" href="#L596">596</a>         assertTrue(types.isSubtype(collectionOfIntegersType, wildcardCollectionType));
    +<a class="jxr_linenumber" name="L597" href="#L597">597</a>     }
    +<a class="jxr_linenumber" name="L598" href="#L598">598</a> 
    +<a class="jxr_linenumber" name="L599" href="#L599">599</a>     @Test
    +<a class="jxr_linenumber" name="L600" href="#L600">600</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIsSubtypeWildcards() {
    +<a class="jxr_linenumber" name="L601" href="#L601">601</a>         <em class="jxr_comment">// setType1: Set&lt;List&lt;Integer&gt;&gt;</em>
    +<a class="jxr_linenumber" name="L602" href="#L602">602</a>         DeclaredType setType1 = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L603" href="#L603">603</a>             element(Set.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L604" href="#L604">604</a>             types.getDeclaredType(element(List.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>))
    +<a class="jxr_linenumber" name="L605" href="#L605">605</a>         );
    +<a class="jxr_linenumber" name="L606" href="#L606">606</a>         assertTrue(types.isSubtype(type(IntegerListSet.<strong class="jxr_keyword">class</strong>), setType1));
    +<a class="jxr_linenumber" name="L607" href="#L607">607</a> 
    +<a class="jxr_linenumber" name="L608" href="#L608">608</a>         <em class="jxr_comment">// setType2: Set&lt;? extends List&lt;? extends Integer&gt;&gt;</em>
    +<a class="jxr_linenumber" name="L609" href="#L609">609</a>         DeclaredType setType2 = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L610" href="#L610">610</a>             element(Set.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L611" href="#L611">611</a>             types.getWildcardType(
    +<a class="jxr_linenumber" name="L612" href="#L612">612</a>                 types.getDeclaredType(element(List.<strong class="jxr_keyword">class</strong>), types.getWildcardType(type(Integer.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>)),
    +<a class="jxr_linenumber" name="L613" href="#L613">613</a>                 <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L614" href="#L614">614</a>             )
    +<a class="jxr_linenumber" name="L615" href="#L615">615</a>         );
    +<a class="jxr_linenumber" name="L616" href="#L616">616</a>         assertTrue(types.isSubtype(type(IntegerListSet.<strong class="jxr_keyword">class</strong>), setType2));
    +<a class="jxr_linenumber" name="L617" href="#L617">617</a> 
    +<a class="jxr_linenumber" name="L618" href="#L618">618</a>         <em class="jxr_comment">// setType3: Set&lt;? super List&lt;? super Integer&gt;&gt;</em>
    +<a class="jxr_linenumber" name="L619" href="#L619">619</a>         DeclaredType setType3 = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L620" href="#L620">620</a>             element(Set.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L621" href="#L621">621</a>             types.getWildcardType(
    +<a class="jxr_linenumber" name="L622" href="#L622">622</a>                 <strong class="jxr_keyword">null</strong>,
    +<a class="jxr_linenumber" name="L623" href="#L623">623</a>                 types.getDeclaredType(element(List.<strong class="jxr_keyword">class</strong>), types.getWildcardType(<strong class="jxr_keyword">null</strong>, type(Integer.<strong class="jxr_keyword">class</strong>)))
    +<a class="jxr_linenumber" name="L624" href="#L624">624</a>             )
    +<a class="jxr_linenumber" name="L625" href="#L625">625</a>         );
    +<a class="jxr_linenumber" name="L626" href="#L626">626</a>         <em class="jxr_comment">// setType4: Set&lt;Collection&lt;? super Integer&gt;&gt;</em>
    +<a class="jxr_linenumber" name="L627" href="#L627">627</a>         DeclaredType setType4 = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L628" href="#L628">628</a>             element(Set.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L629" href="#L629">629</a>             types.getDeclaredType(element(Collection.<strong class="jxr_keyword">class</strong>), types.getWildcardType(<strong class="jxr_keyword">null</strong>, type(Integer.<strong class="jxr_keyword">class</strong>)))
    +<a class="jxr_linenumber" name="L630" href="#L630">630</a>         );
    +<a class="jxr_linenumber" name="L631" href="#L631">631</a>         assertTrue(types.isSubtype(setType4, setType3));
    +<a class="jxr_linenumber" name="L632" href="#L632">632</a> 
    +<a class="jxr_linenumber" name="L633" href="#L633">633</a>         <em class="jxr_comment">// setType5: Set&lt;Collection&lt;? super Number&gt;&gt;</em>
    +<a class="jxr_linenumber" name="L634" href="#L634">634</a>         DeclaredType setType5 = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L635" href="#L635">635</a>             element(Set.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L636" href="#L636">636</a>             types.getDeclaredType(element(Collection.<strong class="jxr_keyword">class</strong>), types.getWildcardType(<strong class="jxr_keyword">null</strong>, type(Number.<strong class="jxr_keyword">class</strong>)))
    +<a class="jxr_linenumber" name="L637" href="#L637">637</a>         );
    +<a class="jxr_linenumber" name="L638" href="#L638">638</a>         <em class="jxr_comment">// Note that Set&lt;Collection&lt;? super Number&gt;&gt; is not a subtype of Set&lt;? super List&lt;? super Integer&gt;&gt;. Otherwise,</em>
    +<a class="jxr_linenumber" name="L639" href="#L639">639</a>         <em class="jxr_comment">// List&lt;? super Number&gt; would be a subtype of Collection&lt;? super Integer&gt;, implying that "? super Integer"</em>
    +<a class="jxr_linenumber" name="L640" href="#L640">640</a>         <em class="jxr_comment">// contains (§4.5.1) "? super Number", implying that Number is a subtype of Integer. A contradiction.</em>
    +<a class="jxr_linenumber" name="L641" href="#L641">641</a>         assertFalse(types.isSubtype(setType5, setType3));
    +<a class="jxr_linenumber" name="L642" href="#L642">642</a> 
    +<a class="jxr_linenumber" name="L643" href="#L643">643</a>         <em class="jxr_comment">// Also, IntegerListSet, which implements Set&lt;List&lt;Integer&gt;&gt;, is not a subtype of</em>
    +<a class="jxr_linenumber" name="L644" href="#L644">644</a>         <em class="jxr_comment">// Set&lt;? super List&lt;? super Integer&gt;&gt;. Otherwise, List&lt;Integer&gt; would be contained by</em>
    +<a class="jxr_linenumber" name="L645" href="#L645">645</a>         <em class="jxr_comment">// "? super List&lt;? super Integer&gt;", implying that List&lt;? super Integer&gt; is a subtype of List&lt;Integer&gt;. A</em>
    +<a class="jxr_linenumber" name="L646" href="#L646">646</a>         <em class="jxr_comment">// contradiction.</em>
    +<a class="jxr_linenumber" name="L647" href="#L647">647</a>         assertFalse(types.isSubtype(type(IntegerListSet.<strong class="jxr_keyword">class</strong>), setType3));
    +<a class="jxr_linenumber" name="L648" href="#L648">648</a> 
    +<a class="jxr_linenumber" name="L649" href="#L649">649</a>         <em class="jxr_comment">// simpleParameterizedType1: ExtendsParameterized&lt;? extends SimpleA&gt;</em>
    +<a class="jxr_linenumber" name="L650" href="#L650">650</a>         DeclaredType superType = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L651" href="#L651">651</a>             element(ExtendsParameterized.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L652" href="#L652">652</a>             types.getWildcardType(type(SimpleA.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L653" href="#L653">653</a>         );
    +<a class="jxr_linenumber" name="L654" href="#L654">654</a>         <em class="jxr_comment">// simpleParameterizedType2: ExtendsParameterized&lt;? extends SimpleB&gt;</em>
    +<a class="jxr_linenumber" name="L655" href="#L655">655</a>         DeclaredType subType = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L656" href="#L656">656</a>             element(ExtendsParameterized.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L657" href="#L657">657</a>             types.getWildcardType(type(SimpleB.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L658" href="#L658">658</a>         );
    +<a class="jxr_linenumber" name="L659" href="#L659">659</a>         assertTrue(types.isSubtype(subType, superType));
    +<a class="jxr_linenumber" name="L660" href="#L660">660</a>         <em class="jxr_comment">// ExtendsParameterized&lt;? extends SimpleA&gt; is a subtype of</em>
    +<a class="jxr_linenumber" name="L661" href="#L661">661</a>         <em class="jxr_comment">// ExtendsParameterized&lt;? extends SimpleB&gt;, even</em>
    +<a class="jxr_linenumber" name="L662" href="#L662">662</a>         <em class="jxr_comment">// though SimpleB does not "contain" (JLS §4.5.1) SimpleA. Reason: The "contains"</em>
    +<a class="jxr_linenumber" name="L663" href="#L663">663</a>         <em class="jxr_comment">// relationship is irrelevant for the test, because the supertypes of</em>
    +<a class="jxr_linenumber" name="L664" href="#L664">664</a>         <em class="jxr_comment">// ExtendsParameterized&lt;? extends SimpleB&gt; are exactly those that are the supertypes of its capture</em>
    +<a class="jxr_linenumber" name="L665" href="#L665">665</a>         <em class="jxr_comment">// conversion (JLS §4.10.2).</em>
    +<a class="jxr_linenumber" name="L666" href="#L666">666</a>         assertTrue(types.isSubtype(superType, subType));
    +<a class="jxr_linenumber" name="L667" href="#L667">667</a> 
    +<a class="jxr_linenumber" name="L668" href="#L668">668</a>         <em class="jxr_comment">// extendsParameterized1: ExtendsParameterized&lt;? super SimpleC&gt;</em>
    +<a class="jxr_linenumber" name="L669" href="#L669">669</a>         DeclaredType extendsParameterized1 = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L670" href="#L670">670</a>             element(ExtendsParameterized.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L671" href="#L671">671</a>             types.getWildcardType(<strong class="jxr_keyword">null</strong>, type(SimpleC.<strong class="jxr_keyword">class</strong>))
    +<a class="jxr_linenumber" name="L672" href="#L672">672</a>         );
    +<a class="jxr_linenumber" name="L673" href="#L673">673</a>         assertTrue(types.isSubtype(extendsParameterized1, superType));
    +<a class="jxr_linenumber" name="L674" href="#L674">674</a> 
    +<a class="jxr_linenumber" name="L675" href="#L675">675</a>         <em class="jxr_comment">// extendsParameterized2: ExtendsParameterized&lt;SimpleC&gt;</em>
    +<a class="jxr_linenumber" name="L676" href="#L676">676</a>         DeclaredType extendsParameterized2
    +<a class="jxr_linenumber" name="L677" href="#L677">677</a>             = types.getDeclaredType(element(ExtendsParameterized.<strong class="jxr_keyword">class</strong>), type(SimpleC.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L678" href="#L678">678</a>         assertTrue(types.isSubtype(extendsParameterized2, superType));
    +<a class="jxr_linenumber" name="L679" href="#L679">679</a> 
    +<a class="jxr_linenumber" name="L680" href="#L680">680</a>         <em class="jxr_comment">// simpleParameterizedType1: SimpleParameterized&lt;? extends SimpleA&gt;</em>
    +<a class="jxr_linenumber" name="L681" href="#L681">681</a>         DeclaredType simpleParameterizedType1 = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L682" href="#L682">682</a>             element(SimpleParameterized.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L683" href="#L683">683</a>             types.getWildcardType(type(SimpleA.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L684" href="#L684">684</a>         );
    +<a class="jxr_linenumber" name="L685" href="#L685">685</a>         <em class="jxr_comment">// simpleParameterizedType2 now represents SimpleParameterized&lt;? extends SimpleB&gt;</em>
    +<a class="jxr_linenumber" name="L686" href="#L686">686</a>         DeclaredType simpleParameterizedType2 = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L687" href="#L687">687</a>             element(SimpleParameterized.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L688" href="#L688">688</a>             types.getWildcardType(type(SimpleB.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L689" href="#L689">689</a>         );
    +<a class="jxr_linenumber" name="L690" href="#L690">690</a>         assertTrue(types.isSubtype(simpleParameterizedType2, simpleParameterizedType1));
    +<a class="jxr_linenumber" name="L691" href="#L691">691</a>         <em class="jxr_comment">// Note that this is unlike above, because the type parameter of SimpleParameterized does not have an explicit</em>
    +<a class="jxr_linenumber" name="L692" href="#L692">692</a>         <em class="jxr_comment">// lower bound.</em>
    +<a class="jxr_linenumber" name="L693" href="#L693">693</a>         assertFalse(types.isSubtype(simpleParameterizedType1, simpleParameterizedType2));
    +<a class="jxr_linenumber" name="L694" href="#L694">694</a>     }
    +<a class="jxr_linenumber" name="L695" href="#L695">695</a> 
    +<a class="jxr_linenumber" name="L696" href="#L696">696</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L697" href="#L697">697</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#capture(TypeMirror)}.</em>
    +<a class="jxr_linenumber" name="L698" href="#L698">698</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L699" href="#L699">699</a>     @Test
    +<a class="jxr_linenumber" name="L700" href="#L700">700</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> capture() {
    +<a class="jxr_linenumber" name="L701" href="#L701">701</a>         assertEquals(types.capture(type(Integer.<strong class="jxr_keyword">class</strong>)), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L702" href="#L702">702</a> 
    +<a class="jxr_linenumber" name="L703" href="#L703">703</a>         DeclaredType outerClassType = types.getDeclaredType(element(OuterClass.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L704" href="#L704">704</a>         DeclaredType arrayListOfIntegersType = types.getDeclaredType(element(ArrayList.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L705" href="#L705">705</a>         <em class="jxr_comment">// innerClassType: OuterClass&lt;Integer&gt;.InnerClass&lt;? extends ArrayList&lt;Integer&gt;&gt;</em>
    +<a class="jxr_linenumber" name="L706" href="#L706">706</a>         DeclaredType innerClassType = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L707" href="#L707">707</a>             outerClassType,
    +<a class="jxr_linenumber" name="L708" href="#L708">708</a>             element(OuterClass.InnerClass.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L709" href="#L709">709</a>             types.getWildcardType(arrayListOfIntegersType, <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L710" href="#L710">710</a>         );
    +<a class="jxr_linenumber" name="L711" href="#L711">711</a> 
    +<a class="jxr_linenumber" name="L712" href="#L712">712</a>         DeclaredType capturedType = (DeclaredType) types.capture(innerClassType);
    +<a class="jxr_linenumber" name="L713" href="#L713">713</a>         TypeVariable actualTypeArgument = (TypeVariable) capturedType.getTypeArguments().get(0);
    +<a class="jxr_linenumber" name="L714" href="#L714">714</a> 
    +<a class="jxr_linenumber" name="L715" href="#L715">715</a>         <em class="jxr_comment">// intersectionType = glb(ArrayList&lt;Integer&gt;, List&lt;?&gt;, Serializable)</em>
    +<a class="jxr_linenumber" name="L716" href="#L716">716</a>         IntersectionType intersectionType = (IntersectionType) actualTypeArgument.getUpperBound();
    +<a class="jxr_linenumber" name="L717" href="#L717">717</a>         assertTrue(isSubtypeOfOneOf(arrayListOfIntegersType, intersectionType.getBounds()));
    +<a class="jxr_linenumber" name="L718" href="#L718">718</a> 
    +<a class="jxr_linenumber" name="L719" href="#L719">719</a>         PrimitiveType intType = types.getPrimitiveType(TypeKind.INT);
    +<a class="jxr_linenumber" name="L720" href="#L720">720</a>         assertTrue(types.isSameType(types.capture(intType), intType));
    +<a class="jxr_linenumber" name="L721" href="#L721">721</a>     }
    +<a class="jxr_linenumber" name="L722" href="#L722">722</a> 
    +<a class="jxr_linenumber" name="L723" href="#L723">723</a>     @Test
    +<a class="jxr_linenumber" name="L724" href="#L724">724</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> captureSingleRecursiveBound() {
    +<a class="jxr_linenumber" name="L725" href="#L725">725</a>         <em class="jxr_comment">// enumType: Enum&lt;?&gt;</em>
    +<a class="jxr_linenumber" name="L726" href="#L726">726</a>         DeclaredType enumType = types.getDeclaredType(element(Enum.<strong class="jxr_keyword">class</strong>), types.getWildcardType(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>));
    +<a class="jxr_linenumber" name="L727" href="#L727">727</a> 
    +<a class="jxr_linenumber" name="L728" href="#L728">728</a>         <em class="jxr_comment">// capture: java.lang.Enum&lt;capture&lt;?&gt;&gt;</em>
    +<a class="jxr_linenumber" name="L729" href="#L729">729</a>         DeclaredType capture = (DeclaredType) types.capture(enumType);
    +<a class="jxr_linenumber" name="L730" href="#L730">730</a> 
    +<a class="jxr_linenumber" name="L731" href="#L731">731</a>         assertEquals(capture.getTypeArguments().size(), 1);
    +<a class="jxr_linenumber" name="L732" href="#L732">732</a>         TypeVariable newTypeVariable = (TypeVariable) capture.getTypeArguments().get(0);
    +<a class="jxr_linenumber" name="L733" href="#L733">733</a>         DeclaredType upperBound = (DeclaredType) newTypeVariable.getUpperBound();
    +<a class="jxr_linenumber" name="L734" href="#L734">734</a>         assertEquals(upperBound.getKind(), TypeKind.DECLARED);
    +<a class="jxr_linenumber" name="L735" href="#L735">735</a> 
    +<a class="jxr_linenumber" name="L736" href="#L736">736</a>         <em class="jxr_comment">// Since Enum has a recursive type bound, upperBound must represent Enum&lt;capture&lt;?&gt;&gt; as well!</em>
    +<a class="jxr_linenumber" name="L737" href="#L737">737</a>         assertEquals(capture, upperBound);
    +<a class="jxr_linenumber" name="L738" href="#L738">738</a> 
    +<a class="jxr_linenumber" name="L739" href="#L739">739</a>         <em class="jxr_comment">// The following should be implied, but explicit test does not hurt</em>
    +<a class="jxr_linenumber" name="L740" href="#L740">740</a>         TypeElement upperBoundAsElement = (TypeElement) upperBound.asElement();
    +<a class="jxr_linenumber" name="L741" href="#L741">741</a>         assertTrue(upperBoundAsElement.getQualifiedName().contentEquals(Enum.<strong class="jxr_keyword">class</strong>.getName()));
    +<a class="jxr_linenumber" name="L742" href="#L742">742</a>     }
    +<a class="jxr_linenumber" name="L743" href="#L743">743</a> 
    +<a class="jxr_linenumber" name="L744" href="#L744">744</a>     @Test
    +<a class="jxr_linenumber" name="L745" href="#L745">745</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> captureInterdependentRecursiveBound() {
    +<a class="jxr_linenumber" name="L746" href="#L746">746</a>         <em class="jxr_comment">// aType1: InterdependentRecursiveBoundA&lt;?, ?&gt;</em>
    +<a class="jxr_linenumber" name="L747" href="#L747">747</a>         DeclaredType aType1 = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L748" href="#L748">748</a>             element(InterdependentRecursiveBoundA.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L749" href="#L749">749</a>             types.getWildcardType(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>),
    +<a class="jxr_linenumber" name="L750" href="#L750">750</a>             types.getWildcardType(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L751" href="#L751">751</a>         );
    +<a class="jxr_linenumber" name="L752" href="#L752">752</a>         DeclaredType aCapture1 = (DeclaredType) types.capture(aType1);
    +<a class="jxr_linenumber" name="L753" href="#L753">753</a>         TypeVariable captureForT1 = (TypeVariable) aCapture1.getTypeArguments().get(0);
    +<a class="jxr_linenumber" name="L754" href="#L754">754</a>         TypeVariable captureForU1 = (TypeVariable) aCapture1.getTypeArguments().get(1);
    +<a class="jxr_linenumber" name="L755" href="#L755">755</a> 
    +<a class="jxr_linenumber" name="L756" href="#L756">756</a>         DeclaredType captureForTUpperBound1 = (DeclaredType) captureForT1.getUpperBound();
    +<a class="jxr_linenumber" name="L757" href="#L757">757</a>         assertEquals(captureForTUpperBound1.getTypeArguments().get(0), captureForT1);
    +<a class="jxr_linenumber" name="L758" href="#L758">758</a>         assertEquals(captureForTUpperBound1.getTypeArguments().get(1), captureForU1);
    +<a class="jxr_linenumber" name="L759" href="#L759">759</a>         assertEquals(captureForU1.getUpperBound(), captureForT1);
    +<a class="jxr_linenumber" name="L760" href="#L760">760</a> 
    +<a class="jxr_linenumber" name="L761" href="#L761">761</a> 
    +<a class="jxr_linenumber" name="L762" href="#L762">762</a>         <em class="jxr_comment">// aType2: InterdependentRecursiveBoundA&lt;? super InterdependentRecursiveBoundB, ? extends Serializable&gt;</em>
    +<a class="jxr_linenumber" name="L763" href="#L763">763</a>         DeclaredType aType2 = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L764" href="#L764">764</a>             element(InterdependentRecursiveBoundA.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L765" href="#L765">765</a>             types.getWildcardType(<strong class="jxr_keyword">null</strong>, type(InterdependentRecursiveBoundB.<strong class="jxr_keyword">class</strong>)),
    +<a class="jxr_linenumber" name="L766" href="#L766">766</a>             types.getWildcardType(type(Serializable.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L767" href="#L767">767</a>         );
    +<a class="jxr_linenumber" name="L768" href="#L768">768</a>         DeclaredType aCapture2 = (DeclaredType) types.capture(aType2);
    +<a class="jxr_linenumber" name="L769" href="#L769">769</a>         assertEquals(aCapture2.getTypeArguments().size(), 2);
    +<a class="jxr_linenumber" name="L770" href="#L770">770</a> 
    +<a class="jxr_linenumber" name="L771" href="#L771">771</a>         TypeVariable captureForT2 = (TypeVariable) aCapture2.getTypeArguments().get(0);
    +<a class="jxr_linenumber" name="L772" href="#L772">772</a>         TypeVariable captureForU2 = (TypeVariable) aCapture2.getTypeArguments().get(1);
    +<a class="jxr_linenumber" name="L773" href="#L773">773</a> 
    +<a class="jxr_linenumber" name="L774" href="#L774">774</a>         DeclaredType captureForTUpperBound2 = (DeclaredType) captureForT2.getUpperBound();
    +<a class="jxr_linenumber" name="L775" href="#L775">775</a>         assertEquals(captureForTUpperBound2.getTypeArguments().get(0), captureForT2);
    +<a class="jxr_linenumber" name="L776" href="#L776">776</a>         assertEquals(captureForTUpperBound2.getTypeArguments().get(1), captureForU2);
    +<a class="jxr_linenumber" name="L777" href="#L777">777</a>         DeclaredType captureForTLowerBound2 = (DeclaredType) captureForT2.getLowerBound();
    +<a class="jxr_linenumber" name="L778" href="#L778">778</a>         assertEquals(captureForTLowerBound2, type(InterdependentRecursiveBoundB.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L779" href="#L779">779</a> 
    +<a class="jxr_linenumber" name="L780" href="#L780">780</a>         IntersectionType intersectionType = (IntersectionType) captureForU2.getUpperBound();
    +<a class="jxr_linenumber" name="L781" href="#L781">781</a>         assertTrue(intersectionType.getBounds().contains(captureForT2));
    +<a class="jxr_linenumber" name="L782" href="#L782">782</a>         assertTrue(intersectionType.getBounds().contains(type(Serializable.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L783" href="#L783">783</a> 
    +<a class="jxr_linenumber" name="L784" href="#L784">784</a>         <em class="jxr_comment">// aType3: InterdependentRecursiveBoundA&lt;InterdependentRecursiveBoundB, ?&gt;</em>
    +<a class="jxr_linenumber" name="L785" href="#L785">785</a>         DeclaredType aType3 = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L786" href="#L786">786</a>             element(InterdependentRecursiveBoundA.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L787" href="#L787">787</a>             type(InterdependentRecursiveBoundB.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L788" href="#L788">788</a>             types.getWildcardType(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L789" href="#L789">789</a>         );
    +<a class="jxr_linenumber" name="L790" href="#L790">790</a>         DeclaredType aCapture3 = (DeclaredType) types.capture(aType3);
    +<a class="jxr_linenumber" name="L791" href="#L791">791</a>         assertEquals(aCapture3.getTypeArguments().get(0), type(InterdependentRecursiveBoundB.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L792" href="#L792">792</a>         TypeVariable captureForU3 = (TypeVariable) aCapture3.getTypeArguments().get(1);
    +<a class="jxr_linenumber" name="L793" href="#L793">793</a>         assertEquals(captureForU3.getUpperBound(), type(InterdependentRecursiveBoundB.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L794" href="#L794">794</a>     }
    +<a class="jxr_linenumber" name="L795" href="#L795">795</a> 
    +<a class="jxr_linenumber" name="L796" href="#L796">796</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L797" href="#L797">797</a> <em class="jxr_javadoccomment">     * Verifies that {@link AbstractTypes#contains(TypeMirror, TypeMirror)} throws expected exceptions.</em>
    +<a class="jxr_linenumber" name="L798" href="#L798">798</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L799" href="#L799">799</a>     @Test
    +<a class="jxr_linenumber" name="L800" href="#L800">800</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testContainsInvalidArguments() {
    +<a class="jxr_linenumber" name="L801" href="#L801">801</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L802" href="#L802">802</a>             types.contains(type(Object.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L803" href="#L803">803</a>             Assert.fail(<span class="jxr_string">"Exception expected."</span>);
    +<a class="jxr_linenumber" name="L804" href="#L804">804</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignore) { }
    +<a class="jxr_linenumber" name="L805" href="#L805">805</a> 
    +<a class="jxr_linenumber" name="L806" href="#L806">806</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L807" href="#L807">807</a>             types.contains(<strong class="jxr_keyword">null</strong>, type(Object.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L808" href="#L808">808</a>             Assert.fail(<span class="jxr_string">"Exception expected."</span>);
    +<a class="jxr_linenumber" name="L809" href="#L809">809</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignore) { }
    +<a class="jxr_linenumber" name="L810" href="#L810">810</a> 
    +<a class="jxr_linenumber" name="L811" href="#L811">811</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L812" href="#L812">812</a>             types.contains(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L813" href="#L813">813</a>             Assert.fail(<span class="jxr_string">"Exception expected."</span>);
    +<a class="jxr_linenumber" name="L814" href="#L814">814</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignore) { }
    +<a class="jxr_linenumber" name="L815" href="#L815">815</a>     }
    +<a class="jxr_linenumber" name="L816" href="#L816">816</a> 
    +<a class="jxr_linenumber" name="L817" href="#L817">817</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L818" href="#L818">818</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#contains(TypeMirror, TypeMirror)}.</em>
    +<a class="jxr_linenumber" name="L819" href="#L819">819</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L820" href="#L820">820</a>     @Test
    +<a class="jxr_linenumber" name="L821" href="#L821">821</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testContains() {
    +<a class="jxr_linenumber" name="L822" href="#L822">822</a>         WildcardType extendsWildcard = types.getWildcardType(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L823" href="#L823">823</a>         WildcardType extendsObjectWildcard = types.getWildcardType(type(Object.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L824" href="#L824">824</a>         WildcardType extendsIntegerWildcard = types.getWildcardType(type(Integer.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L825" href="#L825">825</a>         WildcardType extendsNumberWildcard = types.getWildcardType(type(Number.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L826" href="#L826">826</a>         WildcardType superIntegerWildcard = types.getWildcardType(<strong class="jxr_keyword">null</strong>, type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L827" href="#L827">827</a>         WildcardType superNumberWildcard = types.getWildcardType(<strong class="jxr_keyword">null</strong>, type(Number.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L828" href="#L828">828</a> 
    +<a class="jxr_linenumber" name="L829" href="#L829">829</a>         <em class="jxr_comment">// ? extends T &lt;= ? extends S if T &lt;: S</em>
    +<a class="jxr_linenumber" name="L830" href="#L830">830</a>         assertTrue(types.contains(extendsNumberWildcard, extendsIntegerWildcard));
    +<a class="jxr_linenumber" name="L831" href="#L831">831</a>         assertFalse(types.contains(extendsIntegerWildcard, extendsNumberWildcard));
    +<a class="jxr_linenumber" name="L832" href="#L832">832</a> 
    +<a class="jxr_linenumber" name="L833" href="#L833">833</a>         <em class="jxr_comment">// ? extends T &lt;= ?</em>
    +<a class="jxr_linenumber" name="L834" href="#L834">834</a>         assertTrue(types.contains(extendsWildcard, extendsIntegerWildcard));
    +<a class="jxr_linenumber" name="L835" href="#L835">835</a>         assertFalse(types.contains(extendsIntegerWildcard, extendsWildcard));
    +<a class="jxr_linenumber" name="L836" href="#L836">836</a> 
    +<a class="jxr_linenumber" name="L837" href="#L837">837</a>         <em class="jxr_comment">// ? super T &lt;= ? super S if S &lt;: T</em>
    +<a class="jxr_linenumber" name="L838" href="#L838">838</a>         assertTrue(types.contains(superIntegerWildcard, superNumberWildcard));
    +<a class="jxr_linenumber" name="L839" href="#L839">839</a>         assertFalse(types.contains(superNumberWildcard, superIntegerWildcard));
    +<a class="jxr_linenumber" name="L840" href="#L840">840</a> 
    +<a class="jxr_linenumber" name="L841" href="#L841">841</a>         <em class="jxr_comment">// ? super T &lt;= ?</em>
    +<a class="jxr_linenumber" name="L842" href="#L842">842</a>         assertTrue(types.contains(extendsWildcard, superIntegerWildcard));
    +<a class="jxr_linenumber" name="L843" href="#L843">843</a>         assertFalse(types.contains(superIntegerWildcard, extendsWildcard));
    +<a class="jxr_linenumber" name="L844" href="#L844">844</a> 
    +<a class="jxr_linenumber" name="L845" href="#L845">845</a>         <em class="jxr_comment">// ? super T &lt;= ? extends Object</em>
    +<a class="jxr_linenumber" name="L846" href="#L846">846</a>         assertTrue(types.contains(extendsObjectWildcard, superIntegerWildcard));
    +<a class="jxr_linenumber" name="L847" href="#L847">847</a>         assertFalse(types.contains(superIntegerWildcard, extendsObjectWildcard));
    +<a class="jxr_linenumber" name="L848" href="#L848">848</a>         assertFalse(types.contains(extendsNumberWildcard, superIntegerWildcard));
    +<a class="jxr_linenumber" name="L849" href="#L849">849</a> 
    +<a class="jxr_linenumber" name="L850" href="#L850">850</a>         <em class="jxr_comment">// T &lt;= T</em>
    +<a class="jxr_linenumber" name="L851" href="#L851">851</a>         assertTrue(types.contains(type(Integer.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L852" href="#L852">852</a>         assertFalse(types.contains(type(Number.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L853" href="#L853">853</a>         assertFalse(types.contains(type(Integer.<strong class="jxr_keyword">class</strong>), type(Number.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L854" href="#L854">854</a> 
    +<a class="jxr_linenumber" name="L855" href="#L855">855</a>         <em class="jxr_comment">// T &lt;= ? extends T</em>
    +<a class="jxr_linenumber" name="L856" href="#L856">856</a>         assertTrue(types.contains(extendsIntegerWildcard, type(Integer.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L857" href="#L857">857</a>         assertFalse(types.contains(type(Integer.<strong class="jxr_keyword">class</strong>), extendsIntegerWildcard));
    +<a class="jxr_linenumber" name="L858" href="#L858">858</a> 
    +<a class="jxr_linenumber" name="L859" href="#L859">859</a>         <em class="jxr_comment">// T &lt;= ? super T</em>
    +<a class="jxr_linenumber" name="L860" href="#L860">860</a>         assertTrue(types.contains(superIntegerWildcard, type(Integer.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L861" href="#L861">861</a>         assertFalse(types.contains(type(Integer.<strong class="jxr_keyword">class</strong>), superIntegerWildcard));
    +<a class="jxr_linenumber" name="L862" href="#L862">862</a> 
    +<a class="jxr_linenumber" name="L863" href="#L863">863</a>         <em class="jxr_comment">// Verify transitive closure</em>
    +<a class="jxr_linenumber" name="L864" href="#L864">864</a> 
    +<a class="jxr_linenumber" name="L865" href="#L865">865</a>         <em class="jxr_comment">// T &lt;= ?</em>
    +<a class="jxr_linenumber" name="L866" href="#L866">866</a>         assertTrue(types.contains(extendsWildcard, type(Integer.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L867" href="#L867">867</a>         assertFalse(types.contains(type(Integer.<strong class="jxr_keyword">class</strong>), extendsWildcard));
    +<a class="jxr_linenumber" name="L868" href="#L868">868</a> 
    +<a class="jxr_linenumber" name="L869" href="#L869">869</a>         <em class="jxr_comment">// T &lt;= ? extends Object</em>
    +<a class="jxr_linenumber" name="L870" href="#L870">870</a>         assertTrue(types.contains(extendsObjectWildcard, type(Integer.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L871" href="#L871">871</a>         assertFalse(types.contains(type(Integer.<strong class="jxr_keyword">class</strong>), extendsObjectWildcard));
    +<a class="jxr_linenumber" name="L872" href="#L872">872</a> 
    +<a class="jxr_linenumber" name="L873" href="#L873">873</a>         <em class="jxr_comment">// ? &lt;= ? super T</em>
    +<a class="jxr_linenumber" name="L874" href="#L874">874</a>         assertFalse(types.contains(superNumberWildcard, extendsWildcard));
    +<a class="jxr_linenumber" name="L875" href="#L875">875</a> 
    +<a class="jxr_linenumber" name="L876" href="#L876">876</a>         <em class="jxr_comment">// ? [extends Object] &lt;= ? [extends Object]</em>
    +<a class="jxr_linenumber" name="L877" href="#L877">877</a>         assertTrue(types.contains(extendsObjectWildcard, extendsObjectWildcard));
    +<a class="jxr_linenumber" name="L878" href="#L878">878</a>         assertTrue(types.contains(extendsObjectWildcard, extendsWildcard));
    +<a class="jxr_linenumber" name="L879" href="#L879">879</a>         assertTrue(types.contains(extendsWildcard, extendsWildcard));
    +<a class="jxr_linenumber" name="L880" href="#L880">880</a>         assertTrue(types.contains(extendsWildcard, extendsObjectWildcard));
    +<a class="jxr_linenumber" name="L881" href="#L881">881</a> 
    +<a class="jxr_linenumber" name="L882" href="#L882">882</a>         assertFalse(types.contains(extendsNumberWildcard, extendsObjectWildcard));
    +<a class="jxr_linenumber" name="L883" href="#L883">883</a>         assertFalse(types.contains(extendsNumberWildcard, extendsWildcard));
    +<a class="jxr_linenumber" name="L884" href="#L884">884</a>     }
    +<a class="jxr_linenumber" name="L885" href="#L885">885</a> 
    +<a class="jxr_linenumber" name="L886" href="#L886">886</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L887" href="#L887">887</a> <em class="jxr_javadoccomment">     * Verifies that {@link AbstractTypes#erasure(TypeMirror)} throws expected exceptions.</em>
    +<a class="jxr_linenumber" name="L888" href="#L888">888</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L889" href="#L889">889</a>     @Test
    +<a class="jxr_linenumber" name="L890" href="#L890">890</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testErasureInvalidArguments() {
    +<a class="jxr_linenumber" name="L891" href="#L891">891</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L892" href="#L892">892</a>             types.erasure(<strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L893" href="#L893">893</a>             Assert.fail(<span class="jxr_string">"Exception expected."</span>);
    +<a class="jxr_linenumber" name="L894" href="#L894">894</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignore) { }
    +<a class="jxr_linenumber" name="L895" href="#L895">895</a>     }
    +<a class="jxr_linenumber" name="L896" href="#L896">896</a> 
    +<a class="jxr_linenumber" name="L897" href="#L897">897</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L898" href="#L898">898</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#erasure(TypeMirror)}.</em>
    +<a class="jxr_linenumber" name="L899" href="#L899">899</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L900" href="#L900">900</a>     @Test
    +<a class="jxr_linenumber" name="L901" href="#L901">901</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testErasure() {
    +<a class="jxr_linenumber" name="L902" href="#L902">902</a>         <em class="jxr_comment">// Parameterized type</em>
    +<a class="jxr_linenumber" name="L903" href="#L903">903</a>         DeclaredType listOfStringsType = types.getDeclaredType(element(List.<strong class="jxr_keyword">class</strong>), type(String.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L904" href="#L904">904</a>         assertTrue(types.isSameType(types.erasure(listOfStringsType), type(List.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L905" href="#L905">905</a> 
    +<a class="jxr_linenumber" name="L906" href="#L906">906</a>         <em class="jxr_comment">// Nested type</em>
    +<a class="jxr_linenumber" name="L907" href="#L907">907</a>         DeclaredType outerClassType = types.getDeclaredType(element(OuterClass.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L908" href="#L908">908</a>         DeclaredType arrayListOfIntegersType = types.getDeclaredType(element(ArrayList.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L909" href="#L909">909</a>         DeclaredType innerClassType
    +<a class="jxr_linenumber" name="L910" href="#L910">910</a>             = types.getDeclaredType(outerClassType, element(OuterClass.InnerClass.<strong class="jxr_keyword">class</strong>), arrayListOfIntegersType);
    +<a class="jxr_linenumber" name="L911" href="#L911">911</a> 
    +<a class="jxr_linenumber" name="L912" href="#L912">912</a>         DeclaredType expectedErasedNestedType
    +<a class="jxr_linenumber" name="L913" href="#L913">913</a>             = types.getDeclaredType((DeclaredType) type(OuterClass.<strong class="jxr_keyword">class</strong>), element(OuterClass.InnerClass.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L914" href="#L914">914</a>         assertTrue(types.isSameType(types.erasure(innerClassType), expectedErasedNestedType));
    +<a class="jxr_linenumber" name="L915" href="#L915">915</a> 
    +<a class="jxr_linenumber" name="L916" href="#L916">916</a>         <em class="jxr_comment">// Array type</em>
    +<a class="jxr_linenumber" name="L917" href="#L917">917</a>         TypeMirror arrayType = types.getArrayType(listOfStringsType);
    +<a class="jxr_linenumber" name="L918" href="#L918">918</a>         assertTrue(types.isSameType(types.erasure(arrayType), types.getArrayType(type(List.<strong class="jxr_keyword">class</strong>))));
    +<a class="jxr_linenumber" name="L919" href="#L919">919</a> 
    +<a class="jxr_linenumber" name="L920" href="#L920">920</a>         <em class="jxr_comment">// Type variable</em>
    +<a class="jxr_linenumber" name="L921" href="#L921">921</a>         TypeElement listDeclaration = element(List.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L922" href="#L922">922</a>         TypeVariable simpleTypeVariable = types.createTypeVariable(listDeclaration.getTypeParameters().get(0), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L923" href="#L923">923</a>         types.setTypeVariableBounds(simpleTypeVariable, type(Number.<strong class="jxr_keyword">class</strong>), types.getNullType());
    +<a class="jxr_linenumber" name="L924" href="#L924">924</a>         assertTrue(types.isSameType(types.erasure(simpleTypeVariable), type(Number.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L925" href="#L925">925</a> 
    +<a class="jxr_linenumber" name="L926" href="#L926">926</a>         TypeVariable multiBoundTypeVariable
    +<a class="jxr_linenumber" name="L927" href="#L927">927</a>             = types.createTypeVariable(listDeclaration.getTypeParameters().get(0), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L928" href="#L928">928</a>         types.setTypeVariableBounds(multiBoundTypeVariable,
    +<a class="jxr_linenumber" name="L929" href="#L929">929</a>             types.getIntersectionType(type(List.<strong class="jxr_keyword">class</strong>), type(Serializable.<strong class="jxr_keyword">class</strong>)), types.getNullType());
    +<a class="jxr_linenumber" name="L930" href="#L930">930</a>         assertTrue(types.isSameType(types.erasure(multiBoundTypeVariable), type(List.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L931" href="#L931">931</a> 
    +<a class="jxr_linenumber" name="L932" href="#L932">932</a>         <em class="jxr_comment">// Every other type</em>
    +<a class="jxr_linenumber" name="L933" href="#L933">933</a>         PrimitiveType booleanType = types.getPrimitiveType(TypeKind.BOOLEAN);
    +<a class="jxr_linenumber" name="L934" href="#L934">934</a>         assertTrue(types.isSameType(types.erasure(booleanType), booleanType));
    +<a class="jxr_linenumber" name="L935" href="#L935">935</a>         assertTrue(types.isSameType(types.erasure(types.getNullType()), types.getNullType()));
    +<a class="jxr_linenumber" name="L936" href="#L936">936</a>     }
    +<a class="jxr_linenumber" name="L937" href="#L937">937</a> 
    +<a class="jxr_linenumber" name="L938" href="#L938">938</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L939" href="#L939">939</a> <em class="jxr_javadoccomment">     * Verifies that {@link AbstractTypes#asElement(TypeMirror)} throws expected exceptions.</em>
    +<a class="jxr_linenumber" name="L940" href="#L940">940</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L941" href="#L941">941</a>     @Test
    +<a class="jxr_linenumber" name="L942" href="#L942">942</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> asElementInvalidArguments() {
    +<a class="jxr_linenumber" name="L943" href="#L943">943</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L944" href="#L944">944</a>             types.asElement(<strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L945" href="#L945">945</a>             Assert.fail(<span class="jxr_string">"Exception expected."</span>);
    +<a class="jxr_linenumber" name="L946" href="#L946">946</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignore) { }
    +<a class="jxr_linenumber" name="L947" href="#L947">947</a>     }
    +<a class="jxr_linenumber" name="L948" href="#L948">948</a> 
    +<a class="jxr_linenumber" name="L949" href="#L949">949</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L950" href="#L950">950</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#asElement(TypeMirror)}.</em>
    +<a class="jxr_linenumber" name="L951" href="#L951">951</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L952" href="#L952">952</a>     @Test
    +<a class="jxr_linenumber" name="L953" href="#L953">953</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> asElement() {
    +<a class="jxr_linenumber" name="L954" href="#L954">954</a>         assertEquals(types.asElement(type(List.<strong class="jxr_keyword">class</strong>)), element(List.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L955" href="#L955">955</a>         assertEquals(types.asElement(type(Integer.<strong class="jxr_keyword">class</strong>)), element(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L956" href="#L956">956</a> 
    +<a class="jxr_linenumber" name="L957" href="#L957">957</a>         TypeElement listDeclaration = element(List.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L958" href="#L958">958</a>         TypeVariable simpleTypeVariable = types.createTypeVariable(listDeclaration.getTypeParameters().get(0), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L959" href="#L959">959</a>         types.setTypeVariableBounds(simpleTypeVariable, type(Number.<strong class="jxr_keyword">class</strong>), types.getNullType());
    +<a class="jxr_linenumber" name="L960" href="#L960">960</a>         assertEquals(types.asElement(simpleTypeVariable), listDeclaration.getTypeParameters().get(0));
    +<a class="jxr_linenumber" name="L961" href="#L961">961</a> 
    +<a class="jxr_linenumber" name="L962" href="#L962">962</a>         assertNull(types.asElement(types.getPrimitiveType(TypeKind.INT)));
    +<a class="jxr_linenumber" name="L963" href="#L963">963</a>     }
    +<a class="jxr_linenumber" name="L964" href="#L964">964</a> 
    +<a class="jxr_linenumber" name="L965" href="#L965">965</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L966" href="#L966">966</a> <em class="jxr_javadoccomment">     * Verifies {@link TypeElement#asType()}.</em>
    +<a class="jxr_linenumber" name="L967" href="#L967">967</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L968" href="#L968">968</a>     @Test
    +<a class="jxr_linenumber" name="L969" href="#L969">969</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> asType() {
    +<a class="jxr_linenumber" name="L970" href="#L970">970</a>         DeclaredType typesContractType = (DeclaredType) type(getClass());
    +<a class="jxr_linenumber" name="L971" href="#L971">971</a>         TypeElement outerClassDeclaration = element(OuterClass.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L972" href="#L972">972</a>         TypeElement innerClassDeclaration = element(OuterClass.InnerClass.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L973" href="#L973">973</a> 
    +<a class="jxr_linenumber" name="L974" href="#L974">974</a>         DeclaredType outerClassType= types.getDeclaredType(
    +<a class="jxr_linenumber" name="L975" href="#L975">975</a>             typesContractType, outerClassDeclaration, outerClassDeclaration.getTypeParameters().get(0).asType());
    +<a class="jxr_linenumber" name="L976" href="#L976">976</a>         DeclaredType innerClassType = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L977" href="#L977">977</a>             outerClassType, innerClassDeclaration, innerClassDeclaration.getTypeParameters().get(0).asType());
    +<a class="jxr_linenumber" name="L978" href="#L978">978</a>         assertEquals(innerClassDeclaration.asType(), innerClassType);
    +<a class="jxr_linenumber" name="L979" href="#L979">979</a>     }
    +<a class="jxr_linenumber" name="L980" href="#L980">980</a> 
    +<a class="jxr_linenumber" name="L981" href="#L981">981</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L982" href="#L982">982</a> <em class="jxr_javadoccomment">     * Verifies that {@link AbstractTypes#isSameType(TypeMirror, TypeMirror)} throws expected exceptions.</em>
    +<a class="jxr_linenumber" name="L983" href="#L983">983</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L984" href="#L984">984</a>     @Test
    +<a class="jxr_linenumber" name="L985" href="#L985">985</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIsSameTypeInvalidArguments() {
    +<a class="jxr_linenumber" name="L986" href="#L986">986</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L987" href="#L987">987</a>             types.isSameType(<strong class="jxr_keyword">null</strong>, type(Object.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L988" href="#L988">988</a>             Assert.fail(<span class="jxr_string">"Exception expected."</span>);
    +<a class="jxr_linenumber" name="L989" href="#L989">989</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignore) { }
    +<a class="jxr_linenumber" name="L990" href="#L990">990</a> 
    +<a class="jxr_linenumber" name="L991" href="#L991">991</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L992" href="#L992">992</a>             types.isSameType(type(Object.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L993" href="#L993">993</a>             Assert.fail(<span class="jxr_string">"Exception expected."</span>);
    +<a class="jxr_linenumber" name="L994" href="#L994">994</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignore) { }
    +<a class="jxr_linenumber" name="L995" href="#L995">995</a> 
    +<a class="jxr_linenumber" name="L996" href="#L996">996</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L997" href="#L997">997</a>             types.isSameType(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L998" href="#L998">998</a>             Assert.fail(<span class="jxr_string">"Exception expected."</span>);
    +<a class="jxr_linenumber" name="L999" href="#L999">999</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignore) { }
    +<a class="jxr_linenumber" name="L1000" href="#L1000">1000</a>     }
    +<a class="jxr_linenumber" name="L1001" href="#L1001">1001</a> 
    +<a class="jxr_linenumber" name="L1002" href="#L1002">1002</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1003" href="#L1003">1003</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#isSameType(TypeMirror, TypeMirror)}.</em>
    +<a class="jxr_linenumber" name="L1004" href="#L1004">1004</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1005" href="#L1005">1005</a>     @Test
    +<a class="jxr_linenumber" name="L1006" href="#L1006">1006</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIsSameType() {
    +<a class="jxr_linenumber" name="L1007" href="#L1007">1007</a>         assertTrue(types.isSameType(type(Object.<strong class="jxr_keyword">class</strong>), type(Object.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L1008" href="#L1008">1008</a>         assertFalse(types.isSameType(type(Object.<strong class="jxr_keyword">class</strong>), type(Number.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L1009" href="#L1009">1009</a> 
    +<a class="jxr_linenumber" name="L1010" href="#L1010">1010</a>         WildcardType wildcardType = types.getWildcardType(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L1011" href="#L1011">1011</a>         assertFalse(types.isSameType(wildcardType, wildcardType));
    +<a class="jxr_linenumber" name="L1012" href="#L1012">1012</a>     }
    +<a class="jxr_linenumber" name="L1013" href="#L1013">1013</a> 
    +<a class="jxr_linenumber" name="L1014" href="#L1014">1014</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> isSubtypeOfOneOf(TypeMirror subtype, List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; supertypes) {
    +<a class="jxr_linenumber" name="L1015" href="#L1015">1015</a>         <strong class="jxr_keyword">for</strong> (TypeMirror supertype: supertypes) {
    +<a class="jxr_linenumber" name="L1016" href="#L1016">1016</a>             <strong class="jxr_keyword">if</strong> (types.isSubtype(subtype, supertype)) {
    +<a class="jxr_linenumber" name="L1017" href="#L1017">1017</a>                 <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L1018" href="#L1018">1018</a>             }
    +<a class="jxr_linenumber" name="L1019" href="#L1019">1019</a>         }
    +<a class="jxr_linenumber" name="L1020" href="#L1020">1020</a>         <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L1021" href="#L1021">1021</a>     }
    +<a class="jxr_linenumber" name="L1022" href="#L1022">1022</a> 
    +<a class="jxr_linenumber" name="L1023" href="#L1023">1023</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1024" href="#L1024">1024</a> <em class="jxr_javadoccomment">     * Verifies</em>
    +<a class="jxr_linenumber" name="L1025" href="#L1025">1025</a> <em class="jxr_javadoccomment">     * {@link AbstractTypes#getTypeVariable(TypeParameterElement, TypeMirror, TypeMirror, WildcardType)}.</em>
    +<a class="jxr_linenumber" name="L1026" href="#L1026">1026</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1027" href="#L1027">1027</a>     @Test
    +<a class="jxr_linenumber" name="L1028" href="#L1028">1028</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testGetTypeVariable() {
    +<a class="jxr_linenumber" name="L1029" href="#L1029">1029</a>         TypeElement listDeclaration = element(List.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L1030" href="#L1030">1030</a>         TypeParameterElement elementTypeParameter = listDeclaration.getTypeParameters().get(0);
    +<a class="jxr_linenumber" name="L1031" href="#L1031">1031</a> 
    +<a class="jxr_linenumber" name="L1032" href="#L1032">1032</a>         TypeVariable typeVariable
    +<a class="jxr_linenumber" name="L1033" href="#L1033">1033</a>             = types.getTypeVariable(elementTypeParameter, type(Integer.<strong class="jxr_keyword">class</strong>), types.getNullType(), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L1034" href="#L1034">1034</a>         assertEquals(typeVariable.asElement(), elementTypeParameter);
    +<a class="jxr_linenumber" name="L1035" href="#L1035">1035</a>         assertTrue(types.isSameType(typeVariable.getUpperBound(), type(Integer.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L1036" href="#L1036">1036</a>         assertTrue(types.isSameType(typeVariable.getLowerBound(), types.getNullType()));
    +<a class="jxr_linenumber" name="L1037" href="#L1037">1037</a>         assertNull(types.capturedTypeArgument(typeVariable));
    +<a class="jxr_linenumber" name="L1038" href="#L1038">1038</a>     }
    +<a class="jxr_linenumber" name="L1039" href="#L1039">1039</a> 
    +<a class="jxr_linenumber" name="L1040" href="#L1040">1040</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1041" href="#L1041">1041</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#createTypeVariable(TypeParameterElement, WildcardType)}.</em>
    +<a class="jxr_linenumber" name="L1042" href="#L1042">1042</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1043" href="#L1043">1043</a>     @Test
    +<a class="jxr_linenumber" name="L1044" href="#L1044">1044</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> createTypeVariable() {
    +<a class="jxr_linenumber" name="L1045" href="#L1045">1045</a>         TypeElement listDeclaration = element(List.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L1046" href="#L1046">1046</a>         TypeParameterElement elementTypeParameter = listDeclaration.getTypeParameters().get(0);
    +<a class="jxr_linenumber" name="L1047" href="#L1047">1047</a> 
    +<a class="jxr_linenumber" name="L1048" href="#L1048">1048</a>         TypeVariable typeVariable = types.createTypeVariable(elementTypeParameter, <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L1049" href="#L1049">1049</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1050" href="#L1050">1050</a>             typeVariable.getUpperBound();
    +<a class="jxr_linenumber" name="L1051" href="#L1051">1051</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1052" href="#L1052">1052</a>         } <strong class="jxr_keyword">catch</strong> (IllegalStateException ignored) { }
    +<a class="jxr_linenumber" name="L1053" href="#L1053">1053</a> 
    +<a class="jxr_linenumber" name="L1054" href="#L1054">1054</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1055" href="#L1055">1055</a>             typeVariable.getLowerBound();
    +<a class="jxr_linenumber" name="L1056" href="#L1056">1056</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1057" href="#L1057">1057</a>         } <strong class="jxr_keyword">catch</strong> (IllegalStateException ignored) { }
    +<a class="jxr_linenumber" name="L1058" href="#L1058">1058</a>     }
    +<a class="jxr_linenumber" name="L1059" href="#L1059">1059</a> 
    +<a class="jxr_linenumber" name="L1060" href="#L1060">1060</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1061" href="#L1061">1061</a> <em class="jxr_javadoccomment">     * Verifies {@link AbstractTypes#setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)}.</em>
    +<a class="jxr_linenumber" name="L1062" href="#L1062">1062</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1063" href="#L1063">1063</a>     @Test
    +<a class="jxr_linenumber" name="L1064" href="#L1064">1064</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testSetTypeVariableBounds() {
    +<a class="jxr_linenumber" name="L1065" href="#L1065">1065</a>         TypeElement listDeclaration = element(List.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L1066" href="#L1066">1066</a>         TypeParameterElement elementTypeParameter = listDeclaration.getTypeParameters().get(0);
    +<a class="jxr_linenumber" name="L1067" href="#L1067">1067</a> 
    +<a class="jxr_linenumber" name="L1068" href="#L1068">1068</a>         TypeVariable typeVariable = types.createTypeVariable(elementTypeParameter, <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L1069" href="#L1069">1069</a>         types.setTypeVariableBounds(typeVariable, type(Integer.<strong class="jxr_keyword">class</strong>), types.getNullType());
    +<a class="jxr_linenumber" name="L1070" href="#L1070">1070</a>         assertEquals(typeVariable.asElement(), elementTypeParameter);
    +<a class="jxr_linenumber" name="L1071" href="#L1071">1071</a>         assertTrue(types.isSameType(typeVariable.getUpperBound(), type(Integer.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L1072" href="#L1072">1072</a>         assertTrue(types.isSameType(typeVariable.getLowerBound(), types.getNullType()));
    +<a class="jxr_linenumber" name="L1073" href="#L1073">1073</a>         assertNull(types.capturedTypeArgument(typeVariable));
    +<a class="jxr_linenumber" name="L1074" href="#L1074">1074</a> 
    +<a class="jxr_linenumber" name="L1075" href="#L1075">1075</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1076" href="#L1076">1076</a>             types.setTypeVariableBounds(typeVariable, type(Integer.<strong class="jxr_keyword">class</strong>), types.getNullType());
    +<a class="jxr_linenumber" name="L1077" href="#L1077">1077</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1078" href="#L1078">1078</a>         } <strong class="jxr_keyword">catch</strong> (IllegalStateException ignored) { }
    +<a class="jxr_linenumber" name="L1079" href="#L1079">1079</a>     }
    +<a class="jxr_linenumber" name="L1080" href="#L1080">1080</a> 
    +<a class="jxr_linenumber" name="L1081" href="#L1081">1081</a>     @Test
    +<a class="jxr_linenumber" name="L1082" href="#L1082">1082</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testGetIntersectionType() {
    +<a class="jxr_linenumber" name="L1083" href="#L1083">1083</a>         IntersectionType intersectionType = types.getIntersectionType(type(Cloneable.<strong class="jxr_keyword">class</strong>), type(Serializable.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L1084" href="#L1084">1084</a>         assertTrue(isSubtypeOfOneOf(type(Serializable.<strong class="jxr_keyword">class</strong>), intersectionType.getBounds()));
    +<a class="jxr_linenumber" name="L1085" href="#L1085">1085</a> 
    +<a class="jxr_linenumber" name="L1086" href="#L1086">1086</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1087" href="#L1087">1087</a>             types.getIntersectionType();
    +<a class="jxr_linenumber" name="L1088" href="#L1088">1088</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1089" href="#L1089">1089</a>         } <strong class="jxr_keyword">catch</strong> (IllegalArgumentException ignored) { }
    +<a class="jxr_linenumber" name="L1090" href="#L1090">1090</a> 
    +<a class="jxr_linenumber" name="L1091" href="#L1091">1091</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1092" href="#L1092">1092</a>             types.getIntersectionType(type(Cloneable.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L1093" href="#L1093">1093</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1094" href="#L1094">1094</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignored) { }
    +<a class="jxr_linenumber" name="L1095" href="#L1095">1095</a> 
    +<a class="jxr_linenumber" name="L1096" href="#L1096">1096</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1097" href="#L1097">1097</a>             types.getIntersectionType(<strong class="jxr_keyword">null</strong>, type(Cloneable.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L1098" href="#L1098">1098</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1099" href="#L1099">1099</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignored) { }
    +<a class="jxr_linenumber" name="L1100" href="#L1100">1100</a>     }
    +<a class="jxr_linenumber" name="L1101" href="#L1101">1101</a> 
    +<a class="jxr_linenumber" name="L1102" href="#L1102">1102</a>     @Test
    +<a class="jxr_linenumber" name="L1103" href="#L1103">1103</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testToString() {
    +<a class="jxr_linenumber" name="L1104" href="#L1104">1104</a>         <em class="jxr_comment">// PrimitiveType</em>
    +<a class="jxr_linenumber" name="L1105" href="#L1105">1105</a>         <strong class="jxr_keyword">for</strong> (TypeKind primitive: Arrays.asList(TypeKind.DOUBLE, TypeKind.FLOAT, TypeKind.LONG, TypeKind.INT,
    +<a class="jxr_linenumber" name="L1106" href="#L1106">1106</a>                 TypeKind.SHORT, TypeKind.BYTE, TypeKind.CHAR, TypeKind.BOOLEAN)) {
    +<a class="jxr_linenumber" name="L1107" href="#L1107">1107</a>             assertEquals(types.toString(types.getPrimitiveType(primitive)), primitive.toString().toLowerCase());
    +<a class="jxr_linenumber" name="L1108" href="#L1108">1108</a>         }
    +<a class="jxr_linenumber" name="L1109" href="#L1109">1109</a> 
    +<a class="jxr_linenumber" name="L1110" href="#L1110">1110</a>         <em class="jxr_comment">// NullType</em>
    +<a class="jxr_linenumber" name="L1111" href="#L1111">1111</a>         assertEquals(types.toString(types.getNullType()), <span class="jxr_string">"null"</span>);
    +<a class="jxr_linenumber" name="L1112" href="#L1112">1112</a> 
    +<a class="jxr_linenumber" name="L1113" href="#L1113">1113</a>         <em class="jxr_comment">// NoType</em>
    +<a class="jxr_linenumber" name="L1114" href="#L1114">1114</a>         <strong class="jxr_keyword">for</strong> (TypeKind noType: Arrays.asList(TypeKind.VOID, TypeKind.NONE)) {
    +<a class="jxr_linenumber" name="L1115" href="#L1115">1115</a>             assertEquals(types.toString(types.getNoType(noType)), noType.toString().toLowerCase());
    +<a class="jxr_linenumber" name="L1116" href="#L1116">1116</a>         }
    +<a class="jxr_linenumber" name="L1117" href="#L1117">1117</a> 
    +<a class="jxr_linenumber" name="L1118" href="#L1118">1118</a>         <em class="jxr_comment">// DeclaredType</em>
    +<a class="jxr_linenumber" name="L1119" href="#L1119">1119</a>         DeclaredType outerClassType = types.getDeclaredType(element(OuterClass.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L1120" href="#L1120">1120</a>         DeclaredType arrayListOfIntegersType = types.getDeclaredType(element(ArrayList.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L1121" href="#L1121">1121</a>         <em class="jxr_comment">// innerClassType: OuterClass&lt;Integer&gt;.InnerClass&lt;? extends ArrayList&lt;Integer&gt;&gt;</em>
    +<a class="jxr_linenumber" name="L1122" href="#L1122">1122</a>         DeclaredType innerClassType = types.getDeclaredType(
    +<a class="jxr_linenumber" name="L1123" href="#L1123">1123</a>             outerClassType,
    +<a class="jxr_linenumber" name="L1124" href="#L1124">1124</a>             element(OuterClass.InnerClass.<strong class="jxr_keyword">class</strong>),
    +<a class="jxr_linenumber" name="L1125" href="#L1125">1125</a>             types.getWildcardType(arrayListOfIntegersType, <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L1126" href="#L1126">1126</a>         );
    +<a class="jxr_linenumber" name="L1127" href="#L1127">1127</a>         assertEquals(types.toString(innerClassType), String.format(<span class="jxr_string">"%s&lt;%s&gt;.%s&lt;? extends %s&lt;%s&gt;&gt;"</span>,
    +<a class="jxr_linenumber" name="L1128" href="#L1128">1128</a>             OuterClass.<strong class="jxr_keyword">class</strong>.getCanonicalName(), Integer.<strong class="jxr_keyword">class</strong>.getCanonicalName(),
    +<a class="jxr_linenumber" name="L1129" href="#L1129">1129</a>             OuterClass.InnerClass.<strong class="jxr_keyword">class</strong>.getSimpleName(),
    +<a class="jxr_linenumber" name="L1130" href="#L1130">1130</a>             ArrayList.<strong class="jxr_keyword">class</strong>.getCanonicalName(), Integer.<strong class="jxr_keyword">class</strong>.getCanonicalName()));
    +<a class="jxr_linenumber" name="L1131" href="#L1131">1131</a> 
    +<a class="jxr_linenumber" name="L1132" href="#L1132">1132</a>         <em class="jxr_comment">// ArrayType</em>
    +<a class="jxr_linenumber" name="L1133" href="#L1133">1133</a>         assertEquals(types.toString(types.getArrayType(type(Integer.<strong class="jxr_keyword">class</strong>))), Integer[].<strong class="jxr_keyword">class</strong>.getCanonicalName());
    +<a class="jxr_linenumber" name="L1134" href="#L1134">1134</a> 
    +<a class="jxr_linenumber" name="L1135" href="#L1135">1135</a>         <em class="jxr_comment">// TypeVariable</em>
    +<a class="jxr_linenumber" name="L1136" href="#L1136">1136</a>         TypeVariable typeVariable = (TypeVariable) element(List.<strong class="jxr_keyword">class</strong>).getTypeParameters().get(0).asType();
    +<a class="jxr_linenumber" name="L1137" href="#L1137">1137</a>         assertEquals(types.toString(typeVariable), List.<strong class="jxr_keyword">class</strong>.getTypeParameters()[0].getName());
    +<a class="jxr_linenumber" name="L1138" href="#L1138">1138</a>         <em class="jxr_comment">// listOfNumbersType: List&lt;? extends Number&gt;</em>
    +<a class="jxr_linenumber" name="L1139" href="#L1139">1139</a>         DeclaredType listOfNumbersType
    +<a class="jxr_linenumber" name="L1140" href="#L1140">1140</a>             = types.getDeclaredType(element(List.<strong class="jxr_keyword">class</strong>), types.getWildcardType(type(Number.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>));
    +<a class="jxr_linenumber" name="L1141" href="#L1141">1141</a>         TypeVariable capturedTypeVariable
    +<a class="jxr_linenumber" name="L1142" href="#L1142">1142</a>             = (TypeVariable) ((DeclaredType) types.capture(listOfNumbersType)).getTypeArguments().get(0);
    +<a class="jxr_linenumber" name="L1143" href="#L1143">1143</a>         assertEquals(types.toString(capturedTypeVariable),
    +<a class="jxr_linenumber" name="L1144" href="#L1144">1144</a>             String.format(<span class="jxr_string">"capture&lt;? extends %s&gt;"</span>, Number.<strong class="jxr_keyword">class</strong>.getCanonicalName()));
    +<a class="jxr_linenumber" name="L1145" href="#L1145">1145</a> 
    +<a class="jxr_linenumber" name="L1146" href="#L1146">1146</a>         <em class="jxr_comment">// WildcardType</em>
    +<a class="jxr_linenumber" name="L1147" href="#L1147">1147</a>         WildcardType wildcardArgument = types.getWildcardType(<strong class="jxr_keyword">null</strong>, type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L1148" href="#L1148">1148</a>         assertEquals(types.toString(wildcardArgument), String.format(<span class="jxr_string">"? super %s"</span>, Integer.<strong class="jxr_keyword">class</strong>.getCanonicalName()));
    +<a class="jxr_linenumber" name="L1149" href="#L1149">1149</a> 
    +<a class="jxr_linenumber" name="L1150" href="#L1150">1150</a>         <em class="jxr_comment">// IntersectionType</em>
    +<a class="jxr_linenumber" name="L1151" href="#L1151">1151</a>         IntersectionType intersectionType = types.getIntersectionType(type(Cloneable.<strong class="jxr_keyword">class</strong>), type(Serializable.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L1152" href="#L1152">1152</a>         assertEquals(types.toString(intersectionType),
    +<a class="jxr_linenumber" name="L1153" href="#L1153">1153</a>             String.format(<span class="jxr_string">"%s &amp; %s"</span>, Cloneable.<strong class="jxr_keyword">class</strong>.getCanonicalName(), Serializable.<strong class="jxr_keyword">class</strong>.getCanonicalName()));
    +<a class="jxr_linenumber" name="L1154" href="#L1154">1154</a>     }
    +<a class="jxr_linenumber" name="L1155" href="#L1155">1155</a> 
    +<a class="jxr_linenumber" name="L1156" href="#L1156">1156</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1157" href="#L1157">1157</a> <em class="jxr_javadoccomment">     * Verifies that {@link AbstractTypes#unboxedType(TypeMirror)} throws expected exceptions.</em>
    +<a class="jxr_linenumber" name="L1158" href="#L1158">1158</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1159" href="#L1159">1159</a>     @Test
    +<a class="jxr_linenumber" name="L1160" href="#L1160">1160</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> unboxedType() {
    +<a class="jxr_linenumber" name="L1161" href="#L1161">1161</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1162" href="#L1162">1162</a>             types.unboxedType(type(List.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L1163" href="#L1163">1163</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1164" href="#L1164">1164</a>         } <strong class="jxr_keyword">catch</strong> (IllegalArgumentException ignored) { }
    +<a class="jxr_linenumber" name="L1165" href="#L1165">1165</a> 
    +<a class="jxr_linenumber" name="L1166" href="#L1166">1166</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1167" href="#L1167">1167</a>             types.unboxedType(types.getNullType());
    +<a class="jxr_linenumber" name="L1168" href="#L1168">1168</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1169" href="#L1169">1169</a>         } <strong class="jxr_keyword">catch</strong> (IllegalArgumentException ignored) { }
    +<a class="jxr_linenumber" name="L1170" href="#L1170">1170</a>     }
    +<a class="jxr_linenumber" name="L1171" href="#L1171">1171</a> 
    +<a class="jxr_linenumber" name="L1172" href="#L1172">1172</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1173" href="#L1173">1173</a> <em class="jxr_javadoccomment">     * Verifies that {@link AbstractTypes#boxedClass(PrimitiveType)} throws expected exceptions.</em>
    +<a class="jxr_linenumber" name="L1174" href="#L1174">1174</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1175" href="#L1175">1175</a>     @Test
    +<a class="jxr_linenumber" name="L1176" href="#L1176">1176</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> boxedClass() {
    +<a class="jxr_linenumber" name="L1177" href="#L1177">1177</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1178" href="#L1178">1178</a>             types.boxedClass(<strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L1179" href="#L1179">1179</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1180" href="#L1180">1180</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignored) { }
    +<a class="jxr_linenumber" name="L1181" href="#L1181">1181</a>     }
    +<a class="jxr_linenumber" name="L1182" href="#L1182">1182</a> 
    +<a class="jxr_linenumber" name="L1183" href="#L1183">1183</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1184" href="#L1184">1184</a> <em class="jxr_javadoccomment">     * Verifies that {@link AbstractTypes#unboxedType(TypeMirror)} and {@link AbstractTypes#boxedClass(PrimitiveType)}</em>
    +<a class="jxr_linenumber" name="L1185" href="#L1185">1185</a> <em class="jxr_javadoccomment">     * are (essentially) inverse methods of each other.</em>
    +<a class="jxr_linenumber" name="L1186" href="#L1186">1186</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1187" href="#L1187">1187</a>     @Test
    +<a class="jxr_linenumber" name="L1188" href="#L1188">1188</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> boxingAndUnboxing() {
    +<a class="jxr_linenumber" name="L1189" href="#L1189">1189</a>         <strong class="jxr_keyword">for</strong> (TypeKind primitive: Arrays.asList(TypeKind.DOUBLE, TypeKind.FLOAT, TypeKind.LONG, TypeKind.INT,
    +<a class="jxr_linenumber" name="L1190" href="#L1190">1190</a>                 TypeKind.SHORT, TypeKind.BYTE, TypeKind.CHAR, TypeKind.BOOLEAN)) {
    +<a class="jxr_linenumber" name="L1191" href="#L1191">1191</a>             PrimitiveType primitiveType = types.getPrimitiveType(primitive);
    +<a class="jxr_linenumber" name="L1192" href="#L1192">1192</a>             TypeElement boxedClass = types.boxedClass(primitiveType);
    +<a class="jxr_linenumber" name="L1193" href="#L1193">1193</a>             PrimitiveType unboxedType = types.unboxedType(boxedClass.asType());
    +<a class="jxr_linenumber" name="L1194" href="#L1194">1194</a> 
    +<a class="jxr_linenumber" name="L1195" href="#L1195">1195</a>             assertEquals(unboxedType, primitiveType);
    +<a class="jxr_linenumber" name="L1196" href="#L1196">1196</a>             assertEquals(unboxedType.getKind(), primitive);
    +<a class="jxr_linenumber" name="L1197" href="#L1197">1197</a>         }
    +<a class="jxr_linenumber" name="L1198" href="#L1198">1198</a>     }
    +<a class="jxr_linenumber" name="L1199" href="#L1199">1199</a> 
    +<a class="jxr_linenumber" name="L1200" href="#L1200">1200</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1201" href="#L1201">1201</a> <em class="jxr_javadoccomment">     * Verifies that {@link AbstractTypes#getPrimitiveType(TypeKind)} throws expected exceptions.</em>
    +<a class="jxr_linenumber" name="L1202" href="#L1202">1202</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1203" href="#L1203">1203</a>     @Test
    +<a class="jxr_linenumber" name="L1204" href="#L1204">1204</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testGetPrimitiveType() {
    +<a class="jxr_linenumber" name="L1205" href="#L1205">1205</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1206" href="#L1206">1206</a>             types.getPrimitiveType(<strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L1207" href="#L1207">1207</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1208" href="#L1208">1208</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignored) { }
    +<a class="jxr_linenumber" name="L1209" href="#L1209">1209</a> 
    +<a class="jxr_linenumber" name="L1210" href="#L1210">1210</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1211" href="#L1211">1211</a>             types.getPrimitiveType(TypeKind.ARRAY);
    +<a class="jxr_linenumber" name="L1212" href="#L1212">1212</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1213" href="#L1213">1213</a>         } <strong class="jxr_keyword">catch</strong> (IllegalArgumentException ignored) { }
    +<a class="jxr_linenumber" name="L1214" href="#L1214">1214</a>     }
    +<a class="jxr_linenumber" name="L1215" href="#L1215">1215</a> 
    +<a class="jxr_linenumber" name="L1216" href="#L1216">1216</a>     @Test
    +<a class="jxr_linenumber" name="L1217" href="#L1217">1217</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testGetNoType() {
    +<a class="jxr_linenumber" name="L1218" href="#L1218">1218</a>         <strong class="jxr_keyword">for</strong> (TypeKind noTypeKind: Arrays.asList(TypeKind.VOID, TypeKind.NONE)) {
    +<a class="jxr_linenumber" name="L1219" href="#L1219">1219</a>             assertEquals(types.getNoType(noTypeKind).getKind(), noTypeKind);
    +<a class="jxr_linenumber" name="L1220" href="#L1220">1220</a>         }
    +<a class="jxr_linenumber" name="L1221" href="#L1221">1221</a> 
    +<a class="jxr_linenumber" name="L1222" href="#L1222">1222</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1223" href="#L1223">1223</a>             types.getNoType(<strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L1224" href="#L1224">1224</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1225" href="#L1225">1225</a>         } <strong class="jxr_keyword">catch</strong> (NullPointerException ignored) { }
    +<a class="jxr_linenumber" name="L1226" href="#L1226">1226</a> 
    +<a class="jxr_linenumber" name="L1227" href="#L1227">1227</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L1228" href="#L1228">1228</a>             types.getNoType(TypeKind.PACKAGE);
    +<a class="jxr_linenumber" name="L1229" href="#L1229">1229</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L1230" href="#L1230">1230</a>         } <strong class="jxr_keyword">catch</strong> (IllegalArgumentException ignored) { }
    +<a class="jxr_linenumber" name="L1231" href="#L1231">1231</a>     }
    +<a class="jxr_linenumber" name="L1232" href="#L1232">1232</a> 
    +<a class="jxr_linenumber" name="L1233" href="#L1233">1233</a>     @Test
    +<a class="jxr_linenumber" name="L1234" href="#L1234">1234</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testGetNullType() {
    +<a class="jxr_linenumber" name="L1235" href="#L1235">1235</a>         assertEquals(types.getNullType().getKind(), TypeKind.NULL);
    +<a class="jxr_linenumber" name="L1236" href="#L1236">1236</a>     }
    +<a class="jxr_linenumber" name="L1237" href="#L1237">1237</a> 
    +<a class="jxr_linenumber" name="L1238" href="#L1238">1238</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> testEqualsAndHashCode(Object first, Object second) {
    +<a class="jxr_linenumber" name="L1239" href="#L1239">1239</a>         assertTrue(first.equals(first));
    +<a class="jxr_linenumber" name="L1240" href="#L1240">1240</a>         assertTrue(second.equals(second));
    +<a class="jxr_linenumber" name="L1241" href="#L1241">1241</a>         assertTrue(first.equals(second));
    +<a class="jxr_linenumber" name="L1242" href="#L1242">1242</a>         assertTrue(second.equals(first));
    +<a class="jxr_linenumber" name="L1243" href="#L1243">1243</a> 
    +<a class="jxr_linenumber" name="L1244" href="#L1244">1244</a>         assertFalse(first.equals(<strong class="jxr_keyword">null</strong>));
    +<a class="jxr_linenumber" name="L1245" href="#L1245">1245</a>         assertFalse(first.equals(<strong class="jxr_keyword">new</strong> Object()));
    +<a class="jxr_linenumber" name="L1246" href="#L1246">1246</a> 
    +<a class="jxr_linenumber" name="L1247" href="#L1247">1247</a>         assertEquals(first.hashCode(), second.hashCode());
    +<a class="jxr_linenumber" name="L1248" href="#L1248">1248</a>     }
    +<a class="jxr_linenumber" name="L1249" href="#L1249">1249</a> 
    +<a class="jxr_linenumber" name="L1250" href="#L1250">1250</a>     @Test
    +<a class="jxr_linenumber" name="L1251" href="#L1251">1251</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testEqualsAndHashCode() {
    +<a class="jxr_linenumber" name="L1252" href="#L1252">1252</a>         testEqualsAndHashCode(types.getArrayType(type(Integer.<strong class="jxr_keyword">class</strong>)), types.getArrayType(type(Integer.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L1253" href="#L1253">1253</a>         testEqualsAndHashCode(types.getPrimitiveType(TypeKind.INT), types.getPrimitiveType(TypeKind.INT));
    +<a class="jxr_linenumber" name="L1254" href="#L1254">1254</a>         TypeElement integerDeclaration = element(Integer.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L1255" href="#L1255">1255</a>         testEqualsAndHashCode(types.getDeclaredType(integerDeclaration), types.getDeclaredType(integerDeclaration));
    +<a class="jxr_linenumber" name="L1256" href="#L1256">1256</a>         testEqualsAndHashCode(
    +<a class="jxr_linenumber" name="L1257" href="#L1257">1257</a>             types.getIntersectionType(type(Serializable.<strong class="jxr_keyword">class</strong>), type(Cloneable.<strong class="jxr_keyword">class</strong>)),
    +<a class="jxr_linenumber" name="L1258" href="#L1258">1258</a>             types.getIntersectionType(type(Serializable.<strong class="jxr_keyword">class</strong>), type(Cloneable.<strong class="jxr_keyword">class</strong>))
    +<a class="jxr_linenumber" name="L1259" href="#L1259">1259</a>         );
    +<a class="jxr_linenumber" name="L1260" href="#L1260">1260</a>         testEqualsAndHashCode(
    +<a class="jxr_linenumber" name="L1261" href="#L1261">1261</a>             types.getWildcardType(type(Integer.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>),
    +<a class="jxr_linenumber" name="L1262" href="#L1262">1262</a>             types.getWildcardType(type(Integer.<strong class="jxr_keyword">class</strong>), <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L1263" href="#L1263">1263</a>         );
    +<a class="jxr_linenumber" name="L1264" href="#L1264">1264</a>         testEqualsAndHashCode(types.getNullType(), types.getNullType());
    +<a class="jxr_linenumber" name="L1265" href="#L1265">1265</a>         testEqualsAndHashCode(types.getNoType(TypeKind.VOID), types.getNoType(TypeKind.VOID));
    +<a class="jxr_linenumber" name="L1266" href="#L1266">1266</a>         TypeElement listDeclaration = element(List.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L1267" href="#L1267">1267</a>         TypeParameterElement listTypeParameter = listDeclaration.getTypeParameters().get(0);
    +<a class="jxr_linenumber" name="L1268" href="#L1268">1268</a>         TypeVariable listTypeArgument = (TypeVariable) listTypeParameter.asType();
    +<a class="jxr_linenumber" name="L1269" href="#L1269">1269</a>         testEqualsAndHashCode(
    +<a class="jxr_linenumber" name="L1270" href="#L1270">1270</a>             listTypeArgument,
    +<a class="jxr_linenumber" name="L1271" href="#L1271">1271</a>             types.getTypeVariable(listTypeParameter, listTypeArgument.getUpperBound(), listTypeArgument.getLowerBound(),
    +<a class="jxr_linenumber" name="L1272" href="#L1272">1272</a>                 <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L1273" href="#L1273">1273</a>         );
    +<a class="jxr_linenumber" name="L1274" href="#L1274">1274</a> 
    +<a class="jxr_linenumber" name="L1275" href="#L1275">1275</a>         testEqualsAndHashCode(element(Serializable.<strong class="jxr_keyword">class</strong>), element(Serializable.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L1276" href="#L1276">1276</a>         testEqualsAndHashCode(listTypeParameter, listTypeParameter);
    +<a class="jxr_linenumber" name="L1277" href="#L1277">1277</a>     }
    +<a class="jxr_linenumber" name="L1278" href="#L1278">1278</a> 
    +<a class="jxr_linenumber" name="L1279" href="#L1279">1279</a>     @Test
    +<a class="jxr_linenumber" name="L1280" href="#L1280">1280</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> typeElementTest() {
    +<a class="jxr_linenumber" name="L1281" href="#L1281">1281</a>         TypeElement outerClassDeclaration = element(OuterClass.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L1282" href="#L1282">1282</a>         TypeElement innerClassDeclaration = element(OuterClass.InnerClass.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L1283" href="#L1283">1283</a>         assertEquals(innerClassDeclaration.getEnclosingElement(), outerClassDeclaration);
    +<a class="jxr_linenumber" name="L1284" href="#L1284">1284</a>         assertTrue(outerClassDeclaration.getEnclosedElements().contains(innerClassDeclaration));
    +<a class="jxr_linenumber" name="L1285" href="#L1285">1285</a>         assertTrue(outerClassDeclaration.getEnclosedElements().containsAll(outerClassDeclaration.getTypeParameters()));
    +<a class="jxr_linenumber" name="L1286" href="#L1286">1286</a> 
    +<a class="jxr_linenumber" name="L1287" href="#L1287">1287</a>         TypeElement integerDeclaration = element(Integer.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L1288" href="#L1288">1288</a>         assertEquals(integerDeclaration.getSuperclass(), type(Number.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L1289" href="#L1289">1289</a>         DeclaredType integerComparableType = types.getDeclaredType(element(Comparable.<strong class="jxr_keyword">class</strong>), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L1290" href="#L1290">1290</a>         assertEquals(integerDeclaration.getInterfaces(), Collections.singletonList(integerComparableType));
    +<a class="jxr_linenumber" name="L1291" href="#L1291">1291</a>         assertEquals(integerDeclaration.getQualifiedName().toString(), Integer.<strong class="jxr_keyword">class</strong>.getName());
    +<a class="jxr_linenumber" name="L1292" href="#L1292">1292</a>         assertEquals(integerDeclaration.getSimpleName().toString(), Integer.<strong class="jxr_keyword">class</strong>.getSimpleName());
    +<a class="jxr_linenumber" name="L1293" href="#L1293">1293</a>         assertEquals(integerDeclaration.asType(), type(Integer.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L1294" href="#L1294">1294</a> 
    +<a class="jxr_linenumber" name="L1295" href="#L1295">1295</a>         <em class="jxr_comment">// Support for methods not strictly necessary for type-system operations is optional (for instance,</em>
    +<a class="jxr_linenumber" name="L1296" href="#L1296">1296</a>         <em class="jxr_comment">// getKind() or getNestingKind())</em>
    +<a class="jxr_linenumber" name="L1297" href="#L1297">1297</a>     }
    +<a class="jxr_linenumber" name="L1298" href="#L1298">1298</a> 
    +<a class="jxr_linenumber" name="L1299" href="#L1299">1299</a>     @Test
    +<a class="jxr_linenumber" name="L1300" href="#L1300">1300</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> typeParameterElementTest() {
    +<a class="jxr_linenumber" name="L1301" href="#L1301">1301</a>         TypeElement outerClassDeclaration = element(OuterClass.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L1302" href="#L1302">1302</a>         TypeParameterElement outerClassTypeParameter = outerClassDeclaration.getTypeParameters().get(0);
    +<a class="jxr_linenumber" name="L1303" href="#L1303">1303</a>         assertEquals(outerClassTypeParameter.getEnclosingElement(), outerClassDeclaration);
    +<a class="jxr_linenumber" name="L1304" href="#L1304">1304</a>         assertEquals(outerClassTypeParameter.getEnclosedElements(), Collections.emptyList());
    +<a class="jxr_linenumber" name="L1305" href="#L1305">1305</a>         assertEquals(
    +<a class="jxr_linenumber" name="L1306" href="#L1306">1306</a>             outerClassTypeParameter.asType(),
    +<a class="jxr_linenumber" name="L1307" href="#L1307">1307</a>             types.getTypeVariable(outerClassTypeParameter, type(Number.<strong class="jxr_keyword">class</strong>), types.getNullType(), <strong class="jxr_keyword">null</strong>)
    +<a class="jxr_linenumber" name="L1308" href="#L1308">1308</a>         );
    +<a class="jxr_linenumber" name="L1309" href="#L1309">1309</a>         assertEquals(outerClassTypeParameter.getBounds(), Collections.singletonList(type(Number.<strong class="jxr_keyword">class</strong>)));
    +<a class="jxr_linenumber" name="L1310" href="#L1310">1310</a>         assertEquals(
    +<a class="jxr_linenumber" name="L1311" href="#L1311">1311</a>             outerClassTypeParameter.getSimpleName().toString(),
    +<a class="jxr_linenumber" name="L1312" href="#L1312">1312</a>             OuterClass.<strong class="jxr_keyword">class</strong>.getTypeParameters()[0].getName()
    +<a class="jxr_linenumber" name="L1313" href="#L1313">1313</a>         );
    +<a class="jxr_linenumber" name="L1314" href="#L1314">1314</a>         assertEquals(outerClassTypeParameter.getGenericElement(), outerClassTypeParameter.getEnclosingElement());
    +<a class="jxr_linenumber" name="L1315" href="#L1315">1315</a>     }
    +<a class="jxr_linenumber" name="L1316" href="#L1316">1316</a> }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref-test/net/florianschoppmann/java/type/AbstractTypesProvider.html b/xref-test/net/florianschoppmann/java/type/AbstractTypesProvider.html
    new file mode 100644
    index 0000000..967d5b9
    --- /dev/null
    +++ b/xref-test/net/florianschoppmann/java/type/AbstractTypesProvider.html
    @@ -0,0 +1,43 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>AbstractTypesProvider xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../testapidocs/net/florianschoppmann/java/type/AbstractTypesProvider.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.type;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.TypeElement;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> java.util.Map;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_javadoccomment"> * Provider for {@link AbstractTypes} instances in contract tests.</em>
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypesProvider.html">AbstractTypesProvider</a> {
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_javadoccomment">     * Performs pre-contract actions.</em>
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;This method is called from within an {@link org.testng.annotations.BeforeClass} annotated method. It is</em>
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_javadoccomment">     * therefore possible to throw a {@link org.testng.SkipException} in this method.</em>
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>      <strong class="jxr_keyword">void</strong> preContract();
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_javadoccomment">     * Puts {@link TypeElement} instances into the given map (corresponding to the {@link Class} keys) and returns a</em>
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_javadoccomment">     * {@link AbstractTypes} instance.</em>
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;Implementations of this method must put a {@link TypeElement} instance for each {@link Class} key into the</em>
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_javadoccomment">     * given map. Implementations must not add or remove entries to/from the given map.</em>
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  <em class="jxr_javadoccomment">     * @param classTypeElementMap Map with {@link Class} objects as keys. The value for each key is initially undefined</em>
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">     *     and must be updated with the respective {@link TypeElement} upon return.</em>
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment">     * @return the {@link AbstractTypes} instance that will be used for the contract test</em>
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>      AbstractTypes getTypes(Map&lt;Class&lt;?&gt;, TypeElement&gt; classTypeElementMap);
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref-test/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html b/xref-test/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html
    new file mode 100644
    index 0000000..4e2876d
    --- /dev/null
    +++ b/xref-test/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html
    @@ -0,0 +1,125 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>ExtendedTypeKindVisitor7Test xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../testapidocs/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.type;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> net.florianschoppmann.java.reflect.ReflectionTypes;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> org.testng.Assert;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> org.testng.annotations.Test;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.AnnotationMirror;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeMirror;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVisitor;
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.UnknownTypeException;
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <strong class="jxr_keyword">import</strong> java.io.Serializable;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <strong class="jxr_keyword">import</strong> java.lang.annotation.Annotation;
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <strong class="jxr_keyword">import</strong> java.util.Arrays;
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_javadoccomment"> * Unit tests for {@link ExtendedTypeKindVisitor7}.</em>
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">ExtendedTypeKindVisitor7Test</a> {
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ReflectionTypes types = ReflectionTypes.getInstance();
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> AnnotatedConstruct {
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>          @Override
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>          <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> List&lt;? <strong class="jxr_keyword">extends</strong> AnnotationMirror&gt; getAnnotationMirrors() {
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnsupportedOperationException();
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>          }
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>          @Override
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>          <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> &lt;A <strong class="jxr_keyword">extends</strong> Annotation&gt; A getAnnotation(Class&lt;A&gt; annotationType) {
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnsupportedOperationException();
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>          }
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>          @Override
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>          <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> &lt;A <strong class="jxr_keyword">extends</strong> Annotation&gt; A[] getAnnotationsByType(Class&lt;A&gt; annotationType) {
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnsupportedOperationException();
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>          }
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      }
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">IntersectionTypeImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> IntersectionType {
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>          <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List&lt;TypeMirror&gt; bounds;
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>          <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isIntersectionType;
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>          <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">IntersectionTypeImpl</a>(List&lt;TypeMirror&gt; bounds, <strong class="jxr_keyword">boolean</strong> isIntersectionType) {
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>              <strong class="jxr_keyword">this</strong>.bounds = bounds;
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>              <strong class="jxr_keyword">this</strong>.isIntersectionType = isIntersectionType;
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>          }
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>          @Override
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>          <strong class="jxr_keyword">public</strong> List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; getBounds() {
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>              <strong class="jxr_keyword">return</strong> bounds;
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>          }
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>          @Override
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>          <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isIntersectionType() {
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>              <strong class="jxr_keyword">return</strong> isIntersectionType;
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          }
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          @Override
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          <strong class="jxr_keyword">public</strong> TypeKind getKind() {
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>              <strong class="jxr_keyword">return</strong> TypeKind.OTHER;
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          }
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>          @Override
    +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L67" href="#L67">67</a>              <strong class="jxr_keyword">return</strong> visitor.visitUnknown(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          }
    +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      }
    +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  
    +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">OtherType</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> TypeMirror {
    +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          @Override
    +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          <strong class="jxr_keyword">public</strong> TypeKind getKind() {
    +<a class="jxr_linenumber" name="L74" href="#L74">74</a>              <strong class="jxr_keyword">return</strong> TypeKind.OTHER;
    +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          }
    +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  
    +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          @Override
    +<a class="jxr_linenumber" name="L78" href="#L78">78</a>          <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L79" href="#L79">79</a>              <strong class="jxr_keyword">return</strong> visitor.visitUnknown(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L80" href="#L80">80</a>          }
    +<a class="jxr_linenumber" name="L81" href="#L81">81</a>      }
    +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  
    +<a class="jxr_linenumber" name="L83" href="#L83">83</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">SomeVisitor</a> <strong class="jxr_keyword">extends</strong> ExtendedTypeKindVisitor7&lt;String, String&gt; {
    +<a class="jxr_linenumber" name="L84" href="#L84">84</a>          @Override
    +<a class="jxr_linenumber" name="L85" href="#L85">85</a>          <strong class="jxr_keyword">public</strong> String visitOther(TypeMirror typeMirror, @Nullable String parameter) {
    +<a class="jxr_linenumber" name="L86" href="#L86">86</a>              <strong class="jxr_keyword">return</strong> <span class="jxr_string">"unknown"</span>;
    +<a class="jxr_linenumber" name="L87" href="#L87">87</a>          }
    +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      }
    +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  
    +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      @Test
    +<a class="jxr_linenumber" name="L91" href="#L91">91</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> test() {
    +<a class="jxr_linenumber" name="L92" href="#L92">92</a>          <strong class="jxr_keyword">final</strong> List&lt;TypeMirror&gt; bounds
    +<a class="jxr_linenumber" name="L93" href="#L93">93</a>              = Arrays.asList(types.typeMirror(Serializable.<strong class="jxr_keyword">class</strong>), types.typeMirror(Cloneable.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  
    +<a class="jxr_linenumber" name="L95" href="#L95">95</a>          ExtendedTypeKindVisitor7&lt;String, String&gt; visitor = <strong class="jxr_keyword">new</strong> ExtendedTypeKindVisitor7&lt;&gt;(<span class="jxr_string">"42"</span>);
    +<a class="jxr_linenumber" name="L96" href="#L96">96</a>          <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">SomeVisitor</a> someVisitor = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">SomeVisitor</a>();
    +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  
    +<a class="jxr_linenumber" name="L98" href="#L98">98</a>          <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L99" href="#L99">99</a>              visitor.visitUnknown(<strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">IntersectionTypeImpl</a>(bounds, false), <span class="jxr_string">"24"</span>);
    +<a class="jxr_linenumber" name="L100" href="#L100">100</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L101" href="#L101">101</a>         } <strong class="jxr_keyword">catch</strong> (UnknownTypeException ignored) { }
    +<a class="jxr_linenumber" name="L102" href="#L102">102</a> 
    +<a class="jxr_linenumber" name="L103" href="#L103">103</a>         <strong class="jxr_keyword">try</strong> {
    +<a class="jxr_linenumber" name="L104" href="#L104">104</a>             visitor.visitUnknown(<strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">OtherType</a>(), <span class="jxr_string">"24"</span>);
    +<a class="jxr_linenumber" name="L105" href="#L105">105</a>             Assert.fail(<span class="jxr_string">"Expected exception."</span>);
    +<a class="jxr_linenumber" name="L106" href="#L106">106</a>         } <strong class="jxr_keyword">catch</strong> (UnknownTypeException ignored) { }
    +<a class="jxr_linenumber" name="L107" href="#L107">107</a> 
    +<a class="jxr_linenumber" name="L108" href="#L108">108</a>         Assert.assertEquals(someVisitor.visitUnknown(<strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">OtherType</a>(), <span class="jxr_string">"24"</span>), <span class="jxr_string">"unknown"</span>);
    +<a class="jxr_linenumber" name="L109" href="#L109">109</a> 
    +<a class="jxr_linenumber" name="L110" href="#L110">110</a>         Assert.assertEquals(visitor.visitUnknown(<strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7Test.html">IntersectionTypeImpl</a>(bounds, <strong class="jxr_keyword">true</strong>), <span class="jxr_string">"24"</span>), <span class="jxr_string">"42"</span>);
    +<a class="jxr_linenumber" name="L111" href="#L111">111</a>     }
    +<a class="jxr_linenumber" name="L112" href="#L112">112</a> }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref-test/net/florianschoppmann/java/type/package-frame.html b/xref-test/net/florianschoppmann/java/type/package-frame.html
    new file mode 100644
    index 0000000..300fbc3
    --- /dev/null
    +++ b/xref-test/net/florianschoppmann/java/type/package-frame.html
    @@ -0,0 +1,102 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference Package net.florianschoppmann.java.type</title>
    +		<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +
    +		<h3>
    +        	<a href="package-summary.html" target="classFrame">net.florianschoppmann.java.type</a>
    +      	</h3>
    +
    +      	<h3>Classes</h3>
    +
    +      	<ul>
    +      		          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame"></a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">AbstractTypesContract</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesProvider.html" target="classFrame">AbstractTypesProvider</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ExtendedTypeKindVisitor7Test.html" target="classFrame">AnnotatedConstructImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">DiamondA</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">DiamondB</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">DiamondC</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">DiamondD</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ExtendedTypeKindVisitor7Test.html" target="classFrame">ExtendedTypeKindVisitor7Test</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">ExtendsParameterized</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">ImmutableIntegerListSet</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">InnerClass</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">IntegerListSet</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">InterdependentRecursiveBoundA</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">InterdependentRecursiveBoundB</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ExtendedTypeKindVisitor7Test.html" target="classFrame">IntersectionTypeImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ExtendedTypeKindVisitor7Test.html" target="classFrame">OtherType</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">OuterClass</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">RawSubExtendsParameterized</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">SimpleA</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">SimpleB</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">SimpleC</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">SimpleParameterized</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ExtendedTypeKindVisitor7Test.html" target="classFrame">SomeVisitor</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">SubDiamondB</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">SubExtendsParameterized</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypesContract.html" target="classFrame">SubSubDiamondB</a>
    +          	</li>
    +          	      	</ul>
    +
    +	</body>
    +</html>
    \ No newline at end of file
    diff --git a/xref-test/net/florianschoppmann/java/type/package-summary.html b/xref-test/net/florianschoppmann/java/type/package-summary.html
    new file mode 100644
    index 0000000..0613e02
    --- /dev/null
    +++ b/xref-test/net/florianschoppmann/java/type/package-summary.html
    @@ -0,0 +1,199 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference Package net.florianschoppmann.java.type</title>
    +		<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +		      	<div class="overview">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../overview-summary.html">Overview</a>
    +          		</li>
    +          		<li class="selected">Package</li>
    +        	</ul>
    +      	</div>
    +      	<div class="framenoframe">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../index.html" target="_top">FRAMES</a>
    +          		</li>
    +          		<li>
    +            		<a href="package-summary.html" target="_top">NO FRAMES</a>
    +          		</li>
    +        	</ul>
    +      	</div>
    +		
    +		      	<h2>Package net.florianschoppmann.java.type</h2>
    +
    +		<table class="summary">
    +        	<thead>
    +          		<tr>
    +            		<th>Class Summary</th>
    +          		</tr>
    +        	</thead>
    +        	<tbody>
    +        		            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame"></a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">AbstractTypesContract</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesProvider.html" target="classFrame">AbstractTypesProvider</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ExtendedTypeKindVisitor7Test.html" target="classFrame">AnnotatedConstructImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">DiamondA</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">DiamondB</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">DiamondC</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">DiamondD</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ExtendedTypeKindVisitor7Test.html" target="classFrame">ExtendedTypeKindVisitor7Test</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">ExtendsParameterized</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">ImmutableIntegerListSet</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">InnerClass</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">IntegerListSet</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">InterdependentRecursiveBoundA</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">InterdependentRecursiveBoundB</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ExtendedTypeKindVisitor7Test.html" target="classFrame">IntersectionTypeImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ExtendedTypeKindVisitor7Test.html" target="classFrame">OtherType</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">OuterClass</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">RawSubExtendsParameterized</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">SimpleA</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">SimpleB</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">SimpleC</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">SimpleParameterized</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ExtendedTypeKindVisitor7Test.html" target="classFrame">SomeVisitor</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">SubDiamondB</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">SubExtendsParameterized</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypesContract.html" target="classFrame">SubSubDiamondB</a>
    +              		</td>
    +            	</tr>
    +				        	</tbody>
    +      	</table>
    +		
    +		      	<div class="overview">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../overview-summary.html">Overview</a>
    +          		</li>
    +          		<li class="selected">Package</li>
    +        	</ul>
    +      	</div>
    +      	<div class="framenoframe">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../index.html" target="_top">FRAMES</a>
    +          		</li>
    +          		<li>
    +            		<a href="package-summary.html" target="_top">NO FRAMES</a>
    +          		</li>
    +        	</ul>
    +      	</div>
    +				<hr />
    +		<div id="footer">
    +			Copyright &#169; 2014&#x2013;2015. All rights reserved.
    +		</div>
    +	</body>
    +</html>
    \ No newline at end of file
    diff --git a/xref-test/overview-frame.html b/xref-test/overview-frame.html
    new file mode 100644
    index 0000000..5916885
    --- /dev/null
    +++ b/xref-test/overview-frame.html
    @@ -0,0 +1,28 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference</title>
    +		<link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +
    +		<h3>
    +			<a href="allclasses-frame.html" target="packageFrame">All Classes</a>
    +		</h3>
    +
    +		<h3>Packages</h3>
    +
    +		<ul>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/package-frame.html" target="packageFrame">net.florianschoppmann.java.reflect</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/package-frame.html" target="packageFrame">net.florianschoppmann.java.type</a>
    +			</li>
    +					</ul>
    +
    +	</body>
    +</html>
    +
    diff --git a/xref-test/overview-summary.html b/xref-test/overview-summary.html
    new file mode 100644
    index 0000000..a7ab766
    --- /dev/null
    +++ b/xref-test/overview-summary.html
    @@ -0,0 +1,71 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference</title>
    +		<link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +				<div class="overview">
    +			<ul>
    +				<li class="selected">Overview</li>
    +				<li>Package</li>
    +			</ul>
    +		</div>
    +		<div class="framenoframe">
    +			<ul>
    +				<li>
    +					<a href="index.html" target="_top">FRAMES</a>
    +				</li>
    +				<li>
    +    	        	<a href="overview-summary.html" target="_top">NO FRAMES</a>
    +        	  	</li>
    +	        </ul>
    +      	</div>
    +		
    +		      	<h2>Java Types 1.0.1 Reference</h2>
    +
    +		<table class="summary">
    +        	<thead>
    +          		<tr>
    +            		<th>Packages</th>
    +          		</tr>
    +        	</thead>
    +        	<tbody>
    +    	    	            	<tr>
    +              		<td>
    +                		<a href="net/florianschoppmann/java/reflect/package-summary.html">net.florianschoppmann.java.reflect</a>
    +              		</td>
    +            	</tr>
    +	          	            	<tr>
    +              		<td>
    +                		<a href="net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a>
    +              		</td>
    +            	</tr>
    +	          	        	</tbody>
    +      	</table>
    +		
    +				<div class="overview">
    +			<ul>
    +				<li class="selected">Overview</li>
    +				<li>Package</li>
    +			</ul>
    +		</div>
    +		<div class="framenoframe">
    +			<ul>
    +				<li>
    +					<a href="index.html" target="_top">FRAMES</a>
    +				</li>
    +				<li>
    +    	        	<a href="overview-summary.html" target="_top">NO FRAMES</a>
    +        	  	</li>
    +	        </ul>
    +      	</div>
    +		
    +		<hr />
    +		<div id="footer">
    +			Copyright &#169; 2014&#x2013;2015. All rights reserved.
    +		</div>
    +	</body>
    +</html>
    \ No newline at end of file
    diff --git a/xref-test/stylesheet.css b/xref-test/stylesheet.css
    new file mode 100644
    index 0000000..89732f8
    --- /dev/null
    +++ b/xref-test/stylesheet.css
    @@ -0,0 +1,114 @@
    +/* Javadoc style sheet */
    +/* Define colors, fonts and other style attributes here to override the defaults  */
    +body {
    +    background-color: #fff;
    +    font-family: Arial, Helvetica, sans-serif;
    +}
    +
    +a:link {
    +    color: #00f;
    +}
    +a:visited {
    +    color: #00a;
    +}
    +
    +a:active, a:hover {
    +    color: #f30 !important;
    +}
    +
    +ul, li {
    +    list-style-type:none;
    +    margin:0;
    +    padding:0;
    +}
    +
    +table td {
    +    padding: 3px;
    +    border: 1px solid #000;
    +}
    +table {
    +    width:100%;
    +    border: 1px solid #000;
    +    border-collapse: collapse;
    +}
    +
    +div.overview {
    +    background-color:#ddd;
    +    padding: 4px 4px 4px 0;
    +}
    +div.overview li, div.framenoframe li {
    +    display: inline;
    +}
    +div.framenoframe {
    +    text-align: center;
    +    font-size: x-small;
    +}
    +div.framenoframe li {
    +    margin: 0 3px 0 3px;
    +}
    +div.overview li {
    +    margin:3px 3px 0 3px;
    +    padding: 4px;
    +}
    +li.selected {
    +    background-color:#888;
    +    color: #fff;
    +    font-weight: bold;
    +}
    +
    +table.summary {
    +    margin-bottom: 20px;
    +}
    +table.summary td, table.summary th {
    +    font-weight: bold;
    +    text-align: left;
    +    padding: 3px;
    +}
    +table.summary th {
    +    background-color:#036;
    +    color: #fff;
    +}
    +table.summary td {
    +    background-color:#eee;
    +    border: 1px solid black;
    +}
    +
    +em {
    +    color: #A00;
    +}
    +em.comment {
    +    color: #390;
    +}
    +.string {
    +    color: #009;
    +}
    +
    +#overview {
    +    padding:2px;
    +}
    +
    +hr {
    +    height: 1px;
    +    color: #000;
    +}
    +
    +/* JXR style sheet */
    +.jxr_comment
    +{
    +    color: #390;
    +}
    +
    +.jxr_javadoccomment
    +{
    +    color: #A00;
    +}
    +
    +.jxr_string
    +{
    +    color: #009;
    +}
    +
    +.jxr_keyword
    +{
    +    color: #000;
    +}
    diff --git a/xref/allclasses-frame.html b/xref/allclasses-frame.html
    new file mode 100644
    index 0000000..b6d1436
    --- /dev/null
    +++ b/xref/allclasses-frame.html
    @@ -0,0 +1,110 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>All Classes</title>
    +		<link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
    +    </head>
    +    <body>
    +
    +		<h3>All Classes</h3>
    +
    +		<ul>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypes.html" target="classFrame">AbstractTypes</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AnnotatedConstruct.html" target="classFrame">AnnotatedConstruct</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html" target="classFrame">AnnotatedConstructImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ArrayTypeImpl.html" target="classFrame">ArrayTypeImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/DeclaredTypeImpl.html" target="classFrame">DeclaredTypeImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypes.html" target="classFrame">DeclaredTypeSubtypeVisitor</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ElementImpl.html" target="classFrame">ElementImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypes.html" target="classFrame">ErasureVisitor</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html" target="classFrame">ExtendedTypeKindVisitor7</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ImmutableList.html" target="classFrame">ImmutableList</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/IntersectionType.html" target="classFrame">IntersectionType</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/IntersectionTypeImpl.html" target="classFrame">IntersectionTypeImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/MirrorContext.html" target="classFrame">MirrorContext</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/NameImpl.html" target="classFrame">NameImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/NoTypeImpl.html" target="classFrame">NoTypeImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/NonNullByDefault.html" target="classFrame">NonNullByDefault</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/NullTypeImpl.html" target="classFrame">NullTypeImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html" target="classFrame">PrimitiveTypeImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionElement.html" target="classFrame">ReflectionElement</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionParameterizable.html" target="classFrame">ReflectionParameterizable</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionTypeMirror.html" target="classFrame">ReflectionTypeMirror</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/ReflectionTypes.html" target="classFrame">ReflectionTypes</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypes.html" target="classFrame">SubstitutionVisitor</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypes.html" target="classFrame">Substitutions</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypes.html" target="classFrame">SubtypeVisitor</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypes.html" target="classFrame">ToStringVisitor</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/AbstractTypes.html" target="classFrame">TypeDeclarationVertexState</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/TypeElementImpl.html" target="classFrame">TypeElementImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/TypeParameterElementImpl.html" target="classFrame">TypeParameterElementImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/TypeVariableImpl.html" target="classFrame">TypeVariableImpl</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/WildcardTypeImpl.html" target="classFrame">WildcardTypeImpl</a>
    +			</li>
    +			      </ul>
    +
    +    </body>
    +  </html>
    diff --git a/xref/index.html b/xref/index.html
    new file mode 100644
    index 0000000..9cb7429
    --- /dev/null
    +++ b/xref/index.html
    @@ -0,0 +1,25 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
    +<html xml:lang="en" lang="en">
    +<!-- this is a JXR report set -->
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference</title>
    +	</head>
    +    <frameset cols="20%,80%">
    +		<frameset rows="30%,70%">
    +			<frame src="overview-frame.html" name="packageListFrame" />
    +			<frame src="allclasses-frame.html" name="packageFrame" />
    +		</frameset>
    +		<frame src="overview-summary.html" name="classFrame" />
    +        <noframes>
    +            <body>
    +                <h1>Frame Alert</h1>
    +                <p>
    +                    You don't have frames. Go <a href="overview-summary.html">here</a>
    +                </p>
    +            </body>
    +        </noframes>
    +    </frameset>
    +</html>
    +
    diff --git a/xref/net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html b/xref/net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html
    new file mode 100644
    index 0000000..cf1dd44
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html
    @@ -0,0 +1,43 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>AnnotatedConstructImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> net.florianschoppmann.java.type.AnnotatedConstruct;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.AnnotationMirror;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> java.lang.annotation.Annotation;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> <a href="../../../../net/florianschoppmann/java/type/AnnotatedConstruct.html">AnnotatedConstruct</a> {
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      <strong class="jxr_keyword">static</strong> UnsupportedOperationException unsupportedException() {
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> UnsupportedOperationException(String.format(
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>              <span class="jxr_string">"Annotations not currently supported by %s."</span>, ReflectionTypes.<strong class="jxr_keyword">class</strong>
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>          ));
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      }
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>      @Override
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> List&lt;? <strong class="jxr_keyword">extends</strong> AnnotationMirror&gt; getAnnotationMirrors() {
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>          <strong class="jxr_keyword">throw</strong> unsupportedException();
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>      }
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>      @Override
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> &lt;A <strong class="jxr_keyword">extends</strong> Annotation&gt; A getAnnotation(Class&lt;A&gt; annotationType) {
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>          <strong class="jxr_keyword">throw</strong> unsupportedException();
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>      }
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>      @Override
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> &lt;A <strong class="jxr_keyword">extends</strong> Annotation&gt; A[] getAnnotationsByType(Class&lt;A&gt; annotationType) {
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>          <strong class="jxr_keyword">throw</strong> unsupportedException();
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>      }
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/ArrayTypeImpl.html b/xref/net/florianschoppmann/java/reflect/ArrayTypeImpl.html
    new file mode 100644
    index 0000000..a975568
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/ArrayTypeImpl.html
    @@ -0,0 +1,68 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>ArrayTypeImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/ArrayTypeImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.ArrayType;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVisitor;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/ArrayTypeImpl.html">ArrayTypeImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> ReflectionTypeMirror, ArrayType {
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> componentType;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>      <a href="../../../../net/florianschoppmann/java/reflect/ArrayTypeImpl.html">ArrayTypeImpl</a>(<a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> componentType) {
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>          Objects.requireNonNull(componentType);
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>          <strong class="jxr_keyword">this</strong>.componentType = componentType;
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>      }
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>      @Override
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(@Nullable Object otherObject) {
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == otherObject) {
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (otherObject == <strong class="jxr_keyword">null</strong> || getClass() != otherObject.getClass()) {
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>              <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>          }
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>          <strong class="jxr_keyword">return</strong> componentType.equals(((ArrayTypeImpl) otherObject).componentType);
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>      }
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>      @Override
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>          <em class="jxr_comment">// Do not return just componentType.hashCode() because both this instance and componentType are of type</em>
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>          <em class="jxr_comment">// ReflectionTypeMirror.</em>
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>          <strong class="jxr_keyword">return</strong> Objects.hash(getClass(), componentType.hashCode());
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      }
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      @Override
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      <strong class="jxr_keyword">public</strong> String toString() {
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>          <strong class="jxr_keyword">return</strong> ReflectionTypes.getInstance().toString(<strong class="jxr_keyword">this</strong>);
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      }
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      @Override
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>          <strong class="jxr_keyword">return</strong> visitor.visitArray(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      }
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      @Override
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> getComponentType() {
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>          <strong class="jxr_keyword">return</strong> componentType;
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      }
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      @Override
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <strong class="jxr_keyword">public</strong> TypeKind getKind() {
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>          <strong class="jxr_keyword">return</strong> TypeKind.ARRAY;
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      }
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/DeclaredTypeImpl.html b/xref/net/florianschoppmann/java/reflect/DeclaredTypeImpl.html
    new file mode 100644
    index 0000000..d5514bc
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/DeclaredTypeImpl.html
    @@ -0,0 +1,87 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>DeclaredTypeImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.DeclaredType;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVisitor;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> ReflectionTypeMirror, DeclaredType {
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> enclosingType;
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a> typeElement;
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ImmutableList&lt;? <strong class="jxr_keyword">extends</strong> ReflectionTypeMirror&gt; typeArguments;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>      <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a>(<a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> enclosingType, <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a> typeElement,
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>              List&lt;? <strong class="jxr_keyword">extends</strong> ReflectionTypeMirror&gt; typeArguments) {
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>          Objects.requireNonNull(enclosingType);
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>          Objects.requireNonNull(typeElement);
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>          Objects.requireNonNull(typeArguments);
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>          <strong class="jxr_keyword">this</strong>.enclosingType = enclosingType;
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>          <strong class="jxr_keyword">this</strong>.typeElement = typeElement;
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>          <strong class="jxr_keyword">this</strong>.typeArguments = ImmutableList.copyOf(typeArguments);
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>      }
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>      @Override
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(@Nullable Object otherObject) {
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == otherObject) {
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (otherObject == <strong class="jxr_keyword">null</strong> || getClass() != otherObject.getClass()) {
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>              <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>          }
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>          <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a> other = (DeclaredTypeImpl) otherObject;
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>          <strong class="jxr_keyword">return</strong> enclosingType.equals(other.enclosingType)
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>              &amp;&amp; typeElement.equals(other.typeElement)
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>              &amp;&amp; typeArguments.equals(other.typeArguments);
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      }
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      @Override
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>          <strong class="jxr_keyword">return</strong> Objects.hash(enclosingType, typeElement, typeArguments);
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      }
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      @Override
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <strong class="jxr_keyword">public</strong> String toString() {
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>          <strong class="jxr_keyword">return</strong> ReflectionTypes.getInstance().toString(<strong class="jxr_keyword">this</strong>);
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      }
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      @Override
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          <strong class="jxr_keyword">return</strong> visitor.visitDeclared(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      }
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      @Override
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a> asElement() {
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          <strong class="jxr_keyword">return</strong> typeElement;
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      }
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      @Override
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> getEnclosingType() {
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          <strong class="jxr_keyword">return</strong> enclosingType;
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      }
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      @Override
    +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      <strong class="jxr_keyword">public</strong> List&lt;? <strong class="jxr_keyword">extends</strong> ReflectionTypeMirror&gt; getTypeArguments() {
    +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          <strong class="jxr_keyword">return</strong> typeArguments;
    +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      }
    +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  
    +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      @Override
    +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      <strong class="jxr_keyword">public</strong> TypeKind getKind() {
    +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          <strong class="jxr_keyword">return</strong> TypeKind.DECLARED;
    +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      }
    +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/ElementImpl.html b/xref/net/florianschoppmann/java/reflect/ElementImpl.html
    new file mode 100644
    index 0000000..12da227
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/ElementImpl.html
    @@ -0,0 +1,47 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>ElementImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/ElementImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.Modifier;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> java.util.Set;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/ElementImpl.html">ElementImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionElement.html">ReflectionElement</a> {
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>       <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> finished = false;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>       @Override
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> Set&lt;Modifier&gt; getModifiers() {
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>          <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnsupportedOperationException(String.format(
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>              <span class="jxr_string">"Modifiers not currently supported by %s."</span>, ReflectionTypes.<strong class="jxr_keyword">class</strong>
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>          ));
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      }
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>      <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> requireFinished() {
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>          <strong class="jxr_keyword">if</strong> (!finished) {
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalStateException(String.format(<span class="jxr_string">"Instance of %s used before it was ready."</span>, getClass()));
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>          }
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>      }
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>      <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">void</strong> finishDerivedFromElement(<a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a> mirrorContext);
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>      <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> finish(<a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a> mirrorContext) {
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>          <strong class="jxr_keyword">if</strong> (finished) {
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalStateException(String.format(
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>                  <span class="jxr_string">"Attempt to finish instance of %s more than once."</span>, getClass()
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>              ));
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>          }
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>          finished = <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>          finishDerivedFromElement(mirrorContext);
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>      }
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/ImmutableList.html b/xref/net/florianschoppmann/java/reflect/ImmutableList.html
    new file mode 100644
    index 0000000..36bf5d1
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/ImmutableList.html
    @@ -0,0 +1,53 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>ImmutableList xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/ImmutableList.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> java.util.AbstractList;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> ImmutableList&lt;E&gt; <strong class="jxr_keyword">extends</strong> AbstractList&lt;E&gt; {
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>       <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> ImmutableList&lt;?&gt; EMPTY_LIST = <strong class="jxr_keyword">new</strong> ImmutableList&lt;&gt;(<strong class="jxr_keyword">new</strong> Object[0]);
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Object[] array;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>      <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/reflect/ImmutableList.html">ImmutableList</a>(Object[] array) {
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>          <strong class="jxr_keyword">this</strong>.array = array;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      }
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>      <strong class="jxr_keyword">static</strong> &lt;E&gt; ImmutableList&lt;E&gt; copyOf(List&lt;E&gt; original) {
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>          <strong class="jxr_keyword">if</strong> (original instanceof ImmutableList&lt;?&gt;) {
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>              <strong class="jxr_keyword">return</strong> (ImmutableList&lt;E&gt;) original;
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>          } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> ImmutableList&lt;&gt;(original.toArray(<strong class="jxr_keyword">new</strong> Object[original.size()]));
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>          }
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>      }
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>      @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>      <strong class="jxr_keyword">static</strong> &lt;E&gt; ImmutableList&lt;E&gt; emptyList() {
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>          <strong class="jxr_keyword">return</strong> (ImmutableList&lt;E&gt;) EMPTY_LIST;
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>      }
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>      @Override
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>      @Nullable
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>      <strong class="jxr_keyword">public</strong> E get(<strong class="jxr_keyword">int</strong> index) {
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>          <strong class="jxr_keyword">return</strong> (E) array[index];
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      }
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      @Override
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> size() {
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>          <strong class="jxr_keyword">return</strong> array.length;
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      }
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/IntersectionTypeImpl.html b/xref/net/florianschoppmann/java/reflect/IntersectionTypeImpl.html
    new file mode 100644
    index 0000000..206a43f
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/IntersectionTypeImpl.html
    @@ -0,0 +1,76 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>IntersectionTypeImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/IntersectionTypeImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> net.florianschoppmann.java.type.IntersectionType;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeMirror;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVisitor;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/IntersectionTypeImpl.html">IntersectionTypeImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> IntersectionType, <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> {
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ImmutableList&lt;ReflectionTypeMirror&gt; bounds;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>      <a href="../../../../net/florianschoppmann/java/reflect/IntersectionTypeImpl.html">IntersectionTypeImpl</a>(List&lt;ReflectionTypeMirror&gt; bounds) {
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>          Objects.requireNonNull(bounds);
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>          <strong class="jxr_keyword">this</strong>.bounds = ImmutableList.copyOf(bounds);
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>      }
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>      @Override
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(@Nullable Object otherObject) {
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == otherObject) {
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (otherObject == <strong class="jxr_keyword">null</strong> || getClass() != otherObject.getClass()) {
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>              <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>          }
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>          <strong class="jxr_keyword">return</strong> bounds.equals(((IntersectionTypeImpl) otherObject).bounds);
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>      }
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>      @Override
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>          <em class="jxr_comment">// Do not return just bounds.hashCode() because both this instance and componentType are of type</em>
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>          <em class="jxr_comment">// ReflectionTypeMirror.</em>
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>          <strong class="jxr_keyword">return</strong> Objects.hash(getClass(), bounds.hashCode());
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      }
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      @Override
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <strong class="jxr_keyword">public</strong> String toString() {
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>          <strong class="jxr_keyword">return</strong> ReflectionTypes.getInstance().toString(<strong class="jxr_keyword">this</strong>);
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      }
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      @Override
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>          <strong class="jxr_keyword">return</strong> visitor.visitUnknown(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      }
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      @Override
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <strong class="jxr_keyword">public</strong> List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; getBounds() {
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>          <strong class="jxr_keyword">return</strong> bounds;
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      }
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      @Override
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <strong class="jxr_keyword">public</strong> TypeKind getKind() {
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>          <strong class="jxr_keyword">return</strong> TypeKind.OTHER;
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      }
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      @Override
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isIntersectionType() {
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      }
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/MirrorContext.html b/xref/net/florianschoppmann/java/reflect/MirrorContext.html
    new file mode 100644
    index 0000000..c4428b8
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/MirrorContext.html
    @@ -0,0 +1,78 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>MirrorContext xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/MirrorContext.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> java.lang.reflect.Type;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> java.util.ArrayList;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> java.util.Map;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a> {
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypes.html">ReflectionTypes</a> reflectionTypes;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; typeDeclarations;
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; newTypeDeclarations;
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      <a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a>(<a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypes.html">ReflectionTypes</a> reflectionTypes, Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; typeDeclarations,
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>              Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; newTypeDeclarations) {
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>          <strong class="jxr_keyword">this</strong>.reflectionTypes = reflectionTypes;
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>          <strong class="jxr_keyword">this</strong>.typeDeclarations = typeDeclarations;
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>          <strong class="jxr_keyword">this</strong>.newTypeDeclarations = newTypeDeclarations;
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>      }
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>      ImmutableList&lt;ReflectionTypeMirror&gt; mirror(Type[] types) {
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>          List&lt;ReflectionTypeMirror&gt; typeMirrors = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>          <strong class="jxr_keyword">for</strong> (Type type: types) {
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>              typeMirrors.add(reflectionTypes.mirrorInternal(type, <strong class="jxr_keyword">this</strong>));
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>          }
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>          <strong class="jxr_keyword">return</strong> ImmutableList.copyOf(typeMirrors);
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>      }
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment">     * Returns a type mirror for the given {@link Type} object.</em>
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;This method creates a type mirror within this mirror context. This is similar, but different, to</em>
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">     * {@link ReflectionTypes#typeMirror(Type)}, which starts a &lt;em&gt;new&lt;/em&gt; mirror context.</em>
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     * @param type type as represented by Java Reflection API</em>
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment">     * @return type mirror for the given reflection type</em>
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> mirror(Type type) {
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>          <strong class="jxr_keyword">return</strong> reflectionTypes.mirrorInternal(type, <strong class="jxr_keyword">this</strong>);
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      }
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     * Returns a type element for the given {@link Class} object.</em>
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;This methods provides a type element that has been created within this mirror context. Within a mirror</em>
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * context, type elements are always reused. This method is similar, but different, to</em>
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     * {@link ReflectionTypes#typeElement(Class)}, which starts a &lt;em&gt;new&lt;/em&gt; mirror context.</em>
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     * @param clazz class object</em>
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     * @return type element for the given class</em>
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a> typeDeclaration(Class&lt;?&gt; clazz) {
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>          @Nullable <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a> typeDeclaration = typeDeclarations.get(clazz);
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>          <strong class="jxr_keyword">if</strong> (typeDeclaration != <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>              <strong class="jxr_keyword">return</strong> typeDeclaration;
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>          }
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          @Nullable <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a> newTypeDeclaration = newTypeDeclarations.get(clazz);
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          <strong class="jxr_keyword">if</strong> (newTypeDeclaration == <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>              newTypeDeclaration = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a>(clazz);
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>              newTypeDeclarations.put(clazz, newTypeDeclaration);
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          }
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          <strong class="jxr_keyword">return</strong> newTypeDeclaration;
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      }
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/NameImpl.html b/xref/net/florianschoppmann/java/reflect/NameImpl.html
    new file mode 100644
    index 0000000..c955148
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/NameImpl.html
    @@ -0,0 +1,67 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>NameImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/NameImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.Name;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/NameImpl.html">NameImpl</a> <strong class="jxr_keyword">implements</strong> Name {
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>       <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String name;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      <a href="../../../../net/florianschoppmann/java/reflect/NameImpl.html">NameImpl</a>(String name) {
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>          <strong class="jxr_keyword">this</strong>.name = Objects.requireNonNull(name);
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>      }
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      @Override
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(@Nullable Object otherObject) {
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == otherObject) {
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (otherObject == <strong class="jxr_keyword">null</strong> || getClass() != otherObject.getClass()) {
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>              <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>          }
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>          <strong class="jxr_keyword">return</strong> name.equals(((NameImpl) otherObject).name);
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>      }
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>      @Override
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>          <strong class="jxr_keyword">return</strong> name.hashCode();
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>      }
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>      @Override
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> contentEquals(CharSequence charSequence) {
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>          <strong class="jxr_keyword">return</strong> name.contentEquals(charSequence);
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>      }
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      @Override
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> length() {
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>          <strong class="jxr_keyword">return</strong> name.length();
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      }
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      @Override
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">char</strong> charAt(<strong class="jxr_keyword">int</strong> index) {
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>          <strong class="jxr_keyword">return</strong> name.charAt(index);
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      }
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      @Override
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <strong class="jxr_keyword">public</strong> CharSequence subSequence(<strong class="jxr_keyword">int</strong> start, <strong class="jxr_keyword">int</strong> end) {
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>          <strong class="jxr_keyword">return</strong> name.subSequence(start, end);
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      }
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      @Override
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">public</strong> String toString() {
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          <strong class="jxr_keyword">return</strong> name;
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      }
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/NoTypeImpl.html b/xref/net/florianschoppmann/java/reflect/NoTypeImpl.html
    new file mode 100644
    index 0000000..a808c2b
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/NoTypeImpl.html
    @@ -0,0 +1,45 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>NoTypeImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/NoTypeImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.NoType;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVisitor;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/NoTypeImpl.html">NoTypeImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> ReflectionTypeMirror, NoType {
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>       <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/NoTypeImpl.html">NoTypeImpl</a> VOID = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/NoTypeImpl.html">NoTypeImpl</a>(TypeKind.VOID);
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/NoTypeImpl.html">NoTypeImpl</a> NONE = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/NoTypeImpl.html">NoTypeImpl</a>(TypeKind.NONE);
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> TypeKind typeKind;
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      <a href="../../../../net/florianschoppmann/java/reflect/NoTypeImpl.html">NoTypeImpl</a>(TypeKind typeKind) {
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>          <strong class="jxr_keyword">this</strong>.typeKind = typeKind;
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>      }
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>      @Override
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>      <strong class="jxr_keyword">public</strong> String toString() {
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>          <strong class="jxr_keyword">return</strong> ReflectionTypes.getInstance().toString(<strong class="jxr_keyword">this</strong>);
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>      }
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>      @Override
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>      <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>          <strong class="jxr_keyword">return</strong> visitor.visitNoType(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>      }
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>      @Override
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>      <strong class="jxr_keyword">public</strong> TypeKind getKind() {
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>          <strong class="jxr_keyword">return</strong> typeKind;
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      }
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/NullTypeImpl.html b/xref/net/florianschoppmann/java/reflect/NullTypeImpl.html
    new file mode 100644
    index 0000000..ad371c9
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/NullTypeImpl.html
    @@ -0,0 +1,38 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>NullTypeImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/NullTypeImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.NullType;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVisitor;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/NullTypeImpl.html">NullTypeImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> ReflectionTypeMirror, NullType {
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>       <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/NullTypeImpl.html">NullTypeImpl</a> INSTANCE = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/NullTypeImpl.html">NullTypeImpl</a>();
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>      @Override
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>      <strong class="jxr_keyword">public</strong> String toString() {
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>          <strong class="jxr_keyword">return</strong> ReflectionTypes.getInstance().toString(<strong class="jxr_keyword">this</strong>);
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      }
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>      @Override
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>      <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>          <strong class="jxr_keyword">return</strong> visitor.visitNull(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>      }
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>      @Override
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>      <strong class="jxr_keyword">public</strong> TypeKind getKind() {
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>          <strong class="jxr_keyword">return</strong> TypeKind.NULL;
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>      }
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html b/xref/net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html
    new file mode 100644
    index 0000000..3dc5380
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html
    @@ -0,0 +1,51 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>PrimitiveTypeImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.PrimitiveType;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVisitor;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> ReflectionTypeMirror, PrimitiveType {
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>       <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a> DOUBLE = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a>(TypeKind.DOUBLE);
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a> FLOAT = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a>(TypeKind.FLOAT);
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>      <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a> LONG = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a>(TypeKind.LONG);
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>      <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a> INT = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a>(TypeKind.INT);
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>      <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a> SHORT = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a>(TypeKind.SHORT);
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a> BYTE = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a>(TypeKind.BYTE);
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>      <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a> CHAR = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a>(TypeKind.CHAR);
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>      <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a> BOOLEAN = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a>(TypeKind.BOOLEAN);
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> TypeKind typeKind;
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>      <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a>(TypeKind typeKind) {
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>          <strong class="jxr_keyword">this</strong>.typeKind = typeKind;
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>      }
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>      @Override
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>      <strong class="jxr_keyword">public</strong> String toString() {
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>          <strong class="jxr_keyword">return</strong> ReflectionTypes.getInstance().toString(<strong class="jxr_keyword">this</strong>);
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>      }
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>      @Override
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>      <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>          <strong class="jxr_keyword">return</strong> visitor.visitPrimitive(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>      }
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      @Override
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      <strong class="jxr_keyword">public</strong> TypeKind getKind() {
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>          <strong class="jxr_keyword">return</strong> typeKind;
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      }
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/ReflectionElement.html b/xref/net/florianschoppmann/java/reflect/ReflectionElement.html
    new file mode 100644
    index 0000000..3b3ab45
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/ReflectionElement.html
    @@ -0,0 +1,32 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>ReflectionElement xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/ReflectionElement.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> net.florianschoppmann.java.type.AnnotatedConstruct;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.Element;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionElement.html">ReflectionElement</a> <strong class="jxr_keyword">extends</strong> Element, <a href="../../../../net/florianschoppmann/java/type/AnnotatedConstruct.html">AnnotatedConstruct</a> {
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      @Override
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>      <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> asType();
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>      @Override
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      @Nullable
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>      <a href="../../../../net/florianschoppmann/java/reflect/ReflectionElement.html">ReflectionElement</a> getEnclosingElement();
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>      @Override
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>      List&lt;? <strong class="jxr_keyword">extends</strong> ReflectionElement&gt; getEnclosedElements();
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/ReflectionParameterizable.html b/xref/net/florianschoppmann/java/reflect/ReflectionParameterizable.html
    new file mode 100644
    index 0000000..05e38cd
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/ReflectionParameterizable.html
    @@ -0,0 +1,22 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>ReflectionParameterizable xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/ReflectionParameterizable.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.Parameterizable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionParameterizable.html">ReflectionParameterizable</a> <strong class="jxr_keyword">extends</strong> Parameterizable, <a href="../../../../net/florianschoppmann/java/reflect/ReflectionElement.html">ReflectionElement</a> {
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>       @Override
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>       List&lt;TypeParameterElementImpl&gt; getTypeParameters();
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/ReflectionTypeMirror.html b/xref/net/florianschoppmann/java/reflect/ReflectionTypeMirror.html
    new file mode 100644
    index 0000000..e3dd9aa
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/ReflectionTypeMirror.html
    @@ -0,0 +1,25 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>ReflectionTypeMirror xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> net.florianschoppmann.java.type.AnnotatedConstruct;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeMirror;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_javadoccomment"> * Common super-interface of all {@link TypeMirror} implementations in this package.</em>
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;This is an interface, and not an abstract class, because some implementations are enums and not classes.</em>
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> <strong class="jxr_keyword">extends</strong> TypeMirror, <a href="../../../../net/florianschoppmann/java/type/AnnotatedConstruct.html">AnnotatedConstruct</a> { }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/ReflectionTypes.html b/xref/net/florianschoppmann/java/reflect/ReflectionTypes.html
    new file mode 100644
    index 0000000..375ce2f
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/ReflectionTypes.html
    @@ -0,0 +1,483 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>ReflectionTypes xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/ReflectionTypes.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> net.florianschoppmann.java.type.AbstractTypes;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> net.florianschoppmann.java.type.IntersectionType;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.Element;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.Name;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.TypeElement;
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.element.TypeParameterElement;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.ArrayType;
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.DeclaredType;
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.ExecutableType;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.NoType;
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.NullType;
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.PrimitiveType;
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeMirror;
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.GenericArrayType;
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.GenericDeclaration;
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.ParameterizedType;
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.Type;
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.TypeVariable;
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.WildcardType;
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> java.util.Arrays;
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> java.util.Collections;
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.util.LinkedHashMap;
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> * Implementation of {@link javax.lang.model.util.Types} backed by the Java Reflection API.</em>
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;All {@link Element} and {@link TypeMirror} objects returned by this class are immutable and therefore thread-safe.</em>
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> * Likewise, only a stateless (and thus thread-safe) singleton instance of this class is available via</em>
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment"> * {@link #getInstance()}.</em>
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;Currently unsupported are (resulting in an {@link UnsupportedOperationException}):</em>
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment"> * &lt;ul&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment"> *     Type parameters in method declarations. See {@link #typeMirror(Type)} for details.</em>
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment"> * &lt;/li&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment"> *     {@link #directSupertypes(TypeMirror)}</em>
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment"> * &lt;/li&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment"> *     {@link #asMemberOf(DeclaredType, Element)}</em>
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment"> * &lt;/li&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment"> *     {@link #isAssignable(TypeMirror, TypeMirror)}</em>
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment"> * &lt;/li&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment"> *     {@link #isSubsignature(ExecutableType, ExecutableType)}</em>
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment"> * &lt;/li&gt;&lt;/ul&gt;</em>
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypes.html">ReflectionTypes</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">AbstractTypes</a> {
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypes.html">ReflectionTypes</a> INSTANCE = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypes.html">ReflectionTypes</a>();
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ImmutableList&lt;PrimitiveTypeImpl&gt; primitiveTypes;
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ImmutableList&lt;TypeElementImpl&gt; boxedTypeDeclarations;
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      {
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          List&lt;PrimitiveTypeImpl&gt; newTypes = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(TypeKind.values().length);
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          List&lt;TypeElementImpl&gt; newDeclarations = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(TypeKind.values().length);
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          newTypes.addAll(Collections.&lt;PrimitiveTypeImpl&gt;nCopies(TypeKind.values().length, <strong class="jxr_keyword">null</strong>));
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          newDeclarations.addAll(Collections.&lt;TypeElementImpl&gt;nCopies(TypeKind.values().length, <strong class="jxr_keyword">null</strong>));
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>          addPrimitive(newTypes, newDeclarations, TypeKind.DOUBLE, PrimitiveTypeImpl.DOUBLE, Double.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          addPrimitive(newTypes, newDeclarations, TypeKind.FLOAT, PrimitiveTypeImpl.FLOAT, Float.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          addPrimitive(newTypes, newDeclarations, TypeKind.LONG, PrimitiveTypeImpl.LONG, Long.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          addPrimitive(newTypes, newDeclarations, TypeKind.INT, PrimitiveTypeImpl.INT, Integer.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          addPrimitive(newTypes, newDeclarations, TypeKind.SHORT, PrimitiveTypeImpl.SHORT, Short.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          addPrimitive(newTypes, newDeclarations, TypeKind.BYTE, PrimitiveTypeImpl.BYTE, Byte.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          addPrimitive(newTypes, newDeclarations, TypeKind.CHAR, PrimitiveTypeImpl.CHAR, Character.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          addPrimitive(newTypes, newDeclarations, TypeKind.BOOLEAN, PrimitiveTypeImpl.BOOLEAN, Boolean.<strong class="jxr_keyword">class</strong>);
    +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  
    +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          primitiveTypes = ImmutableList.copyOf(newTypes);
    +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          boxedTypeDeclarations = ImmutableList.copyOf(newDeclarations);
    +<a class="jxr_linenumber" name="L76" href="#L76">76</a>      }
    +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  
    +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypes.html">ReflectionTypes</a>() { }
    +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  
    +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  <em class="jxr_javadoccomment">     * Returns the singleton instance of this class.</em>
    +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;Since this class does not contain any state, and since it is immutable, the returned instance is thread-safe.</em>
    +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     * @return the singleton instance of this class</em>
    +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypes.html">ReflectionTypes</a> getInstance() {
    +<a class="jxr_linenumber" name="L88" href="#L88">88</a>          <strong class="jxr_keyword">return</strong> INSTANCE;
    +<a class="jxr_linenumber" name="L89" href="#L89">89</a>      }
    +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  
    +<a class="jxr_linenumber" name="L91" href="#L91">91</a>      @Override
    +<a class="jxr_linenumber" name="L92" href="#L92">92</a>      <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> requireValidElement(Element element) {
    +<a class="jxr_linenumber" name="L93" href="#L93">93</a>          Objects.requireNonNull(element);
    +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          <strong class="jxr_keyword">if</strong> (!(element instanceof ReflectionElement)) {
    +<a class="jxr_linenumber" name="L95" href="#L95">95</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(String.format(
    +<a class="jxr_linenumber" name="L96" href="#L96">96</a>                  <span class="jxr_string">"Expected %s instance that was created by %s, but got instance of %s."</span>,
    +<a class="jxr_linenumber" name="L97" href="#L97">97</a>                  Element.<strong class="jxr_keyword">class</strong>.getSimpleName(), ReflectionTypes.<strong class="jxr_keyword">class</strong>, element.getClass()
    +<a class="jxr_linenumber" name="L98" href="#L98">98</a>              ));
    +<a class="jxr_linenumber" name="L99" href="#L99">99</a>          }
    +<a class="jxr_linenumber" name="L100" href="#L100">100</a>     }
    +<a class="jxr_linenumber" name="L101" href="#L101">101</a> 
    +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     @Override
    +<a class="jxr_linenumber" name="L103" href="#L103">103</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> requireValidType(@Nullable TypeMirror type) {
    +<a class="jxr_linenumber" name="L104" href="#L104">104</a>         <strong class="jxr_keyword">if</strong> (!(type instanceof ReflectionTypeMirror) &amp;&amp; type != <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L105" href="#L105">105</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(String.format(
    +<a class="jxr_linenumber" name="L106" href="#L106">106</a>                 <span class="jxr_string">"Expected %s instance that was created by %s, but got instance of %s."</span>,
    +<a class="jxr_linenumber" name="L107" href="#L107">107</a>                 TypeMirror.<strong class="jxr_keyword">class</strong>.getSimpleName(), ReflectionTypes.<strong class="jxr_keyword">class</strong>, type.getClass()
    +<a class="jxr_linenumber" name="L108" href="#L108">108</a>             ));
    +<a class="jxr_linenumber" name="L109" href="#L109">109</a>         }
    +<a class="jxr_linenumber" name="L110" href="#L110">110</a>     }
    +<a class="jxr_linenumber" name="L111" href="#L111">111</a> 
    +<a class="jxr_linenumber" name="L112" href="#L112">112</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> addPrimitive(List&lt;PrimitiveTypeImpl&gt; newPrimitiveTypes, List&lt;TypeElementImpl&gt; newBoxedTypeDeclarations,
    +<a class="jxr_linenumber" name="L113" href="#L113">113</a>             TypeKind kind, <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a> primitiveType, Class&lt;?&gt; clazz) {
    +<a class="jxr_linenumber" name="L114" href="#L114">114</a>         newPrimitiveTypes.set(kind.ordinal(), primitiveType);
    +<a class="jxr_linenumber" name="L115" href="#L115">115</a>         newBoxedTypeDeclarations.set(kind.ordinal(), ((DeclaredTypeImpl) typeMirror(clazz)).asElement());
    +<a class="jxr_linenumber" name="L116" href="#L116">116</a>     }
    +<a class="jxr_linenumber" name="L117" href="#L117">117</a> 
    +<a class="jxr_linenumber" name="L118" href="#L118">118</a>     @Override
    +<a class="jxr_linenumber" name="L119" href="#L119">119</a>     <strong class="jxr_keyword">public</strong> TypeElement boxedClass(PrimitiveType primitiveType) {
    +<a class="jxr_linenumber" name="L120" href="#L120">120</a>         requireValidType(Objects.requireNonNull(primitiveType));
    +<a class="jxr_linenumber" name="L121" href="#L121">121</a>         @Nullable <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a> typeElement = boxedTypeDeclarations.get(primitiveType.getKind().ordinal());
    +<a class="jxr_linenumber" name="L122" href="#L122">122</a>         assert typeElement != <strong class="jxr_keyword">null</strong> : <span class="jxr_string">"Array with boxed type declarations incorrectly initialized."</span>;
    +<a class="jxr_linenumber" name="L123" href="#L123">123</a>         <strong class="jxr_keyword">return</strong> typeElement;
    +<a class="jxr_linenumber" name="L124" href="#L124">124</a>     }
    +<a class="jxr_linenumber" name="L125" href="#L125">125</a> 
    +<a class="jxr_linenumber" name="L126" href="#L126">126</a>     @Override
    +<a class="jxr_linenumber" name="L127" href="#L127">127</a>     <strong class="jxr_keyword">public</strong> PrimitiveType unboxedType(TypeMirror type) {
    +<a class="jxr_linenumber" name="L128" href="#L128">128</a>         requireValidType(Objects.requireNonNull(type));
    +<a class="jxr_linenumber" name="L129" href="#L129">129</a> 
    +<a class="jxr_linenumber" name="L130" href="#L130">130</a>         <strong class="jxr_keyword">if</strong> (type.getKind() != TypeKind.DECLARED) {
    +<a class="jxr_linenumber" name="L131" href="#L131">131</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(String.format(
    +<a class="jxr_linenumber" name="L132" href="#L132">132</a>                 <span class="jxr_string">"Expected type mirror of kind %s, but got %s."</span>, TypeKind.DECLARED, type
    +<a class="jxr_linenumber" name="L133" href="#L133">133</a>             ));
    +<a class="jxr_linenumber" name="L134" href="#L134">134</a>         }
    +<a class="jxr_linenumber" name="L135" href="#L135">135</a> 
    +<a class="jxr_linenumber" name="L136" href="#L136">136</a>         Name name = ((DeclaredTypeImpl) type).asElement().getQualifiedName();
    +<a class="jxr_linenumber" name="L137" href="#L137">137</a>         <strong class="jxr_keyword">if</strong> (name.contentEquals(Double.<strong class="jxr_keyword">class</strong>.getName())) {
    +<a class="jxr_linenumber" name="L138" href="#L138">138</a>             <strong class="jxr_keyword">return</strong> PrimitiveTypeImpl.DOUBLE;
    +<a class="jxr_linenumber" name="L139" href="#L139">139</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (name.contentEquals(Float.<strong class="jxr_keyword">class</strong>.getName())) {
    +<a class="jxr_linenumber" name="L140" href="#L140">140</a>             <strong class="jxr_keyword">return</strong> PrimitiveTypeImpl.FLOAT;
    +<a class="jxr_linenumber" name="L141" href="#L141">141</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (name.contentEquals(Long.<strong class="jxr_keyword">class</strong>.getName())) {
    +<a class="jxr_linenumber" name="L142" href="#L142">142</a>             <strong class="jxr_keyword">return</strong> PrimitiveTypeImpl.LONG;
    +<a class="jxr_linenumber" name="L143" href="#L143">143</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (name.contentEquals(Integer.<strong class="jxr_keyword">class</strong>.getName())) {
    +<a class="jxr_linenumber" name="L144" href="#L144">144</a>             <strong class="jxr_keyword">return</strong> PrimitiveTypeImpl.INT;
    +<a class="jxr_linenumber" name="L145" href="#L145">145</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (name.contentEquals(Short.<strong class="jxr_keyword">class</strong>.getName())) {
    +<a class="jxr_linenumber" name="L146" href="#L146">146</a>             <strong class="jxr_keyword">return</strong> PrimitiveTypeImpl.SHORT;
    +<a class="jxr_linenumber" name="L147" href="#L147">147</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (name.contentEquals(Byte.<strong class="jxr_keyword">class</strong>.getName())) {
    +<a class="jxr_linenumber" name="L148" href="#L148">148</a>             <strong class="jxr_keyword">return</strong> PrimitiveTypeImpl.BYTE;
    +<a class="jxr_linenumber" name="L149" href="#L149">149</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (name.contentEquals(Character.<strong class="jxr_keyword">class</strong>.getName())) {
    +<a class="jxr_linenumber" name="L150" href="#L150">150</a>             <strong class="jxr_keyword">return</strong> PrimitiveTypeImpl.CHAR;
    +<a class="jxr_linenumber" name="L151" href="#L151">151</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (name.contentEquals(Boolean.<strong class="jxr_keyword">class</strong>.getName())) {
    +<a class="jxr_linenumber" name="L152" href="#L152">152</a>             <strong class="jxr_keyword">return</strong> PrimitiveTypeImpl.BOOLEAN;
    +<a class="jxr_linenumber" name="L153" href="#L153">153</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L154" href="#L154">154</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(String.format(<span class="jxr_string">"Expected boxed type, but got %s."</span>, type));
    +<a class="jxr_linenumber" name="L155" href="#L155">155</a>         }
    +<a class="jxr_linenumber" name="L156" href="#L156">156</a>     }
    +<a class="jxr_linenumber" name="L157" href="#L157">157</a> 
    +<a class="jxr_linenumber" name="L158" href="#L158">158</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L159" href="#L159">159</a> <em class="jxr_javadoccomment">     * Returns a type mirror for the given {@link Class} object.</em>
    +<a class="jxr_linenumber" name="L160" href="#L160">160</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L161" href="#L161">161</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> mirrorClass(Class&lt;?&gt; clazz, <a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a> mirrorContext) {
    +<a class="jxr_linenumber" name="L162" href="#L162">162</a>         <strong class="jxr_keyword">if</strong> (clazz.isArray()) {
    +<a class="jxr_linenumber" name="L163" href="#L163">163</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/ArrayTypeImpl.html">ArrayTypeImpl</a>(mirrorContext.mirror(clazz.getComponentType()));
    +<a class="jxr_linenumber" name="L164" href="#L164">164</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (clazz.isPrimitive()) {
    +<a class="jxr_linenumber" name="L165" href="#L165">165</a>             <strong class="jxr_keyword">return</strong> (ReflectionTypeMirror) getPrimitiveType(TypeKind.valueOf(clazz.getName().toUpperCase()));
    +<a class="jxr_linenumber" name="L166" href="#L166">166</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L167" href="#L167">167</a>             <em class="jxr_comment">// raw type</em>
    +<a class="jxr_linenumber" name="L168" href="#L168">168</a>             @Nullable Class&lt;?&gt; enclosingClass = clazz.getEnclosingClass();
    +<a class="jxr_linenumber" name="L169" href="#L169">169</a>             <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> enclosingType = enclosingClass == <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L170" href="#L170">170</a>                 ? NoTypeImpl.NONE
    +<a class="jxr_linenumber" name="L171" href="#L171">171</a>                 : mirrorContext.mirror(enclosingClass);
    +<a class="jxr_linenumber" name="L172" href="#L172">172</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a>(enclosingType, mirrorContext.typeDeclaration(clazz),
    +<a class="jxr_linenumber" name="L173" href="#L173">173</a>                 Collections.&lt;ReflectionTypeMirror&gt;emptyList());
    +<a class="jxr_linenumber" name="L174" href="#L174">174</a>         }
    +<a class="jxr_linenumber" name="L175" href="#L175">175</a>     }
    +<a class="jxr_linenumber" name="L176" href="#L176">176</a> 
    +<a class="jxr_linenumber" name="L177" href="#L177">177</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L178" href="#L178">178</a> <em class="jxr_javadoccomment">     * Returns a type mirror for the given {@link ParameterizedType} object.</em>
    +<a class="jxr_linenumber" name="L179" href="#L179">179</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L180" href="#L180">180</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a> mirrorParameterizedType(ParameterizedType parameterizedType,
    +<a class="jxr_linenumber" name="L181" href="#L181">181</a>             <a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a> mirrorContext) {
    +<a class="jxr_linenumber" name="L182" href="#L182">182</a>         Class&lt;?&gt; rawClass = (Class&lt;?&gt;) parameterizedType.getRawType();
    +<a class="jxr_linenumber" name="L183" href="#L183">183</a>         <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a> typeDeclaration = mirrorContext.typeDeclaration(rawClass);
    +<a class="jxr_linenumber" name="L184" href="#L184">184</a>         @Nullable Type ownerType = parameterizedType.getOwnerType();
    +<a class="jxr_linenumber" name="L185" href="#L185">185</a>         <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> ownerTypeMirror = ownerType == <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L186" href="#L186">186</a>             ? NoTypeImpl.NONE
    +<a class="jxr_linenumber" name="L187" href="#L187">187</a>             : mirrorContext.mirror(ownerType);
    +<a class="jxr_linenumber" name="L188" href="#L188">188</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a>(ownerTypeMirror, typeDeclaration,
    +<a class="jxr_linenumber" name="L189" href="#L189">189</a>             mirrorContext.mirror(parameterizedType.getActualTypeArguments()));
    +<a class="jxr_linenumber" name="L190" href="#L190">190</a>     }
    +<a class="jxr_linenumber" name="L191" href="#L191">191</a> 
    +<a class="jxr_linenumber" name="L192" href="#L192">192</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L193" href="#L193">193</a> <em class="jxr_javadoccomment">     * Returns a type mirror for the given {@link WildcardType} object.</em>
    +<a class="jxr_linenumber" name="L194" href="#L194">194</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L195" href="#L195">195</a> <em class="jxr_javadoccomment">     * &lt;p&gt;The following preconditions are guaranteed by the JLS and the JavaDoc of package {@link java.lang.reflect}:</em>
    +<a class="jxr_linenumber" name="L196" href="#L196">196</a> <em class="jxr_javadoccomment">     * &lt;ul&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L197" href="#L197">197</a> <em class="jxr_javadoccomment">     *     {@link WildcardType#getUpperBounds()} specifies: "Note that if no upper bound is explicitly</em>
    +<a class="jxr_linenumber" name="L198" href="#L198">198</a> <em class="jxr_javadoccomment">     *     declared, the upper bound is {@code Object}."</em>
    +<a class="jxr_linenumber" name="L199" href="#L199">199</a> <em class="jxr_javadoccomment">     * &lt;/li&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L200" href="#L200">200</a> <em class="jxr_javadoccomment">     *     While {@link WildcardType#getUpperBounds()} and</em>
    +<a class="jxr_linenumber" name="L201" href="#L201">201</a> <em class="jxr_javadoccomment">     *     {@link WildcardType#getLowerBounds()} return an arrays, JLS §4.5.1 (at least up to</em>
    +<a class="jxr_linenumber" name="L202" href="#L202">202</a> <em class="jxr_javadoccomment">     *     version 8) only supports a single ReferenceType for both bounds.</em>
    +<a class="jxr_linenumber" name="L203" href="#L203">203</a> <em class="jxr_javadoccomment">     * &lt;/li&gt;&lt;/ul&gt;</em>
    +<a class="jxr_linenumber" name="L204" href="#L204">204</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L205" href="#L205">205</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../net/florianschoppmann/java/reflect/WildcardTypeImpl.html">WildcardTypeImpl</a> mirrorWildcardType(WildcardType wildcardType, <a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a> mirrorContext) {
    +<a class="jxr_linenumber" name="L206" href="#L206">206</a>         Type[] upperBounds = wildcardType.getUpperBounds();
    +<a class="jxr_linenumber" name="L207" href="#L207">207</a>         Type[] lowerBounds = wildcardType.getLowerBounds();
    +<a class="jxr_linenumber" name="L208" href="#L208">208</a> 
    +<a class="jxr_linenumber" name="L209" href="#L209">209</a>         <em class="jxr_comment">// See JavaDoc for an explanation of the following assert statement.</em>
    +<a class="jxr_linenumber" name="L210" href="#L210">210</a>         assert upperBounds.length == 1 &amp;&amp; lowerBounds.length &lt;= 1
    +<a class="jxr_linenumber" name="L211" href="#L211">211</a>             &amp;&amp; (lowerBounds.length == 0 || Object.<strong class="jxr_keyword">class</strong>.equals(upperBounds[0]));
    +<a class="jxr_linenumber" name="L212" href="#L212">212</a> 
    +<a class="jxr_linenumber" name="L213" href="#L213">213</a>         @Nullable <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> extendsBounds;
    +<a class="jxr_linenumber" name="L214" href="#L214">214</a>         <strong class="jxr_keyword">if</strong> (Object.<strong class="jxr_keyword">class</strong>.equals(upperBounds[0])) {
    +<a class="jxr_linenumber" name="L215" href="#L215">215</a>             extendsBounds = <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L216" href="#L216">216</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L217" href="#L217">217</a>             extendsBounds = mirrorContext.mirror(upperBounds[0]);
    +<a class="jxr_linenumber" name="L218" href="#L218">218</a>         }
    +<a class="jxr_linenumber" name="L219" href="#L219">219</a> 
    +<a class="jxr_linenumber" name="L220" href="#L220">220</a>         @Nullable <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> superBound;
    +<a class="jxr_linenumber" name="L221" href="#L221">221</a>         <strong class="jxr_keyword">if</strong> (lowerBounds.length == 0) {
    +<a class="jxr_linenumber" name="L222" href="#L222">222</a>             superBound = <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L223" href="#L223">223</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L224" href="#L224">224</a>             superBound = mirrorContext.mirror(lowerBounds[0]);
    +<a class="jxr_linenumber" name="L225" href="#L225">225</a>         }
    +<a class="jxr_linenumber" name="L226" href="#L226">226</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/WildcardTypeImpl.html">WildcardTypeImpl</a>(extendsBounds, superBound);
    +<a class="jxr_linenumber" name="L227" href="#L227">227</a>     }
    +<a class="jxr_linenumber" name="L228" href="#L228">228</a> 
    +<a class="jxr_linenumber" name="L229" href="#L229">229</a>     <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> requireCondition(<strong class="jxr_keyword">boolean</strong> condition, String formatString, Object argument) {
    +<a class="jxr_linenumber" name="L230" href="#L230">230</a>         <strong class="jxr_keyword">if</strong> (!condition) {
    +<a class="jxr_linenumber" name="L231" href="#L231">231</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalStateException(String.format(formatString, argument));
    +<a class="jxr_linenumber" name="L232" href="#L232">232</a>         }
    +<a class="jxr_linenumber" name="L233" href="#L233">233</a>     }
    +<a class="jxr_linenumber" name="L234" href="#L234">234</a> 
    +<a class="jxr_linenumber" name="L235" href="#L235">235</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeVariableImpl.html">TypeVariableImpl</a> mirrorTypeVariable(TypeVariable&lt;?&gt; typeVariable, <a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a> mirrorContext) {
    +<a class="jxr_linenumber" name="L236" href="#L236">236</a>         GenericDeclaration genericDeclaration = typeVariable.getGenericDeclaration();
    +<a class="jxr_linenumber" name="L237" href="#L237">237</a>         <strong class="jxr_keyword">if</strong> (genericDeclaration instanceof Class&lt;?&gt;) {
    +<a class="jxr_linenumber" name="L238" href="#L238">238</a>             <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a> typeDeclaration = mirrorContext.typeDeclaration((Class&lt;?&gt;) genericDeclaration);
    +<a class="jxr_linenumber" name="L239" href="#L239">239</a>             @Nullable <a href="../../../../net/florianschoppmann/java/reflect/TypeParameterElementImpl.html">TypeParameterElementImpl</a> element = <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L240" href="#L240">240</a>             <strong class="jxr_keyword">for</strong> (TypeParameterElementImpl typeParameter: typeDeclaration.getTypeParameters()) {
    +<a class="jxr_linenumber" name="L241" href="#L241">241</a>                 <strong class="jxr_keyword">if</strong> (typeParameter.getSimpleName().contentEquals(typeVariable.getName())) {
    +<a class="jxr_linenumber" name="L242" href="#L242">242</a>                     element = typeParameter;
    +<a class="jxr_linenumber" name="L243" href="#L243">243</a>                     <strong class="jxr_keyword">break</strong>;
    +<a class="jxr_linenumber" name="L244" href="#L244">244</a>                 }
    +<a class="jxr_linenumber" name="L245" href="#L245">245</a>             }
    +<a class="jxr_linenumber" name="L246" href="#L246">246</a>             requireCondition(element != <strong class="jxr_keyword">null</strong>,
    +<a class="jxr_linenumber" name="L247" href="#L247">247</a>                 <span class="jxr_string">"Could not find the type-parameter element that corresponds to type variable %s."</span>, typeVariable);
    +<a class="jxr_linenumber" name="L248" href="#L248">248</a>             assert element != <strong class="jxr_keyword">null</strong> : <span class="jxr_string">"redundant check for FindBugs"</span>;
    +<a class="jxr_linenumber" name="L249" href="#L249">249</a>             <strong class="jxr_keyword">return</strong> element.asType();
    +<a class="jxr_linenumber" name="L250" href="#L250">250</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L251" href="#L251">251</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnsupportedOperationException(<span class="jxr_string">"Method or constructor type parameters not supported."</span>);
    +<a class="jxr_linenumber" name="L252" href="#L252">252</a>         }
    +<a class="jxr_linenumber" name="L253" href="#L253">253</a>     }
    +<a class="jxr_linenumber" name="L254" href="#L254">254</a> 
    +<a class="jxr_linenumber" name="L255" href="#L255">255</a>     <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> mirrorInternal(Type type, <a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a> mirrorContext) {
    +<a class="jxr_linenumber" name="L256" href="#L256">256</a>         @Nullable <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> typeMirror = <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L257" href="#L257">257</a>         <strong class="jxr_keyword">if</strong> (type instanceof Class&lt;?&gt;) {
    +<a class="jxr_linenumber" name="L258" href="#L258">258</a>             typeMirror = mirrorClass((Class&lt;?&gt;) type, mirrorContext);
    +<a class="jxr_linenumber" name="L259" href="#L259">259</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (type instanceof ParameterizedType) {
    +<a class="jxr_linenumber" name="L260" href="#L260">260</a>             typeMirror = mirrorParameterizedType((ParameterizedType) type, mirrorContext);
    +<a class="jxr_linenumber" name="L261" href="#L261">261</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (type instanceof GenericArrayType) {
    +<a class="jxr_linenumber" name="L262" href="#L262">262</a>             typeMirror = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/ArrayTypeImpl.html">ArrayTypeImpl</a>(
    +<a class="jxr_linenumber" name="L263" href="#L263">263</a>                 mirrorContext.mirror(((GenericArrayType) type).getGenericComponentType())
    +<a class="jxr_linenumber" name="L264" href="#L264">264</a>             );
    +<a class="jxr_linenumber" name="L265" href="#L265">265</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (type instanceof WildcardType) {
    +<a class="jxr_linenumber" name="L266" href="#L266">266</a>             typeMirror = mirrorWildcardType((WildcardType) type, mirrorContext);
    +<a class="jxr_linenumber" name="L267" href="#L267">267</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (type instanceof TypeVariable&lt;?&gt;) {
    +<a class="jxr_linenumber" name="L268" href="#L268">268</a>             typeMirror = mirrorTypeVariable((TypeVariable&lt;?&gt;) type, mirrorContext);
    +<a class="jxr_linenumber" name="L269" href="#L269">269</a>         }
    +<a class="jxr_linenumber" name="L270" href="#L270">270</a>         requireCondition(typeMirror != <strong class="jxr_keyword">null</strong>,
    +<a class="jxr_linenumber" name="L271" href="#L271">271</a>             <span class="jxr_string">"Expected Class, ParameterizedType, GenericArrayType, WildcardType, or TypeVariable instance, but got %s."</span>,
    +<a class="jxr_linenumber" name="L272" href="#L272">272</a>             type);
    +<a class="jxr_linenumber" name="L273" href="#L273">273</a>         assert typeMirror != <strong class="jxr_keyword">null</strong> : <span class="jxr_string">"redundant check for FindBugs"</span>;
    +<a class="jxr_linenumber" name="L274" href="#L274">274</a>         <strong class="jxr_keyword">return</strong> typeMirror;
    +<a class="jxr_linenumber" name="L275" href="#L275">275</a>     }
    +<a class="jxr_linenumber" name="L276" href="#L276">276</a> 
    +<a class="jxr_linenumber" name="L277" href="#L277">277</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L278" href="#L278">278</a> <em class="jxr_javadoccomment">     * Returns a type element corresponding to the given {@link Class} object.</em>
    +<a class="jxr_linenumber" name="L279" href="#L279">279</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L280" href="#L280">280</a> <em class="jxr_javadoccomment">     * @param clazz class object</em>
    +<a class="jxr_linenumber" name="L281" href="#L281">281</a> <em class="jxr_javadoccomment">     * @return type element corresponding to the given {@link Class} object</em>
    +<a class="jxr_linenumber" name="L282" href="#L282">282</a> <em class="jxr_javadoccomment">     * @throws IllegalArgumentException if the given class represents a primitive or array type</em>
    +<a class="jxr_linenumber" name="L283" href="#L283">283</a> <em class="jxr_javadoccomment">     * @throws UnsupportedOperationException if a generic declaration is referenced that is not of type {@link Class},</em>
    +<a class="jxr_linenumber" name="L284" href="#L284">284</a> <em class="jxr_javadoccomment">     *     see {@link #typeMirror(Type)} for details</em>
    +<a class="jxr_linenumber" name="L285" href="#L285">285</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L286" href="#L286">286</a>     <strong class="jxr_keyword">public</strong> TypeElement typeElement(Class&lt;?&gt; clazz) {
    +<a class="jxr_linenumber" name="L287" href="#L287">287</a>         <strong class="jxr_keyword">if</strong> (clazz.isArray() || clazz.isPrimitive()) {
    +<a class="jxr_linenumber" name="L288" href="#L288">288</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(String.format(<span class="jxr_string">"Expected class or interface type, but got %s."</span>, clazz));
    +<a class="jxr_linenumber" name="L289" href="#L289">289</a>         }
    +<a class="jxr_linenumber" name="L290" href="#L290">290</a> 
    +<a class="jxr_linenumber" name="L291" href="#L291">291</a>         <strong class="jxr_keyword">return</strong> ((DeclaredTypeImpl) typeMirror(clazz)).asElement();
    +<a class="jxr_linenumber" name="L292" href="#L292">292</a>     }
    +<a class="jxr_linenumber" name="L293" href="#L293">293</a> 
    +<a class="jxr_linenumber" name="L294" href="#L294">294</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L295" href="#L295">295</a> <em class="jxr_javadoccomment">     * Returns a type mirror corresponding to the given Java reflection type.</em>
    +<a class="jxr_linenumber" name="L296" href="#L296">296</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L297" href="#L297">297</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Type parameters in method declarations are not currently supported. That is, if the given type references a</em>
    +<a class="jxr_linenumber" name="L298" href="#L298">298</a> <em class="jxr_javadoccomment">     * {@link TypeVariable} instance that has a {@link java.lang.reflect.Constructor} or</em>
    +<a class="jxr_linenumber" name="L299" href="#L299">299</a> <em class="jxr_javadoccomment">     * {@link java.lang.reflect.Method} as generic declaration, an {@link UnsupportedOperationException}</em>
    +<a class="jxr_linenumber" name="L300" href="#L300">300</a> <em class="jxr_javadoccomment">     * will be thrown.</em>
    +<a class="jxr_linenumber" name="L301" href="#L301">301</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L302" href="#L302">302</a> <em class="jxr_javadoccomment">     * @param type type as represented by Java Reflection API</em>
    +<a class="jxr_linenumber" name="L303" href="#L303">303</a> <em class="jxr_javadoccomment">     * @return type mirror corresponding to the given Java reflection type</em>
    +<a class="jxr_linenumber" name="L304" href="#L304">304</a> <em class="jxr_javadoccomment">     * @throws UnsupportedOperationException if a generic declaration is referenced that is not of type {@link Class}</em>
    +<a class="jxr_linenumber" name="L305" href="#L305">305</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L306" href="#L306">306</a>     @Override
    +<a class="jxr_linenumber" name="L307" href="#L307">307</a>     <strong class="jxr_keyword">public</strong> TypeMirror typeMirror(Type type) {
    +<a class="jxr_linenumber" name="L308" href="#L308">308</a>         Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; typeDeclarations = <strong class="jxr_keyword">new</strong> LinkedHashMap&lt;&gt;();
    +<a class="jxr_linenumber" name="L309" href="#L309">309</a>         Map&lt;Class&lt;?&gt;, TypeElementImpl&gt; newTypeDeclarations = <strong class="jxr_keyword">new</strong> LinkedHashMap&lt;&gt;();
    +<a class="jxr_linenumber" name="L310" href="#L310">310</a>         <a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a> mirrorContext = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a>(<strong class="jxr_keyword">this</strong>, typeDeclarations, newTypeDeclarations);
    +<a class="jxr_linenumber" name="L311" href="#L311">311</a> 
    +<a class="jxr_linenumber" name="L312" href="#L312">312</a>         TypeMirror typeMirror = mirrorInternal(type, mirrorContext);
    +<a class="jxr_linenumber" name="L313" href="#L313">313</a>         <strong class="jxr_keyword">while</strong> (!newTypeDeclarations.isEmpty()) {
    +<a class="jxr_linenumber" name="L314" href="#L314">314</a>             List&lt;TypeElementImpl&gt; typeDeclarationsToFinish = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(newTypeDeclarations.values());
    +<a class="jxr_linenumber" name="L315" href="#L315">315</a>             typeDeclarations.putAll(newTypeDeclarations);
    +<a class="jxr_linenumber" name="L316" href="#L316">316</a>             newTypeDeclarations.clear();
    +<a class="jxr_linenumber" name="L317" href="#L317">317</a>             <strong class="jxr_keyword">for</strong> (TypeElementImpl typeDeclaration: typeDeclarationsToFinish) {
    +<a class="jxr_linenumber" name="L318" href="#L318">318</a>                 typeDeclaration.finish(mirrorContext);
    +<a class="jxr_linenumber" name="L319" href="#L319">319</a>             }
    +<a class="jxr_linenumber" name="L320" href="#L320">320</a>         }
    +<a class="jxr_linenumber" name="L321" href="#L321">321</a>         <strong class="jxr_keyword">return</strong> typeMirror;
    +<a class="jxr_linenumber" name="L322" href="#L322">322</a>     }
    +<a class="jxr_linenumber" name="L323" href="#L323">323</a> 
    +<a class="jxr_linenumber" name="L324" href="#L324">324</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> ImmutableList&lt;ReflectionTypeMirror&gt; toList(TypeMirror[] types) {
    +<a class="jxr_linenumber" name="L325" href="#L325">325</a>         List&lt;ReflectionTypeMirror&gt; list = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(types.length);
    +<a class="jxr_linenumber" name="L326" href="#L326">326</a>         <strong class="jxr_keyword">for</strong> (TypeMirror type: types) {
    +<a class="jxr_linenumber" name="L327" href="#L327">327</a>             list.add((ReflectionTypeMirror) type);
    +<a class="jxr_linenumber" name="L328" href="#L328">328</a>         }
    +<a class="jxr_linenumber" name="L329" href="#L329">329</a>         <strong class="jxr_keyword">return</strong> ImmutableList.copyOf(list);
    +<a class="jxr_linenumber" name="L330" href="#L330">330</a>     }
    +<a class="jxr_linenumber" name="L331" href="#L331">331</a> 
    +<a class="jxr_linenumber" name="L332" href="#L332">332</a>     @Override
    +<a class="jxr_linenumber" name="L333" href="#L333">333</a>     <strong class="jxr_keyword">public</strong> DeclaredType getDeclaredType(@Nullable DeclaredType containing, TypeElement typeElem,
    +<a class="jxr_linenumber" name="L334" href="#L334">334</a>             TypeMirror... typeArgs) {
    +<a class="jxr_linenumber" name="L335" href="#L335">335</a>         requireValidType(containing);
    +<a class="jxr_linenumber" name="L336" href="#L336">336</a>         requireValidElement(typeElem);
    +<a class="jxr_linenumber" name="L337" href="#L337">337</a>         requireValidTypes(typeArgs);
    +<a class="jxr_linenumber" name="L338" href="#L338">338</a> 
    +<a class="jxr_linenumber" name="L339" href="#L339">339</a>         <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> newContainingType = containing == <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L340" href="#L340">340</a>             ? NoTypeImpl.NONE
    +<a class="jxr_linenumber" name="L341" href="#L341">341</a>             : (ReflectionTypeMirror) containing;
    +<a class="jxr_linenumber" name="L342" href="#L342">342</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a>(newContainingType, (TypeElementImpl) typeElem, toList(typeArgs));
    +<a class="jxr_linenumber" name="L343" href="#L343">343</a>     }
    +<a class="jxr_linenumber" name="L344" href="#L344">344</a> 
    +<a class="jxr_linenumber" name="L345" href="#L345">345</a>     @Override
    +<a class="jxr_linenumber" name="L346" href="#L346">346</a>     <strong class="jxr_keyword">public</strong> DeclaredType getDeclaredType(TypeElement typeElem, TypeMirror... typeArgs) {
    +<a class="jxr_linenumber" name="L347" href="#L347">347</a>         requireValidElement(typeElem);
    +<a class="jxr_linenumber" name="L348" href="#L348">348</a>         requireValidTypes(typeArgs);
    +<a class="jxr_linenumber" name="L349" href="#L349">349</a> 
    +<a class="jxr_linenumber" name="L350" href="#L350">350</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a>(NoTypeImpl.NONE, (TypeElementImpl) typeElem, toList(typeArgs));
    +<a class="jxr_linenumber" name="L351" href="#L351">351</a>     }
    +<a class="jxr_linenumber" name="L352" href="#L352">352</a> 
    +<a class="jxr_linenumber" name="L353" href="#L353">353</a>     @Override
    +<a class="jxr_linenumber" name="L354" href="#L354">354</a>     <strong class="jxr_keyword">public</strong> NoType getNoType(TypeKind kind) {
    +<a class="jxr_linenumber" name="L355" href="#L355">355</a>         Objects.requireNonNull(kind);
    +<a class="jxr_linenumber" name="L356" href="#L356">356</a>         <strong class="jxr_keyword">if</strong> (kind == TypeKind.VOID) {
    +<a class="jxr_linenumber" name="L357" href="#L357">357</a>             <strong class="jxr_keyword">return</strong> NoTypeImpl.VOID;
    +<a class="jxr_linenumber" name="L358" href="#L358">358</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (kind == TypeKind.NONE) {
    +<a class="jxr_linenumber" name="L359" href="#L359">359</a>             <strong class="jxr_keyword">return</strong> NoTypeImpl.NONE;
    +<a class="jxr_linenumber" name="L360" href="#L360">360</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L361" href="#L361">361</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(String.format(<span class="jxr_string">"Expected one of %s, but got %s."</span>,
    +<a class="jxr_linenumber" name="L362" href="#L362">362</a>                 Arrays.asList(TypeKind.VOID, TypeKind.NONE), kind));
    +<a class="jxr_linenumber" name="L363" href="#L363">363</a>         }
    +<a class="jxr_linenumber" name="L364" href="#L364">364</a>     }
    +<a class="jxr_linenumber" name="L365" href="#L365">365</a> 
    +<a class="jxr_linenumber" name="L366" href="#L366">366</a>     @Override
    +<a class="jxr_linenumber" name="L367" href="#L367">367</a>     <strong class="jxr_keyword">public</strong> NullType getNullType() {
    +<a class="jxr_linenumber" name="L368" href="#L368">368</a>         <strong class="jxr_keyword">return</strong> NullTypeImpl.INSTANCE;
    +<a class="jxr_linenumber" name="L369" href="#L369">369</a>     }
    +<a class="jxr_linenumber" name="L370" href="#L370">370</a> 
    +<a class="jxr_linenumber" name="L371" href="#L371">371</a>     @Override
    +<a class="jxr_linenumber" name="L372" href="#L372">372</a>     <strong class="jxr_keyword">public</strong> ArrayType getArrayType(TypeMirror componentType) {
    +<a class="jxr_linenumber" name="L373" href="#L373">373</a>         Objects.requireNonNull(componentType);
    +<a class="jxr_linenumber" name="L374" href="#L374">374</a>         requireValidType(componentType);
    +<a class="jxr_linenumber" name="L375" href="#L375">375</a> 
    +<a class="jxr_linenumber" name="L376" href="#L376">376</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/ArrayTypeImpl.html">ArrayTypeImpl</a>((ReflectionTypeMirror) componentType);
    +<a class="jxr_linenumber" name="L377" href="#L377">377</a>     }
    +<a class="jxr_linenumber" name="L378" href="#L378">378</a> 
    +<a class="jxr_linenumber" name="L379" href="#L379">379</a>     @Override
    +<a class="jxr_linenumber" name="L380" href="#L380">380</a>     <strong class="jxr_keyword">protected</strong> javax.lang.model.type.TypeVariable createTypeVariable(TypeParameterElement typeParameter,
    +<a class="jxr_linenumber" name="L381" href="#L381">381</a>             @Nullable javax.lang.model.type.WildcardType capturedTypeArgument) {
    +<a class="jxr_linenumber" name="L382" href="#L382">382</a>         requireValidElement(Objects.requireNonNull(typeParameter));
    +<a class="jxr_linenumber" name="L383" href="#L383">383</a>         requireValidType(capturedTypeArgument);
    +<a class="jxr_linenumber" name="L384" href="#L384">384</a> 
    +<a class="jxr_linenumber" name="L385" href="#L385">385</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeVariableImpl.html">TypeVariableImpl</a>((TypeParameterElementImpl) typeParameter, (WildcardTypeImpl) capturedTypeArgument);
    +<a class="jxr_linenumber" name="L386" href="#L386">386</a>     }
    +<a class="jxr_linenumber" name="L387" href="#L387">387</a> 
    +<a class="jxr_linenumber" name="L388" href="#L388">388</a>     @Override
    +<a class="jxr_linenumber" name="L389" href="#L389">389</a>     <strong class="jxr_keyword">protected</strong> javax.lang.model.type.WildcardType capturedTypeArgument(javax.lang.model.type.TypeVariable typeVariable) {
    +<a class="jxr_linenumber" name="L390" href="#L390">390</a>         requireValidType(Objects.requireNonNull(typeVariable));
    +<a class="jxr_linenumber" name="L391" href="#L391">391</a> 
    +<a class="jxr_linenumber" name="L392" href="#L392">392</a>         <strong class="jxr_keyword">return</strong> ((TypeVariableImpl) typeVariable).getCapturedTypeArgument();
    +<a class="jxr_linenumber" name="L393" href="#L393">393</a>     }
    +<a class="jxr_linenumber" name="L394" href="#L394">394</a> 
    +<a class="jxr_linenumber" name="L395" href="#L395">395</a>     @Override
    +<a class="jxr_linenumber" name="L396" href="#L396">396</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/type/IntersectionType.html">IntersectionType</a> getIntersectionType(TypeMirror... bounds) {
    +<a class="jxr_linenumber" name="L397" href="#L397">397</a>         Objects.requireNonNull(bounds);
    +<a class="jxr_linenumber" name="L398" href="#L398">398</a>         <strong class="jxr_keyword">if</strong> (bounds.length == 0) {
    +<a class="jxr_linenumber" name="L399" href="#L399">399</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(<span class="jxr_string">"Expected at least one bound."</span>);
    +<a class="jxr_linenumber" name="L400" href="#L400">400</a>         }
    +<a class="jxr_linenumber" name="L401" href="#L401">401</a>         requireValidTypes(bounds);
    +<a class="jxr_linenumber" name="L402" href="#L402">402</a> 
    +<a class="jxr_linenumber" name="L403" href="#L403">403</a>         List&lt;ReflectionTypeMirror&gt; newBounds = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(bounds.length);
    +<a class="jxr_linenumber" name="L404" href="#L404">404</a>         <strong class="jxr_keyword">for</strong> (TypeMirror bound: bounds) {
    +<a class="jxr_linenumber" name="L405" href="#L405">405</a>             newBounds.add((ReflectionTypeMirror) bound);
    +<a class="jxr_linenumber" name="L406" href="#L406">406</a>         }
    +<a class="jxr_linenumber" name="L407" href="#L407">407</a> 
    +<a class="jxr_linenumber" name="L408" href="#L408">408</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/IntersectionTypeImpl.html">IntersectionTypeImpl</a>(newBounds);
    +<a class="jxr_linenumber" name="L409" href="#L409">409</a>     }
    +<a class="jxr_linenumber" name="L410" href="#L410">410</a> 
    +<a class="jxr_linenumber" name="L411" href="#L411">411</a>     @Override
    +<a class="jxr_linenumber" name="L412" href="#L412">412</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> setTypeVariableBounds(javax.lang.model.type.TypeVariable typeVariable, TypeMirror upperBound,
    +<a class="jxr_linenumber" name="L413" href="#L413">413</a>             TypeMirror lowerBound) {
    +<a class="jxr_linenumber" name="L414" href="#L414">414</a>         requireValidType(Objects.requireNonNull(typeVariable));
    +<a class="jxr_linenumber" name="L415" href="#L415">415</a>         requireValidType(Objects.requireNonNull(upperBound));
    +<a class="jxr_linenumber" name="L416" href="#L416">416</a>         requireValidType(Objects.requireNonNull(lowerBound));
    +<a class="jxr_linenumber" name="L417" href="#L417">417</a> 
    +<a class="jxr_linenumber" name="L418" href="#L418">418</a>         ((<a href="../../../../net/florianschoppmann/java/reflect/TypeVariableImpl.html">TypeVariableImpl</a>) typeVariable).setUpperAndLowerBounds(
    +<a class="jxr_linenumber" name="L419" href="#L419">419</a>             (<a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a>) upperBound,
    +<a class="jxr_linenumber" name="L420" href="#L420">420</a>             (<a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a>) lowerBound
    +<a class="jxr_linenumber" name="L421" href="#L421">421</a>         );
    +<a class="jxr_linenumber" name="L422" href="#L422">422</a>     }
    +<a class="jxr_linenumber" name="L423" href="#L423">423</a> 
    +<a class="jxr_linenumber" name="L424" href="#L424">424</a>     @Override
    +<a class="jxr_linenumber" name="L425" href="#L425">425</a>     <strong class="jxr_keyword">public</strong> PrimitiveType getPrimitiveType(TypeKind kind) {
    +<a class="jxr_linenumber" name="L426" href="#L426">426</a>         @Nullable <a href="../../../../net/florianschoppmann/java/reflect/PrimitiveTypeImpl.html">PrimitiveTypeImpl</a> primitiveType = primitiveTypes.get(kind.ordinal());
    +<a class="jxr_linenumber" name="L427" href="#L427">427</a>         <strong class="jxr_keyword">if</strong> (primitiveType == <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L428" href="#L428">428</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(String.format(<span class="jxr_string">"Expected primitive kind, but got %s."</span>, kind));
    +<a class="jxr_linenumber" name="L429" href="#L429">429</a>         }
    +<a class="jxr_linenumber" name="L430" href="#L430">430</a>         <strong class="jxr_keyword">return</strong> primitiveType;
    +<a class="jxr_linenumber" name="L431" href="#L431">431</a>     }
    +<a class="jxr_linenumber" name="L432" href="#L432">432</a> 
    +<a class="jxr_linenumber" name="L433" href="#L433">433</a>     @Override
    +<a class="jxr_linenumber" name="L434" href="#L434">434</a>     <strong class="jxr_keyword">public</strong> javax.lang.model.type.WildcardType getWildcardType(@Nullable TypeMirror extendsBound,
    +<a class="jxr_linenumber" name="L435" href="#L435">435</a>             @Nullable TypeMirror superBound) {
    +<a class="jxr_linenumber" name="L436" href="#L436">436</a>         requireValidType(extendsBound);
    +<a class="jxr_linenumber" name="L437" href="#L437">437</a>         requireValidType(superBound);
    +<a class="jxr_linenumber" name="L438" href="#L438">438</a> 
    +<a class="jxr_linenumber" name="L439" href="#L439">439</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/WildcardTypeImpl.html">WildcardTypeImpl</a>((ReflectionTypeMirror) extendsBound, (ReflectionTypeMirror) superBound);
    +<a class="jxr_linenumber" name="L440" href="#L440">440</a>     }
    +<a class="jxr_linenumber" name="L441" href="#L441">441</a> 
    +<a class="jxr_linenumber" name="L442" href="#L442">442</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> UnsupportedOperationException unsupportedException() {
    +<a class="jxr_linenumber" name="L443" href="#L443">443</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> UnsupportedOperationException(
    +<a class="jxr_linenumber" name="L444" href="#L444">444</a>             <span class="jxr_string">"isAssignable(), isSubsignature(), asMemberOf(), and directSupertypes() not currently supported."</span>
    +<a class="jxr_linenumber" name="L445" href="#L445">445</a>         );
    +<a class="jxr_linenumber" name="L446" href="#L446">446</a>     }
    +<a class="jxr_linenumber" name="L447" href="#L447">447</a> 
    +<a class="jxr_linenumber" name="L448" href="#L448">448</a>     @Override
    +<a class="jxr_linenumber" name="L449" href="#L449">449</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isAssignable(TypeMirror t1, TypeMirror t2) {
    +<a class="jxr_linenumber" name="L450" href="#L450">450</a>         <strong class="jxr_keyword">throw</strong> unsupportedException();
    +<a class="jxr_linenumber" name="L451" href="#L451">451</a>     }
    +<a class="jxr_linenumber" name="L452" href="#L452">452</a> 
    +<a class="jxr_linenumber" name="L453" href="#L453">453</a>     @Override
    +<a class="jxr_linenumber" name="L454" href="#L454">454</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isSubsignature(ExecutableType m1, ExecutableType m2) {
    +<a class="jxr_linenumber" name="L455" href="#L455">455</a>         <strong class="jxr_keyword">throw</strong> unsupportedException();
    +<a class="jxr_linenumber" name="L456" href="#L456">456</a>     }
    +<a class="jxr_linenumber" name="L457" href="#L457">457</a> 
    +<a class="jxr_linenumber" name="L458" href="#L458">458</a>     @Override
    +<a class="jxr_linenumber" name="L459" href="#L459">459</a>     <strong class="jxr_keyword">public</strong> TypeMirror asMemberOf(DeclaredType containing, Element element) {
    +<a class="jxr_linenumber" name="L460" href="#L460">460</a>         <strong class="jxr_keyword">throw</strong> unsupportedException();
    +<a class="jxr_linenumber" name="L461" href="#L461">461</a>     }
    +<a class="jxr_linenumber" name="L462" href="#L462">462</a> 
    +<a class="jxr_linenumber" name="L463" href="#L463">463</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L464" href="#L464">464</a> <em class="jxr_javadoccomment">     * @throws UnsupportedOperationException whenever this method is called</em>
    +<a class="jxr_linenumber" name="L465" href="#L465">465</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L466" href="#L466">466</a>     @Override
    +<a class="jxr_linenumber" name="L467" href="#L467">467</a>     <strong class="jxr_keyword">public</strong> List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; directSupertypes(TypeMirror t) {
    +<a class="jxr_linenumber" name="L468" href="#L468">468</a>         <strong class="jxr_keyword">throw</strong> unsupportedException();
    +<a class="jxr_linenumber" name="L469" href="#L469">469</a>     }
    +<a class="jxr_linenumber" name="L470" href="#L470">470</a> }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/TypeElementImpl.html b/xref/net/florianschoppmann/java/reflect/TypeElementImpl.html
    new file mode 100644
    index 0000000..fb08ee6
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/TypeElementImpl.html
    @@ -0,0 +1,198 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>TypeElementImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/TypeElementImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.ElementKind;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.ElementVisitor;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.Name;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.NestingKind;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.TypeElement;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeMirror;
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.Type;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.TypeVariable;
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/reflect/ElementImpl.html">ElementImpl</a> <strong class="jxr_keyword">implements</strong> TypeElement, <a href="../../../../net/florianschoppmann/java/reflect/ReflectionParameterizable.html">ReflectionParameterizable</a> {
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Class&lt;?&gt; clazz;
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ImmutableList&lt;TypeParameterElementImpl&gt; typeParameters;
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>      @Nullable <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionElement.html">ReflectionElement</a> enclosingElement;
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>      @Nullable <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> superClass;
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>      @Nullable <strong class="jxr_keyword">private</strong> List&lt;ReflectionTypeMirror&gt; interfaces;
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>      @Nullable <strong class="jxr_keyword">private</strong> List&lt;ElementImpl&gt; enclosedElements;
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  <em class="jxr_javadoccomment">     * Cache the type returned by {@link #asType()}.</em>
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;Similarly to {@link String#hashCode()}, caching is not synchronized. This means that different threads may</em>
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment">     * (at least theoretically) see different values for this field. However, this is not a problem because all such</em>
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <em class="jxr_javadoccomment">     * values would compare equal. Moreover, §17.7 JLS specifies that "Writes to and reads of references are always</em>
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment">     * atomic, regardless of whether they are implemented as 32-bit or 64-bit values". Hence, even if caches were</em>
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment">     * updated, every access to this field would yield a well-defined result.</em>
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>      @Nullable <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a> type;
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      <a href="../../../../net/florianschoppmann/java/reflect/TypeElementImpl.html">TypeElementImpl</a>(Class&lt;?&gt; clazz) {
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>          <strong class="jxr_keyword">this</strong>.clazz = Objects.requireNonNull(clazz);
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>          List&lt;TypeParameterElementImpl&gt; newTypeParameters = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>          <strong class="jxr_keyword">for</strong> (TypeVariable&lt;?&gt; parameter: clazz.getTypeParameters()) {
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>              newTypeParameters.add(<strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeParameterElementImpl.html">TypeParameterElementImpl</a>(parameter, <strong class="jxr_keyword">this</strong>));
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>          }
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>          typeParameters = ImmutableList.copyOf(newTypeParameters);
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      }
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      @Override
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(@Nullable Object otherObject) {
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == otherObject) {
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (otherObject == <strong class="jxr_keyword">null</strong> || getClass() != otherObject.getClass()) {
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>              <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>          }
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>          <strong class="jxr_keyword">return</strong> clazz.equals(((TypeElementImpl) otherObject).clazz);
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      }
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      @Override
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          <strong class="jxr_keyword">return</strong> clazz.hashCode();
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      }
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      @Override
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      <strong class="jxr_keyword">public</strong> String toString() {
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          <strong class="jxr_keyword">return</strong> clazz.toString();
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      }
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  
    +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      @Override
    +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(ElementVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          <strong class="jxr_keyword">return</strong> visitor.visitType(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      }
    +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  
    +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      @Override
    +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      <strong class="jxr_keyword">public</strong> List&lt;ElementImpl&gt; getEnclosedElements() {
    +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          requireFinished();
    +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          assert enclosedElements != <strong class="jxr_keyword">null</strong> : <span class="jxr_string">"must be non-null when finished"</span>;
    +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          <strong class="jxr_keyword">return</strong> enclosedElements;
    +<a class="jxr_linenumber" name="L76" href="#L76">76</a>      }
    +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  
    +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      @Override
    +<a class="jxr_linenumber" name="L79" href="#L79">79</a>      <strong class="jxr_keyword">public</strong> NestingKind getNestingKind() {
    +<a class="jxr_linenumber" name="L80" href="#L80">80</a>          <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnsupportedOperationException(String.format(
    +<a class="jxr_linenumber" name="L81" href="#L81">81</a>              <span class="jxr_string">"Nesting kind not currently supported by %s."</span>, ReflectionTypes.<strong class="jxr_keyword">class</strong>
    +<a class="jxr_linenumber" name="L82" href="#L82">82</a>          ));
    +<a class="jxr_linenumber" name="L83" href="#L83">83</a>      }
    +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  
    +<a class="jxr_linenumber" name="L85" href="#L85">85</a>      @Override
    +<a class="jxr_linenumber" name="L86" href="#L86">86</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/NameImpl.html">NameImpl</a> getQualifiedName() {
    +<a class="jxr_linenumber" name="L87" href="#L87">87</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/NameImpl.html">NameImpl</a>(clazz.getCanonicalName());
    +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      }
    +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  
    +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      @Override
    +<a class="jxr_linenumber" name="L91" href="#L91">91</a>      <strong class="jxr_keyword">public</strong> Name getSimpleName() {
    +<a class="jxr_linenumber" name="L92" href="#L92">92</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/NameImpl.html">NameImpl</a>(clazz.getSimpleName());
    +<a class="jxr_linenumber" name="L93" href="#L93">93</a>      }
    +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  
    +<a class="jxr_linenumber" name="L95" href="#L95">95</a>      @Override
    +<a class="jxr_linenumber" name="L96" href="#L96">96</a>      <strong class="jxr_keyword">public</strong> TypeMirror getSuperclass() {
    +<a class="jxr_linenumber" name="L97" href="#L97">97</a>          requireFinished();
    +<a class="jxr_linenumber" name="L98" href="#L98">98</a>          assert superClass != <strong class="jxr_keyword">null</strong> : <span class="jxr_string">"must be non-null when finished"</span>;
    +<a class="jxr_linenumber" name="L99" href="#L99">99</a>          <strong class="jxr_keyword">return</strong> superClass;
    +<a class="jxr_linenumber" name="L100" href="#L100">100</a>     }
    +<a class="jxr_linenumber" name="L101" href="#L101">101</a> 
    +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     @Override
    +<a class="jxr_linenumber" name="L103" href="#L103">103</a>     <strong class="jxr_keyword">public</strong> List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; getInterfaces() {
    +<a class="jxr_linenumber" name="L104" href="#L104">104</a>         requireFinished();
    +<a class="jxr_linenumber" name="L105" href="#L105">105</a>         assert interfaces != <strong class="jxr_keyword">null</strong> : <span class="jxr_string">"must be non-null when finished"</span>;
    +<a class="jxr_linenumber" name="L106" href="#L106">106</a>         <strong class="jxr_keyword">return</strong> interfaces;
    +<a class="jxr_linenumber" name="L107" href="#L107">107</a>     }
    +<a class="jxr_linenumber" name="L108" href="#L108">108</a> 
    +<a class="jxr_linenumber" name="L109" href="#L109">109</a>     @Override
    +<a class="jxr_linenumber" name="L110" href="#L110">110</a>     <strong class="jxr_keyword">public</strong> List&lt;TypeParameterElementImpl&gt; getTypeParameters() {
    +<a class="jxr_linenumber" name="L111" href="#L111">111</a>         <strong class="jxr_keyword">return</strong> typeParameters;
    +<a class="jxr_linenumber" name="L112" href="#L112">112</a>     }
    +<a class="jxr_linenumber" name="L113" href="#L113">113</a> 
    +<a class="jxr_linenumber" name="L114" href="#L114">114</a>     @Override
    +<a class="jxr_linenumber" name="L115" href="#L115">115</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionElement.html">ReflectionElement</a> getEnclosingElement() {
    +<a class="jxr_linenumber" name="L116" href="#L116">116</a>         requireFinished();
    +<a class="jxr_linenumber" name="L117" href="#L117">117</a> 
    +<a class="jxr_linenumber" name="L118" href="#L118">118</a>         <strong class="jxr_keyword">if</strong> (enclosingElement == <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L119" href="#L119">119</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnsupportedOperationException(<span class="jxr_string">"getEnclosingElement() not supported for top-level classes."</span>);
    +<a class="jxr_linenumber" name="L120" href="#L120">120</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L121" href="#L121">121</a>             <strong class="jxr_keyword">return</strong> enclosingElement;
    +<a class="jxr_linenumber" name="L122" href="#L122">122</a>         }
    +<a class="jxr_linenumber" name="L123" href="#L123">123</a>     }
    +<a class="jxr_linenumber" name="L124" href="#L124">124</a> 
    +<a class="jxr_linenumber" name="L125" href="#L125">125</a>     @Override
    +<a class="jxr_linenumber" name="L126" href="#L126">126</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a> asType() {
    +<a class="jxr_linenumber" name="L127" href="#L127">127</a>         requireFinished();
    +<a class="jxr_linenumber" name="L128" href="#L128">128</a> 
    +<a class="jxr_linenumber" name="L129" href="#L129">129</a>         @Nullable <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a> localType = type;
    +<a class="jxr_linenumber" name="L130" href="#L130">130</a>         <strong class="jxr_keyword">if</strong> (localType == <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L131" href="#L131">131</a>             List&lt;TypeVariableImpl&gt; prototypicalTypeArguments = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(typeParameters.size());
    +<a class="jxr_linenumber" name="L132" href="#L132">132</a>             <strong class="jxr_keyword">for</strong> (TypeParameterElementImpl typeParameter: typeParameters) {
    +<a class="jxr_linenumber" name="L133" href="#L133">133</a>                 prototypicalTypeArguments.add(typeParameter.asType());
    +<a class="jxr_linenumber" name="L134" href="#L134">134</a>             }
    +<a class="jxr_linenumber" name="L135" href="#L135">135</a> 
    +<a class="jxr_linenumber" name="L136" href="#L136">136</a>             <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> enclosingType = enclosingElement == <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L137" href="#L137">137</a>                 ? NoTypeImpl.NONE
    +<a class="jxr_linenumber" name="L138" href="#L138">138</a>                 : enclosingElement.asType();
    +<a class="jxr_linenumber" name="L139" href="#L139">139</a>             localType = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/DeclaredTypeImpl.html">DeclaredTypeImpl</a>(enclosingType, <strong class="jxr_keyword">this</strong>, prototypicalTypeArguments);
    +<a class="jxr_linenumber" name="L140" href="#L140">140</a>             type = localType;
    +<a class="jxr_linenumber" name="L141" href="#L141">141</a>         }
    +<a class="jxr_linenumber" name="L142" href="#L142">142</a>         <strong class="jxr_keyword">return</strong> localType;
    +<a class="jxr_linenumber" name="L143" href="#L143">143</a>     }
    +<a class="jxr_linenumber" name="L144" href="#L144">144</a> 
    +<a class="jxr_linenumber" name="L145" href="#L145">145</a>     @Override
    +<a class="jxr_linenumber" name="L146" href="#L146">146</a>     <strong class="jxr_keyword">public</strong> ElementKind getKind() {
    +<a class="jxr_linenumber" name="L147" href="#L147">147</a>         <strong class="jxr_keyword">if</strong> (clazz.isEnum()) {
    +<a class="jxr_linenumber" name="L148" href="#L148">148</a>             <strong class="jxr_keyword">return</strong> ElementKind.ENUM;
    +<a class="jxr_linenumber" name="L149" href="#L149">149</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (clazz.isAnnotation()) {
    +<a class="jxr_linenumber" name="L150" href="#L150">150</a>             <strong class="jxr_keyword">return</strong> ElementKind.ANNOTATION_TYPE;
    +<a class="jxr_linenumber" name="L151" href="#L151">151</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (clazz.isInterface()) {
    +<a class="jxr_linenumber" name="L152" href="#L152">152</a>             <strong class="jxr_keyword">return</strong> ElementKind.INTERFACE;
    +<a class="jxr_linenumber" name="L153" href="#L153">153</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L154" href="#L154">154</a>             <strong class="jxr_keyword">return</strong> ElementKind.CLASS;
    +<a class="jxr_linenumber" name="L155" href="#L155">155</a>         }
    +<a class="jxr_linenumber" name="L156" href="#L156">156</a>     }
    +<a class="jxr_linenumber" name="L157" href="#L157">157</a> 
    +<a class="jxr_linenumber" name="L158" href="#L158">158</a>     @Override
    +<a class="jxr_linenumber" name="L159" href="#L159">159</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> finishDerivedFromElement(<a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a> mirrorContext) {
    +<a class="jxr_linenumber" name="L160" href="#L160">160</a>         @Nullable Class&lt;?&gt; enclosingClass = clazz.getEnclosingClass();
    +<a class="jxr_linenumber" name="L161" href="#L161">161</a>         enclosingElement = enclosingClass == <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L162" href="#L162">162</a>             ? <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L163" href="#L163">163</a>             : mirrorContext.typeDeclaration(enclosingClass);
    +<a class="jxr_linenumber" name="L164" href="#L164">164</a> 
    +<a class="jxr_linenumber" name="L165" href="#L165">165</a>         Class&lt;?&gt;[] declaredClasses = clazz.getDeclaredClasses();
    +<a class="jxr_linenumber" name="L166" href="#L166">166</a>         List&lt;ElementImpl&gt; newEnclosedElements = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(typeParameters.size() + declaredClasses.length);
    +<a class="jxr_linenumber" name="L167" href="#L167">167</a>         newEnclosedElements.addAll(typeParameters);
    +<a class="jxr_linenumber" name="L168" href="#L168">168</a>         <strong class="jxr_keyword">for</strong> (Class&lt;?&gt; declaredClass: declaredClasses) {
    +<a class="jxr_linenumber" name="L169" href="#L169">169</a>             newEnclosedElements.add(mirrorContext.typeDeclaration(declaredClass));
    +<a class="jxr_linenumber" name="L170" href="#L170">170</a>         }
    +<a class="jxr_linenumber" name="L171" href="#L171">171</a>         enclosedElements = ImmutableList.copyOf(newEnclosedElements);
    +<a class="jxr_linenumber" name="L172" href="#L172">172</a> 
    +<a class="jxr_linenumber" name="L173" href="#L173">173</a>         @Nullable Type genericSuperClass = clazz.getGenericSuperclass();
    +<a class="jxr_linenumber" name="L174" href="#L174">174</a>         superClass = genericSuperClass == <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L175" href="#L175">175</a>             ? NoTypeImpl.NONE
    +<a class="jxr_linenumber" name="L176" href="#L176">176</a>             : mirrorContext.mirror(genericSuperClass);
    +<a class="jxr_linenumber" name="L177" href="#L177">177</a>         interfaces = mirrorContext.mirror(clazz.getGenericInterfaces());
    +<a class="jxr_linenumber" name="L178" href="#L178">178</a>         <strong class="jxr_keyword">for</strong> (TypeParameterElementImpl typeParameter: typeParameters) {
    +<a class="jxr_linenumber" name="L179" href="#L179">179</a>             typeParameter.finish(mirrorContext);
    +<a class="jxr_linenumber" name="L180" href="#L180">180</a>         }
    +<a class="jxr_linenumber" name="L181" href="#L181">181</a> 
    +<a class="jxr_linenumber" name="L182" href="#L182">182</a>         <em class="jxr_comment">// Field 'type' is lazily initialized in order to break a dependency chain: Constructing type requires</em>
    +<a class="jxr_linenumber" name="L183" href="#L183">183</a>         <em class="jxr_comment">// enclosingElement.asType(), which at this point may not yet be available.</em>
    +<a class="jxr_linenumber" name="L184" href="#L184">184</a>     }
    +<a class="jxr_linenumber" name="L185" href="#L185">185</a> }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/TypeParameterElementImpl.html b/xref/net/florianschoppmann/java/reflect/TypeParameterElementImpl.html
    new file mode 100644
    index 0000000..f9c38ed
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/TypeParameterElementImpl.html
    @@ -0,0 +1,108 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>TypeParameterElementImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/TypeParameterElementImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.ElementKind;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.ElementVisitor;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.Name;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.TypeParameterElement;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">import</strong> java.lang.reflect.TypeVariable;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeParameterElementImpl.html">TypeParameterElementImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/reflect/ElementImpl.html">ElementImpl</a> <strong class="jxr_keyword">implements</strong> TypeParameterElement {
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> TypeVariable&lt;?&gt; reflectionTypeVariable;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/ElementImpl.html">ElementImpl</a> genericElement;
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeVariableImpl.html">TypeVariableImpl</a> typeVariable;
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>      @Nullable <strong class="jxr_keyword">private</strong> List&lt;ReflectionTypeMirror&gt; bounds;
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>      <a href="../../../../net/florianschoppmann/java/reflect/TypeParameterElementImpl.html">TypeParameterElementImpl</a>(TypeVariable&lt;?&gt; reflectionTypeVariable, <a href="../../../../net/florianschoppmann/java/reflect/ElementImpl.html">ElementImpl</a> genericElement) {
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>          <strong class="jxr_keyword">this</strong>.reflectionTypeVariable = Objects.requireNonNull(reflectionTypeVariable);
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>          <strong class="jxr_keyword">this</strong>.genericElement = Objects.requireNonNull(genericElement);
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>          typeVariable = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeVariableImpl.html">TypeVariableImpl</a>(<strong class="jxr_keyword">this</strong>, <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>      }
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>      @Override
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(@Nullable Object otherObject) {
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == otherObject) {
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (otherObject == <strong class="jxr_keyword">null</strong> || getClass() != otherObject.getClass()) {
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>              <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>          }
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>          <strong class="jxr_keyword">return</strong> reflectionTypeVariable.equals(((TypeParameterElementImpl) otherObject).reflectionTypeVariable);
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>      }
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      @Override
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>          <strong class="jxr_keyword">return</strong> reflectionTypeVariable.hashCode();
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      }
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      @Override
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <strong class="jxr_keyword">public</strong> String toString() {
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>          <strong class="jxr_keyword">return</strong> reflectionTypeVariable.toString();
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      }
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      @Override
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(ElementVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>          <strong class="jxr_keyword">return</strong> visitor.visitTypeParameter(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      }
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      @Override
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/ElementImpl.html">ElementImpl</a> getGenericElement() {
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          <strong class="jxr_keyword">return</strong> genericElement;
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      }
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      @Override
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">public</strong> List&lt;ReflectionTypeMirror&gt; getBounds() {
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          requireFinished();
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          assert bounds != <strong class="jxr_keyword">null</strong> : <span class="jxr_string">"must be non-null when finished"</span>;
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          <strong class="jxr_keyword">return</strong> bounds;
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      }
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      @Override
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/ElementImpl.html">ElementImpl</a> getEnclosingElement() {
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>          <strong class="jxr_keyword">return</strong> genericElement;
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      }
    +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  
    +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      @Override
    +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeVariableImpl.html">TypeVariableImpl</a> asType() {
    +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          <strong class="jxr_keyword">return</strong> typeVariable;
    +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      }
    +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  
    +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      @Override
    +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      <strong class="jxr_keyword">public</strong> ElementKind getKind() {
    +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          <strong class="jxr_keyword">return</strong> ElementKind.TYPE_PARAMETER;
    +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      }
    +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  
    +<a class="jxr_linenumber" name="L77" href="#L77">77</a>      @Override
    +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      <strong class="jxr_keyword">public</strong> Name getSimpleName() {
    +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/NameImpl.html">NameImpl</a>(reflectionTypeVariable.getName());
    +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      }
    +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  
    +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      @Override
    +<a class="jxr_linenumber" name="L83" href="#L83">83</a>      <strong class="jxr_keyword">public</strong> ImmutableList&lt;? <strong class="jxr_keyword">extends</strong> ReflectionElement&gt; getEnclosedElements() {
    +<a class="jxr_linenumber" name="L84" href="#L84">84</a>          <strong class="jxr_keyword">return</strong> ImmutableList.emptyList();
    +<a class="jxr_linenumber" name="L85" href="#L85">85</a>      }
    +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  
    +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      @Override
    +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      <strong class="jxr_keyword">void</strong> finishDerivedFromElement(<a href="../../../../net/florianschoppmann/java/reflect/MirrorContext.html">MirrorContext</a> mirrorContext) {
    +<a class="jxr_linenumber" name="L89" href="#L89">89</a>          bounds = mirrorContext.mirror(reflectionTypeVariable.getBounds());
    +<a class="jxr_linenumber" name="L90" href="#L90">90</a>          <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> bound = bounds.size() == 1
    +<a class="jxr_linenumber" name="L91" href="#L91">91</a>              ? bounds.get(0)
    +<a class="jxr_linenumber" name="L92" href="#L92">92</a>              : <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/reflect/IntersectionTypeImpl.html">IntersectionTypeImpl</a>(bounds);
    +<a class="jxr_linenumber" name="L93" href="#L93">93</a>          typeVariable.setUpperAndLowerBounds(bound, NullTypeImpl.INSTANCE);
    +<a class="jxr_linenumber" name="L94" href="#L94">94</a>      }
    +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/TypeVariableImpl.html b/xref/net/florianschoppmann/java/reflect/TypeVariableImpl.html
    new file mode 100644
    index 0000000..2beef84
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/TypeVariableImpl.html
    @@ -0,0 +1,126 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>TypeVariableImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/TypeVariableImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVariable;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVisitor;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeVariableImpl.html">TypeVariableImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> ReflectionTypeMirror, TypeVariable {
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> frozen = false;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeParameterElementImpl.html">TypeParameterElementImpl</a> typeParameterElement;
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>      @Nullable <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/WildcardTypeImpl.html">WildcardTypeImpl</a> capturedTypeArgument;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      @Nullable <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> upperBound;
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>      @Nullable <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> lowerBound;
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>      <a href="../../../../net/florianschoppmann/java/reflect/TypeVariableImpl.html">TypeVariableImpl</a>(<a href="../../../../net/florianschoppmann/java/reflect/TypeParameterElementImpl.html">TypeParameterElementImpl</a> typeParameterElement, @Nullable <a href="../../../../net/florianschoppmann/java/reflect/WildcardTypeImpl.html">WildcardTypeImpl</a> capturedTypeArgument) {
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>          Objects.requireNonNull(typeParameterElement);
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>          <strong class="jxr_keyword">this</strong>.typeParameterElement = typeParameterElement;
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>          <strong class="jxr_keyword">this</strong>.capturedTypeArgument = capturedTypeArgument;
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>      }
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>      @Override
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(@Nullable Object otherObject) {
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == otherObject) {
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (otherObject == <strong class="jxr_keyword">null</strong> || getClass() != otherObject.getClass()) {
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>              <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>          }
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>          requireFrozen();
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>          assert upperBound != <strong class="jxr_keyword">null</strong> &amp;&amp; lowerBound != <strong class="jxr_keyword">null</strong> : <span class="jxr_string">"must be non-null when frozen"</span>;
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>          <a href="../../../../net/florianschoppmann/java/reflect/TypeVariableImpl.html">TypeVariableImpl</a> other = (TypeVariableImpl) otherObject;
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>          <strong class="jxr_keyword">return</strong> typeParameterElement.equals(other.typeParameterElement)
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>              &amp;&amp; Objects.equals(capturedTypeArgument, other.capturedTypeArgument)
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>              &amp;&amp; upperBound.equals(other.upperBound)
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>              &amp;&amp; lowerBound.equals(other.lowerBound);
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      }
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      @Override
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>          requireFrozen();
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>          <strong class="jxr_keyword">return</strong> Objects.hash(typeParameterElement, capturedTypeArgument, upperBound, lowerBound);
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      }
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      @Override
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>          <strong class="jxr_keyword">return</strong> visitor.visitTypeVariable(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      }
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      @Override
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <strong class="jxr_keyword">public</strong> String toString() {
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>          <strong class="jxr_keyword">return</strong> ReflectionTypes.getInstance().toString(<strong class="jxr_keyword">this</strong>);
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      }
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">void</strong> requireUnfrozen() {
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          <strong class="jxr_keyword">if</strong> (frozen) {
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalStateException(String.format(
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>                  <span class="jxr_string">"Tried to modify instance of %s after it became effectively immutable."</span>, getClass()
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>              ));
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>          }
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      }
    +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  
    +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      <strong class="jxr_keyword">void</strong> requireFrozen() {
    +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          <strong class="jxr_keyword">if</strong> (!frozen) {
    +<a class="jxr_linenumber" name="L69" href="#L69">69</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalStateException(String.format(
    +<a class="jxr_linenumber" name="L70" href="#L70">70</a>                  <span class="jxr_string">"Instance of %s used before object construction finished."</span>, getClass()
    +<a class="jxr_linenumber" name="L71" href="#L71">71</a>              ));
    +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          }
    +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      }
    +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  
    +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      @Override
    +<a class="jxr_linenumber" name="L76" href="#L76">76</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/TypeParameterElementImpl.html">TypeParameterElementImpl</a> asElement() {
    +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          <strong class="jxr_keyword">return</strong> typeParameterElement;
    +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      }
    +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  
    +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      @Override
    +<a class="jxr_linenumber" name="L81" href="#L81">81</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> getUpperBound() {
    +<a class="jxr_linenumber" name="L82" href="#L82">82</a>          requireFrozen();
    +<a class="jxr_linenumber" name="L83" href="#L83">83</a>          assert upperBound != <strong class="jxr_keyword">null</strong> : <span class="jxr_string">"must be non-null when frozen"</span>;
    +<a class="jxr_linenumber" name="L84" href="#L84">84</a>          <strong class="jxr_keyword">return</strong> upperBound;
    +<a class="jxr_linenumber" name="L85" href="#L85">85</a>      }
    +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  
    +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      @Override
    +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> getLowerBound() {
    +<a class="jxr_linenumber" name="L89" href="#L89">89</a>          requireFrozen();
    +<a class="jxr_linenumber" name="L90" href="#L90">90</a>          assert lowerBound != <strong class="jxr_keyword">null</strong> : <span class="jxr_string">"must be non-null when frozen"</span>;
    +<a class="jxr_linenumber" name="L91" href="#L91">91</a>          <strong class="jxr_keyword">return</strong> lowerBound;
    +<a class="jxr_linenumber" name="L92" href="#L92">92</a>      }
    +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  
    +<a class="jxr_linenumber" name="L94" href="#L94">94</a>      <strong class="jxr_keyword">void</strong> setUpperAndLowerBounds(<a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> newUpperBound, <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> newLowerBound) {
    +<a class="jxr_linenumber" name="L95" href="#L95">95</a>          requireUnfrozen();
    +<a class="jxr_linenumber" name="L96" href="#L96">96</a>          Objects.requireNonNull(newUpperBound);
    +<a class="jxr_linenumber" name="L97" href="#L97">97</a>          Objects.requireNonNull(newLowerBound);
    +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  
    +<a class="jxr_linenumber" name="L99" href="#L99">99</a>          upperBound = newUpperBound;
    +<a class="jxr_linenumber" name="L100" href="#L100">100</a>         lowerBound = newLowerBound;
    +<a class="jxr_linenumber" name="L101" href="#L101">101</a>         frozen = <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     }
    +<a class="jxr_linenumber" name="L103" href="#L103">103</a> 
    +<a class="jxr_linenumber" name="L104" href="#L104">104</a>     @Override
    +<a class="jxr_linenumber" name="L105" href="#L105">105</a>     <strong class="jxr_keyword">public</strong> TypeKind getKind() {
    +<a class="jxr_linenumber" name="L106" href="#L106">106</a>         <strong class="jxr_keyword">return</strong> TypeKind.TYPEVAR;
    +<a class="jxr_linenumber" name="L107" href="#L107">107</a>     }
    +<a class="jxr_linenumber" name="L108" href="#L108">108</a> 
    +<a class="jxr_linenumber" name="L109" href="#L109">109</a>     @Nullable
    +<a class="jxr_linenumber" name="L110" href="#L110">110</a>     <a href="../../../../net/florianschoppmann/java/reflect/WildcardTypeImpl.html">WildcardTypeImpl</a> getCapturedTypeArgument() {
    +<a class="jxr_linenumber" name="L111" href="#L111">111</a>         <strong class="jxr_keyword">return</strong> capturedTypeArgument;
    +<a class="jxr_linenumber" name="L112" href="#L112">112</a>     }
    +<a class="jxr_linenumber" name="L113" href="#L113">113</a> }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/WildcardTypeImpl.html b/xref/net/florianschoppmann/java/reflect/WildcardTypeImpl.html
    new file mode 100644
    index 0000000..4791893
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/WildcardTypeImpl.html
    @@ -0,0 +1,82 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>WildcardTypeImpl xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/reflect/WildcardTypeImpl.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.reflect;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVisitor;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.WildcardType;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/reflect/WildcardTypeImpl.html">WildcardTypeImpl</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../net/florianschoppmann/java/reflect/AnnotatedConstructImpl.html">AnnotatedConstructImpl</a> <strong class="jxr_keyword">implements</strong> ReflectionTypeMirror, WildcardType {
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_javadoccomment">     * Upper bound of this wildcard. If no upper bound is explicitly declared, this field contains {@code null}.</em>
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>      @Nullable <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> extendsBound;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_javadoccomment">     * Lower bound of this wildcard. If no lower bound is explicitly declared, this field contains {@code null}.</em>
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>      @Nullable <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> superBound;
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>      <a href="../../../../net/florianschoppmann/java/reflect/WildcardTypeImpl.html">WildcardTypeImpl</a>(@Nullable <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> extendsBound, @Nullable <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> superBound) {
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>          <strong class="jxr_keyword">this</strong>.extendsBound = extendsBound;
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>          <strong class="jxr_keyword">this</strong>.superBound = superBound;
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>      }
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>      @Override
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(@Nullable Object otherObject) {
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == otherObject) {
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (otherObject == <strong class="jxr_keyword">null</strong> || getClass() != otherObject.getClass()) {
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>              <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>          }
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>          <a href="../../../../net/florianschoppmann/java/reflect/WildcardTypeImpl.html">WildcardTypeImpl</a> other = (WildcardTypeImpl) otherObject;
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>          <strong class="jxr_keyword">return</strong> Objects.equals(extendsBound, other.extendsBound)
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>              &amp;&amp; Objects.equals(superBound, other.superBound);
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      }
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      @Override
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>          <strong class="jxr_keyword">return</strong> Objects.hash(extendsBound, superBound);
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      }
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      @Override
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <strong class="jxr_keyword">public</strong> String toString() {
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>          <strong class="jxr_keyword">return</strong> ReflectionTypes.getInstance().toString(<strong class="jxr_keyword">this</strong>);
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      }
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      @Override
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <strong class="jxr_keyword">public</strong> &lt;R, P&gt; R accept(TypeVisitor&lt;R, P&gt; visitor, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>          <strong class="jxr_keyword">return</strong> visitor.visitWildcard(<strong class="jxr_keyword">this</strong>, parameter);
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      }
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      @Override
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      @Nullable
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> getExtendsBound() {
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>          <strong class="jxr_keyword">return</strong> extendsBound;
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      }
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      @Override
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      @Nullable
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../net/florianschoppmann/java/reflect/ReflectionTypeMirror.html">ReflectionTypeMirror</a> getSuperBound() {
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          <strong class="jxr_keyword">return</strong> superBound;
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      }
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      @Override
    +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      <strong class="jxr_keyword">public</strong> TypeKind getKind() {
    +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          <strong class="jxr_keyword">return</strong> TypeKind.WILDCARD;
    +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      }
    +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/reflect/package-frame.html b/xref/net/florianschoppmann/java/reflect/package-frame.html
    new file mode 100644
    index 0000000..560a5a5
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/package-frame.html
    @@ -0,0 +1,78 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference Package net.florianschoppmann.java.reflect</title>
    +		<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +
    +		<h3>
    +        	<a href="package-summary.html" target="classFrame">net.florianschoppmann.java.reflect</a>
    +      	</h3>
    +
    +      	<h3>Classes</h3>
    +
    +      	<ul>
    +      		          	<li>
    +            	<a href="AnnotatedConstructImpl.html" target="classFrame">AnnotatedConstructImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ArrayTypeImpl.html" target="classFrame">ArrayTypeImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="DeclaredTypeImpl.html" target="classFrame">DeclaredTypeImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ElementImpl.html" target="classFrame">ElementImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ImmutableList.html" target="classFrame">ImmutableList</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="IntersectionTypeImpl.html" target="classFrame">IntersectionTypeImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="MirrorContext.html" target="classFrame">MirrorContext</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="NameImpl.html" target="classFrame">NameImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="NoTypeImpl.html" target="classFrame">NoTypeImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="NullTypeImpl.html" target="classFrame">NullTypeImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="PrimitiveTypeImpl.html" target="classFrame">PrimitiveTypeImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ReflectionElement.html" target="classFrame">ReflectionElement</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ReflectionParameterizable.html" target="classFrame">ReflectionParameterizable</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ReflectionTypeMirror.html" target="classFrame">ReflectionTypeMirror</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ReflectionTypes.html" target="classFrame">ReflectionTypes</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="TypeElementImpl.html" target="classFrame">TypeElementImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="TypeParameterElementImpl.html" target="classFrame">TypeParameterElementImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="TypeVariableImpl.html" target="classFrame">TypeVariableImpl</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="WildcardTypeImpl.html" target="classFrame">WildcardTypeImpl</a>
    +          	</li>
    +          	      	</ul>
    +
    +	</body>
    +</html>
    \ No newline at end of file
    diff --git a/xref/net/florianschoppmann/java/reflect/package-summary.html b/xref/net/florianschoppmann/java/reflect/package-summary.html
    new file mode 100644
    index 0000000..872b14b
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/reflect/package-summary.html
    @@ -0,0 +1,159 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference Package net.florianschoppmann.java.reflect</title>
    +		<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +		      	<div class="overview">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../overview-summary.html">Overview</a>
    +          		</li>
    +          		<li class="selected">Package</li>
    +        	</ul>
    +      	</div>
    +      	<div class="framenoframe">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../index.html" target="_top">FRAMES</a>
    +          		</li>
    +          		<li>
    +            		<a href="package-summary.html" target="_top">NO FRAMES</a>
    +          		</li>
    +        	</ul>
    +      	</div>
    +		
    +		      	<h2>Package net.florianschoppmann.java.reflect</h2>
    +
    +		<table class="summary">
    +        	<thead>
    +          		<tr>
    +            		<th>Class Summary</th>
    +          		</tr>
    +        	</thead>
    +        	<tbody>
    +        		            	<tr>
    +              		<td>
    +                		<a href="AnnotatedConstructImpl.html" target="classFrame">AnnotatedConstructImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ArrayTypeImpl.html" target="classFrame">ArrayTypeImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="DeclaredTypeImpl.html" target="classFrame">DeclaredTypeImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ElementImpl.html" target="classFrame">ElementImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ImmutableList.html" target="classFrame">ImmutableList</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="IntersectionTypeImpl.html" target="classFrame">IntersectionTypeImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="MirrorContext.html" target="classFrame">MirrorContext</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="NameImpl.html" target="classFrame">NameImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="NoTypeImpl.html" target="classFrame">NoTypeImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="NullTypeImpl.html" target="classFrame">NullTypeImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="PrimitiveTypeImpl.html" target="classFrame">PrimitiveTypeImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ReflectionElement.html" target="classFrame">ReflectionElement</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ReflectionParameterizable.html" target="classFrame">ReflectionParameterizable</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ReflectionTypeMirror.html" target="classFrame">ReflectionTypeMirror</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ReflectionTypes.html" target="classFrame">ReflectionTypes</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="TypeElementImpl.html" target="classFrame">TypeElementImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="TypeParameterElementImpl.html" target="classFrame">TypeParameterElementImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="TypeVariableImpl.html" target="classFrame">TypeVariableImpl</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="WildcardTypeImpl.html" target="classFrame">WildcardTypeImpl</a>
    +              		</td>
    +            	</tr>
    +				        	</tbody>
    +      	</table>
    +		
    +		      	<div class="overview">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../overview-summary.html">Overview</a>
    +          		</li>
    +          		<li class="selected">Package</li>
    +        	</ul>
    +      	</div>
    +      	<div class="framenoframe">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../index.html" target="_top">FRAMES</a>
    +          		</li>
    +          		<li>
    +            		<a href="package-summary.html" target="_top">NO FRAMES</a>
    +          		</li>
    +        	</ul>
    +      	</div>
    +				<hr />
    +		<div id="footer">
    +			Copyright &#169; 2014&#x2013;2015. All rights reserved.
    +		</div>
    +	</body>
    +</html>
    \ No newline at end of file
    diff --git a/xref/net/florianschoppmann/java/type/AbstractTypes.html b/xref/net/florianschoppmann/java/type/AbstractTypes.html
    new file mode 100644
    index 0000000..bce4247
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/type/AbstractTypes.html
    @@ -0,0 +1,1384 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>AbstractTypes xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/type/AbstractTypes.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.type;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.Element;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.ElementKind;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.TypeElement;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.TypeParameterElement;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.ArrayType;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.DeclaredType;
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.NoType;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.NullType;
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.PrimitiveType;
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeKind;
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeMirror;
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeVariable;
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.type.WildcardType;
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <strong class="jxr_keyword">import</strong> javax.lang.model.util.Types;
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <strong class="jxr_keyword">import</strong> java.io.Serializable;
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.Type;
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <strong class="jxr_keyword">import</strong> java.util.Arrays;
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <strong class="jxr_keyword">import</strong> java.util.Collections;
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <strong class="jxr_keyword">import</strong> java.util.HashMap;
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">import</strong> java.util.Iterator;
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  <strong class="jxr_keyword">import</strong> java.util.LinkedHashMap;
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> java.util.LinkedHashSet;
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.util.Set;
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment"> * Abstract skeletal implementation of {@link Types}.</em>
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;This class provides a skeletal implementation of the {@link Types} interface. Specifically, it implements all</em>
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * methods pertaining to §4.10 (subtyping) in the Java Language Specification (JLS). Concrete subclasses are expected to</em>
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> * implement the abstract methods in this class, which are responsible for creating appropriate type-mirror instances.</em>
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment"> * This class does not place any additional constraints on the concrete {@link TypeMirror} and {@link Element}</em>
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment"> * implementations, so mutability and thread-safety are implementation-defined. However, this class crucially relies on</em>
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment"> * the {@code equals} method being well-defined. That is, {@link Element} objects that have equal names and equal</em>
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment"> * enclosing elements must compare equal. Likewise, {@link TypeMirror} objects that contain equal values must compare</em>
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment"> * equal. In particular, multiple instances created by one of the {@code get}-methods must compare equal when the given</em>
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment"> * arguments compare equal.</em>
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;Besides subtype-related methods, this class also provides method</em>
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment"> * {@link #resolveActualTypeArguments(TypeElement, TypeMirror)} for resolving formal type parameters to actual type</em>
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment"> * arguments. For instance, given type {@code List&lt;String&gt;}, this method determines the actual type argument for the</em>
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment"> * formal type parameter of {@code Collection&lt;E&gt;} (that is, {@code String} in this simple example).</em>
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;Unless explicitly stated otherwise, all methods in this class expect non-null arguments. Passing null where not</em>
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment"> * expected will cause a {@link NullPointerException} to be thrown. Implementations typically place additional</em>
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment"> * restrictions on method arguments not captured by the types of the formal parameters (which stem from</em>
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment"> * {@link javax.lang.model} and its subpackages). While the details are implementation-defined, typically this means</em>
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment"> * that arguments must have been crated by the same implementation, or otherwise an {@link IllegalArgumentException}</em>
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment"> * will be thrown. Implementations must override {@link #requireValidType(TypeMirror)} and</em>
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment"> * {@link #requireValidElement(Element)}, as these methods are expected to perform any necessary validation.</em>
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">AbstractTypes</a> <strong class="jxr_keyword">implements</strong> Types {
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> List&lt;TypeKind&gt; REFERENCE_TYPES = Collections.unmodifiableList(Arrays.asList(
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          TypeKind.ARRAY, TypeKind.DECLARED, TypeKind.NULL, TypeKind.TYPEVAR
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      ));
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> DEFAULT_STRING_BUILDER_SIZE = 256;
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">SubstitutionVisitor</a> substitutionVisitor = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">SubstitutionVisitor</a>();
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">ErasureVisitor</a> erasureVisitor = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">ErasureVisitor</a>();
    +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">ToStringVisitor</a> toStringVisitor = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">ToStringVisitor</a>();
    +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">SubtypeVisitor</a> subtypeVisitor = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">SubtypeVisitor</a>();
    +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">DeclaredTypeSubtypeVisitor</a> declaredTypeSubtypeVisitor = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">DeclaredTypeSubtypeVisitor</a>();
    +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  
    +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  <em class="jxr_javadoccomment">     * Verifies that the given {@link Element} is valid for use with this class.</em>
    +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;The meaning of valid is implementation-defined, but typically a valid {@link Element} must have been created</em>
    +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     * by the implementation that belongs to the current {@code AbstractTypes} instance.</em>
    +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     * @param element element</em>
    +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">     * @throws NullPointerException if the argument is null</em>
    +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  <em class="jxr_javadoccomment">     * @throws IllegalArgumentException if the given {@link Element} cannot be used with this class</em>
    +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">void</strong> requireValidElement(Element element);
    +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  
    +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     * Verifies that the given {@link TypeMirror} is valid for use with this class, or that it is {@code null}.</em>
    +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;The meaning of valid is implementation-defined, but typically a valid {@link TypeMirror} must have been</em>
    +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     * created by the implementation that belongs to the current {@code AbstractTypes} instance. A {@code null} argument</em>
    +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  <em class="jxr_javadoccomment">     * is always valid. The rationale is that {@code null} {@link TypeMirror} arguments have a special meaning for some</em>
    +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment">     * methods such as {@link #getWildcardType(TypeMirror, TypeMirror)} or</em>
    +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     * {@link #createTypeVariable(TypeParameterElement, WildcardType)}.</em>
    +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     * @param type type mirror, may be {@code null}</em>
    +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     * @throws IllegalArgumentException if the given {@link TypeMirror} instance is non-null and it cannot be used with</em>
    +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">     *     this class</em>
    +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L95" href="#L95">95</a>      <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">void</strong> requireValidType(@Nullable TypeMirror type);
    +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  
    +<a class="jxr_linenumber" name="L97" href="#L97">97</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  <em class="jxr_javadoccomment">     * Verifies that the given array is non-null and contains valid types that are not null.</em>
    +<a class="jxr_linenumber" name="L99" href="#L99">99</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment">     * @param types array of types</em>
    +<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment">     * @throws NullPointerException if the given array or any of its elements are null</em>
    +<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment">     * @throws IllegalArgumentException if {@link #requireValidType(TypeMirror)} throws an exception for one of the</em>
    +<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment">     *     array elements</em>
    +<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L105" href="#L105">105</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> requireValidTypes(TypeMirror[] types) {
    +<a class="jxr_linenumber" name="L106" href="#L106">106</a>         <strong class="jxr_keyword">for</strong> (TypeMirror typeArg: types) {
    +<a class="jxr_linenumber" name="L107" href="#L107">107</a>             Objects.requireNonNull(typeArg, <span class="jxr_string">"TypeMirror array must not contain null elements."</span>);
    +<a class="jxr_linenumber" name="L108" href="#L108">108</a>             requireValidType(typeArg);
    +<a class="jxr_linenumber" name="L109" href="#L109">109</a>         }
    +<a class="jxr_linenumber" name="L110" href="#L110">110</a>     }
    +<a class="jxr_linenumber" name="L111" href="#L111">111</a> 
    +<a class="jxr_linenumber" name="L112" href="#L112">112</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment">     * Returns a type mirror corresponding to the given Java reflection type.</em>
    +<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Subclasses are required to return the appropriate {@link DeclaredType} instances for the following</em>
    +<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment">     * {@link Class} instances:</em>
    +<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment">     * &lt;ul&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L118" href="#L118">118</a> <em class="jxr_javadoccomment">     *     {@link Object}</em>
    +<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment">     * &lt;/li&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment">     *     {@link Serializable}</em>
    +<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment">     * &lt;/li&gt;&lt;li&gt;</em>
    +<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment">     *     {@link Cloneable}</em>
    +<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment">     * &lt;/li&gt;&lt;/ul&gt;</em>
    +<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Support for other types is not required and implementation-defined.</em>
    +<a class="jxr_linenumber" name="L126" href="#L126">126</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L127" href="#L127">127</a> <em class="jxr_javadoccomment">     * @param type type as represented by Java Reflection API</em>
    +<a class="jxr_linenumber" name="L128" href="#L128">128</a> <em class="jxr_javadoccomment">     * @throws UnsupportedOperationException If the given type is not one of the above {@link Class} objects and</em>
    +<a class="jxr_linenumber" name="L129" href="#L129">129</a> <em class="jxr_javadoccomment">     *     this type-utilities implementation does not support mirroring arbitrary Java reflection types.</em>
    +<a class="jxr_linenumber" name="L130" href="#L130">130</a> <em class="jxr_javadoccomment">     * @return the type mirror corresponding to the given reflection type</em>
    +<a class="jxr_linenumber" name="L131" href="#L131">131</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L132" href="#L132">132</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">abstract</strong> TypeMirror typeMirror(Type type);
    +<a class="jxr_linenumber" name="L133" href="#L133">133</a> 
    +<a class="jxr_linenumber" name="L134" href="#L134">134</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L135" href="#L135">135</a> <em class="jxr_javadoccomment">     * Internal class that contains both the substitution map passed to {@link #substitute(TypeMirror, Map)} and the</em>
    +<a class="jxr_linenumber" name="L136" href="#L136">136</a> <em class="jxr_javadoccomment">     * set of fresh type variables created at the beginning of that method.</em>
    +<a class="jxr_linenumber" name="L137" href="#L137">137</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L138" href="#L138">138</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">Substitutions</a> {
    +<a class="jxr_linenumber" name="L139" href="#L139">139</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;TypeParameterElement, ? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; map;
    +<a class="jxr_linenumber" name="L140" href="#L140">140</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;TypeParameterElement, TypeVariable&gt; freshTypeVariables;
    +<a class="jxr_linenumber" name="L141" href="#L141">141</a> 
    +<a class="jxr_linenumber" name="L142" href="#L142">142</a>         <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">Substitutions</a>(Map&lt;TypeParameterElement, ? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; map,
    +<a class="jxr_linenumber" name="L143" href="#L143">143</a>                 Map&lt;TypeParameterElement, TypeVariable&gt; freshTypeVariables) {
    +<a class="jxr_linenumber" name="L144" href="#L144">144</a>             <strong class="jxr_keyword">this</strong>.map = map;
    +<a class="jxr_linenumber" name="L145" href="#L145">145</a>             <strong class="jxr_keyword">this</strong>.freshTypeVariables = freshTypeVariables;
    +<a class="jxr_linenumber" name="L146" href="#L146">146</a>         }
    +<a class="jxr_linenumber" name="L147" href="#L147">147</a>     }
    +<a class="jxr_linenumber" name="L148" href="#L148">148</a> 
    +<a class="jxr_linenumber" name="L149" href="#L149">149</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L150" href="#L150">150</a> <em class="jxr_javadoccomment">     * Visitor of a type mirror. Returns a new type mirror after performing the substitutions passed as visitor</em>
    +<a class="jxr_linenumber" name="L151" href="#L151">151</a> <em class="jxr_javadoccomment">     * argument.</em>
    +<a class="jxr_linenumber" name="L152" href="#L152">152</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L153" href="#L153">153</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This visitor is only used within this class and only on &lt;em&gt;valid&lt;/em&gt; {@link TypeMirror} instances. Hence, it</em>
    +<a class="jxr_linenumber" name="L154" href="#L154">154</a> <em class="jxr_javadoccomment">     * can be asserted that the visitor parameter is always non-null.</em>
    +<a class="jxr_linenumber" name="L155" href="#L155">155</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L156" href="#L156">156</a> <em class="jxr_javadoccomment">     * @see #substitutionVisitor</em>
    +<a class="jxr_linenumber" name="L157" href="#L157">157</a> <em class="jxr_javadoccomment">     * @see #requireValidType(TypeMirror)</em>
    +<a class="jxr_linenumber" name="L158" href="#L158">158</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L159" href="#L159">159</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">SubstitutionVisitor</a> <strong class="jxr_keyword">extends</strong> ExtendedTypeKindVisitor7&lt;TypeMirror, Substitutions&gt; {
    +<a class="jxr_linenumber" name="L160" href="#L160">160</a>         <strong class="jxr_keyword">private</strong> TypeMirror[] substituteInList(List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; types, <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">Substitutions</a> substitutions) {
    +<a class="jxr_linenumber" name="L161" href="#L161">161</a>             TypeMirror[] substituted = <strong class="jxr_keyword">new</strong> TypeMirror[types.size()];
    +<a class="jxr_linenumber" name="L162" href="#L162">162</a>             <strong class="jxr_keyword">int</strong> i = 0;
    +<a class="jxr_linenumber" name="L163" href="#L163">163</a>             <strong class="jxr_keyword">for</strong> (TypeMirror type: types) {
    +<a class="jxr_linenumber" name="L164" href="#L164">164</a>                 substituted[i] = type.accept(<strong class="jxr_keyword">this</strong>, substitutions);
    +<a class="jxr_linenumber" name="L165" href="#L165">165</a>                 ++i;
    +<a class="jxr_linenumber" name="L166" href="#L166">166</a>             }
    +<a class="jxr_linenumber" name="L167" href="#L167">167</a>             <strong class="jxr_keyword">return</strong> substituted;
    +<a class="jxr_linenumber" name="L168" href="#L168">168</a>         }
    +<a class="jxr_linenumber" name="L169" href="#L169">169</a> 
    +<a class="jxr_linenumber" name="L170" href="#L170">170</a>         @Override
    +<a class="jxr_linenumber" name="L171" href="#L171">171</a>         <strong class="jxr_keyword">public</strong> TypeMirror visitDeclared(DeclaredType declaredType, @Nullable <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">Substitutions</a> substitutions) {
    +<a class="jxr_linenumber" name="L172" href="#L172">172</a>             assert substitutions != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L173" href="#L173">173</a>             TypeMirror enclosingType = declaredType.getEnclosingType();
    +<a class="jxr_linenumber" name="L174" href="#L174">174</a>             TypeElement typeDeclaration = (TypeElement) declaredType.asElement();
    +<a class="jxr_linenumber" name="L175" href="#L175">175</a>             TypeMirror[] substitutedArguments = substituteInList(declaredType.getTypeArguments(), substitutions);
    +<a class="jxr_linenumber" name="L176" href="#L176">176</a>             <strong class="jxr_keyword">if</strong> (enclosingType.getKind() == TypeKind.DECLARED) {
    +<a class="jxr_linenumber" name="L177" href="#L177">177</a>                 <strong class="jxr_keyword">return</strong> getDeclaredType((DeclaredType) enclosingType, typeDeclaration, substitutedArguments);
    +<a class="jxr_linenumber" name="L178" href="#L178">178</a>             } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L179" href="#L179">179</a>                 <strong class="jxr_keyword">return</strong> getDeclaredType(typeDeclaration, substitutedArguments);
    +<a class="jxr_linenumber" name="L180" href="#L180">180</a>             }
    +<a class="jxr_linenumber" name="L181" href="#L181">181</a>         }
    +<a class="jxr_linenumber" name="L182" href="#L182">182</a> 
    +<a class="jxr_linenumber" name="L183" href="#L183">183</a>         @Override
    +<a class="jxr_linenumber" name="L184" href="#L184">184</a>         <strong class="jxr_keyword">public</strong> TypeMirror visitArray(ArrayType arrayType, @Nullable <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">Substitutions</a> substitutions) {
    +<a class="jxr_linenumber" name="L185" href="#L185">185</a>             assert substitutions != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L186" href="#L186">186</a>             <strong class="jxr_keyword">return</strong> getArrayType(arrayType.getComponentType().accept(<strong class="jxr_keyword">this</strong>, substitutions));
    +<a class="jxr_linenumber" name="L187" href="#L187">187</a>         }
    +<a class="jxr_linenumber" name="L188" href="#L188">188</a> 
    +<a class="jxr_linenumber" name="L189" href="#L189">189</a>         @Override
    +<a class="jxr_linenumber" name="L190" href="#L190">190</a>         <strong class="jxr_keyword">public</strong> TypeMirror visitTypeVariable(TypeVariable typeVariable, @Nullable <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">Substitutions</a> substitutions) {
    +<a class="jxr_linenumber" name="L191" href="#L191">191</a>             assert substitutions != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L192" href="#L192">192</a>             TypeParameterElement formalTypeParameter = (TypeParameterElement) typeVariable.asElement();
    +<a class="jxr_linenumber" name="L193" href="#L193">193</a>             @Nullable TypeVariable freshTypeVariable = substitutions.freshTypeVariables.get(formalTypeParameter);
    +<a class="jxr_linenumber" name="L194" href="#L194">194</a>             <strong class="jxr_keyword">if</strong> (freshTypeVariable != <strong class="jxr_keyword">null</strong> &amp;&amp; formalTypeParameter.asType().equals(typeVariable)) {
    +<a class="jxr_linenumber" name="L195" href="#L195">195</a>                 <strong class="jxr_keyword">return</strong> freshTypeVariable;
    +<a class="jxr_linenumber" name="L196" href="#L196">196</a>             }
    +<a class="jxr_linenumber" name="L197" href="#L197">197</a> 
    +<a class="jxr_linenumber" name="L198" href="#L198">198</a>             @Nullable TypeMirror substitution = substitutions.map.get(formalTypeParameter);
    +<a class="jxr_linenumber" name="L199" href="#L199">199</a>             <strong class="jxr_keyword">if</strong> (substitution != <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L200" href="#L200">200</a>                 <strong class="jxr_keyword">return</strong> substitution;
    +<a class="jxr_linenumber" name="L201" href="#L201">201</a>             }
    +<a class="jxr_linenumber" name="L202" href="#L202">202</a> 
    +<a class="jxr_linenumber" name="L203" href="#L203">203</a>             <strong class="jxr_keyword">return</strong> getTypeVariable(
    +<a class="jxr_linenumber" name="L204" href="#L204">204</a>                 formalTypeParameter,
    +<a class="jxr_linenumber" name="L205" href="#L205">205</a>                 typeVariable.getUpperBound().accept(<strong class="jxr_keyword">this</strong>, substitutions),
    +<a class="jxr_linenumber" name="L206" href="#L206">206</a>                 typeVariable.getLowerBound().accept(<strong class="jxr_keyword">this</strong>, substitutions),
    +<a class="jxr_linenumber" name="L207" href="#L207">207</a>                 capturedTypeArgument(typeVariable)
    +<a class="jxr_linenumber" name="L208" href="#L208">208</a>             );
    +<a class="jxr_linenumber" name="L209" href="#L209">209</a>         }
    +<a class="jxr_linenumber" name="L210" href="#L210">210</a> 
    +<a class="jxr_linenumber" name="L211" href="#L211">211</a>         @Override
    +<a class="jxr_linenumber" name="L212" href="#L212">212</a>         <strong class="jxr_keyword">public</strong> TypeMirror visitWildcard(WildcardType wildcardType, @Nullable <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">Substitutions</a> substitutions) {
    +<a class="jxr_linenumber" name="L213" href="#L213">213</a>             assert substitutions != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L214" href="#L214">214</a>             @Nullable TypeMirror extendsBounds = wildcardType.getExtendsBound();
    +<a class="jxr_linenumber" name="L215" href="#L215">215</a>             @Nullable TypeMirror superBound = wildcardType.getSuperBound();
    +<a class="jxr_linenumber" name="L216" href="#L216">216</a> 
    +<a class="jxr_linenumber" name="L217" href="#L217">217</a>             <strong class="jxr_keyword">return</strong> getWildcardType(
    +<a class="jxr_linenumber" name="L218" href="#L218">218</a>                 extendsBounds != <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L219" href="#L219">219</a>                     ? extendsBounds.accept(<strong class="jxr_keyword">this</strong>, substitutions)
    +<a class="jxr_linenumber" name="L220" href="#L220">220</a>                     : <strong class="jxr_keyword">null</strong>,
    +<a class="jxr_linenumber" name="L221" href="#L221">221</a>                 superBound != <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L222" href="#L222">222</a>                     ? superBound.accept(<strong class="jxr_keyword">this</strong>, substitutions)
    +<a class="jxr_linenumber" name="L223" href="#L223">223</a>                     : <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L224" href="#L224">224</a>             );
    +<a class="jxr_linenumber" name="L225" href="#L225">225</a>         }
    +<a class="jxr_linenumber" name="L226" href="#L226">226</a> 
    +<a class="jxr_linenumber" name="L227" href="#L227">227</a>         @Override
    +<a class="jxr_linenumber" name="L228" href="#L228">228</a>         <strong class="jxr_keyword">public</strong> TypeMirror visitIntersection(<a href="../../../../net/florianschoppmann/java/type/IntersectionType.html">IntersectionType</a> intersectionType, @Nullable <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">Substitutions</a> substitutions) {
    +<a class="jxr_linenumber" name="L229" href="#L229">229</a>             assert substitutions != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L230" href="#L230">230</a>             <strong class="jxr_keyword">return</strong> getIntersectionType(substituteInList(intersectionType.getBounds(), substitutions));
    +<a class="jxr_linenumber" name="L231" href="#L231">231</a>         }
    +<a class="jxr_linenumber" name="L232" href="#L232">232</a> 
    +<a class="jxr_linenumber" name="L233" href="#L233">233</a>         @Override
    +<a class="jxr_linenumber" name="L234" href="#L234">234</a>         <strong class="jxr_keyword">protected</strong> TypeMirror defaultAction(TypeMirror type, <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">Substitutions</a> substitutions) {
    +<a class="jxr_linenumber" name="L235" href="#L235">235</a>             <strong class="jxr_keyword">return</strong> type;
    +<a class="jxr_linenumber" name="L236" href="#L236">236</a>         }
    +<a class="jxr_linenumber" name="L237" href="#L237">237</a>     }
    +<a class="jxr_linenumber" name="L238" href="#L238">238</a> 
    +<a class="jxr_linenumber" name="L239" href="#L239">239</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L240" href="#L240">240</a> <em class="jxr_javadoccomment">     * Replaces formal type parameters in the given type.</em>
    +<a class="jxr_linenumber" name="L241" href="#L241">241</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L242" href="#L242">242</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This method requires that {@code type} does not contain transitive references to itself, unless through</em>
    +<a class="jxr_linenumber" name="L243" href="#L243">243</a> <em class="jxr_javadoccomment">     * {@link DeclaredType#asElement()} → {@link TypeElement#asType()} or {@link TypeVariable#asElement()} →</em>
    +<a class="jxr_linenumber" name="L244" href="#L244">244</a> <em class="jxr_javadoccomment">     * {@link TypeParameterElement#asType()}. Otherwise, this method might run into an infinite recursion, resulting in</em>
    +<a class="jxr_linenumber" name="L245" href="#L245">245</a> <em class="jxr_javadoccomment">     * a {@link StackOverflowError}.</em>
    +<a class="jxr_linenumber" name="L246" href="#L246">246</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L247" href="#L247">247</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Moreover, this method requires that any type variable transitively referenced by {@code substitutionMap} must</em>
    +<a class="jxr_linenumber" name="L248" href="#L248">248</a> <em class="jxr_javadoccomment">     * not contain a transitive reference (through {@link TypeVariable#getUpperBound()} or</em>
    +<a class="jxr_linenumber" name="L249" href="#L249">249</a> <em class="jxr_javadoccomment">     * {@link TypeVariable#getLowerBound()}) to itself. Instead, any instance of {@link TypeVariable} (transitively)</em>
    +<a class="jxr_linenumber" name="L250" href="#L250">250</a> <em class="jxr_javadoccomment">     * referenced by a value in {@code substitutionMap} must be the result of {@link TypeParameterElement#asType()}.</em>
    +<a class="jxr_linenumber" name="L251" href="#L251">251</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L252" href="#L252">252</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This method creates a fresh type variable for each formal type parameter that is to be substituted by a type</em>
    +<a class="jxr_linenumber" name="L253" href="#L253">253</a> <em class="jxr_javadoccomment">     * variable for the same formal type parameter. For instance, suppose {@code T extends Object} is a formal type</em>
    +<a class="jxr_linenumber" name="L254" href="#L254">254</a> <em class="jxr_javadoccomment">     * parameter, and {@code substitutionMap} specifies to replace it with the type variable {@code T extends U&lt;T&gt;}. In</em>
    +<a class="jxr_linenumber" name="L255" href="#L255">255</a> <em class="jxr_javadoccomment">     * this case, {@link #createTypeVariable(TypeParameterElement, WildcardType)} will be called with the formal type</em>
    +<a class="jxr_linenumber" name="L256" href="#L256">256</a> <em class="jxr_javadoccomment">     * parameter {@code T extends Object} as (first) argument. Once all fresh types have been created,</em>
    +<a class="jxr_linenumber" name="L257" href="#L257">257</a> <em class="jxr_javadoccomment">     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} will then be called with {@code U&lt;T&gt;} as</em>
    +<a class="jxr_linenumber" name="L258" href="#L258">258</a> <em class="jxr_javadoccomment">     * upper bound, where {@code T} is the fresh type variable {@code T extends U&lt;T&gt;}.</em>
    +<a class="jxr_linenumber" name="L259" href="#L259">259</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L260" href="#L260">260</a> <em class="jxr_javadoccomment">     * @param type type in which the type parameters will be replaced recursively, guaranteed non-null</em>
    +<a class="jxr_linenumber" name="L261" href="#L261">261</a> <em class="jxr_javadoccomment">     * @param substitutionMap mapping from formal type parameters to substituted type, guaranteed non-null</em>
    +<a class="jxr_linenumber" name="L262" href="#L262">262</a> <em class="jxr_javadoccomment">     * @return new port type, guaranteed non-null</em>
    +<a class="jxr_linenumber" name="L263" href="#L263">263</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L264" href="#L264">264</a>     <strong class="jxr_keyword">protected</strong> TypeMirror substitute(TypeMirror type, Map&lt;TypeParameterElement, ? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; substitutionMap) {
    +<a class="jxr_linenumber" name="L265" href="#L265">265</a>         Objects.requireNonNull(type);
    +<a class="jxr_linenumber" name="L266" href="#L266">266</a>         Objects.requireNonNull(substitutionMap);
    +<a class="jxr_linenumber" name="L267" href="#L267">267</a>         requireValidType(type);
    +<a class="jxr_linenumber" name="L268" href="#L268">268</a>         <strong class="jxr_keyword">for</strong> (TypeMirror substitutionType: substitutionMap.values()) {
    +<a class="jxr_linenumber" name="L269" href="#L269">269</a>             Objects.requireNonNull(substitutionType, <span class="jxr_string">"Substitution type cannot be null."</span>);
    +<a class="jxr_linenumber" name="L270" href="#L270">270</a>             requireValidType(substitutionType);
    +<a class="jxr_linenumber" name="L271" href="#L271">271</a>         }
    +<a class="jxr_linenumber" name="L272" href="#L272">272</a> 
    +<a class="jxr_linenumber" name="L273" href="#L273">273</a>         Map&lt;TypeParameterElement, TypeVariable&gt; freshTypeVariables = <strong class="jxr_keyword">new</strong> LinkedHashMap&lt;&gt;();
    +<a class="jxr_linenumber" name="L274" href="#L274">274</a>         <strong class="jxr_keyword">for</strong> (Map.Entry&lt;TypeParameterElement, ? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; entry: substitutionMap.entrySet()) {
    +<a class="jxr_linenumber" name="L275" href="#L275">275</a>             TypeMirror value = entry.getValue();
    +<a class="jxr_linenumber" name="L276" href="#L276">276</a>             <strong class="jxr_keyword">if</strong> (value.getKind() == TypeKind.TYPEVAR) {
    +<a class="jxr_linenumber" name="L277" href="#L277">277</a>                 TypeParameterElement formalTypeParameter = entry.getKey();
    +<a class="jxr_linenumber" name="L278" href="#L278">278</a>                 TypeVariable typeVariable = (TypeVariable) value;
    +<a class="jxr_linenumber" name="L279" href="#L279">279</a>                 <strong class="jxr_keyword">if</strong> (entry.getKey().equals(typeVariable.asElement())) {
    +<a class="jxr_linenumber" name="L280" href="#L280">280</a>                     assert !freshTypeVariables.containsKey(formalTypeParameter);
    +<a class="jxr_linenumber" name="L281" href="#L281">281</a> 
    +<a class="jxr_linenumber" name="L282" href="#L282">282</a>                     freshTypeVariables.put(
    +<a class="jxr_linenumber" name="L283" href="#L283">283</a>                         formalTypeParameter,
    +<a class="jxr_linenumber" name="L284" href="#L284">284</a>                         createTypeVariable(formalTypeParameter, capturedTypeArgument(typeVariable))
    +<a class="jxr_linenumber" name="L285" href="#L285">285</a>                     );
    +<a class="jxr_linenumber" name="L286" href="#L286">286</a>                 }
    +<a class="jxr_linenumber" name="L287" href="#L287">287</a>             }
    +<a class="jxr_linenumber" name="L288" href="#L288">288</a>         }
    +<a class="jxr_linenumber" name="L289" href="#L289">289</a> 
    +<a class="jxr_linenumber" name="L290" href="#L290">290</a>         <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">Substitutions</a> substitutions = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">Substitutions</a>(substitutionMap, freshTypeVariables);
    +<a class="jxr_linenumber" name="L291" href="#L291">291</a>         <strong class="jxr_keyword">for</strong> (Map.Entry&lt;TypeParameterElement, TypeVariable&gt; entry: freshTypeVariables.entrySet()) {
    +<a class="jxr_linenumber" name="L292" href="#L292">292</a>             TypeVariable substitution = (TypeVariable) substitutionMap.get(entry.getKey());
    +<a class="jxr_linenumber" name="L293" href="#L293">293</a>             setTypeVariableBounds(
    +<a class="jxr_linenumber" name="L294" href="#L294">294</a>                 entry.getValue(),
    +<a class="jxr_linenumber" name="L295" href="#L295">295</a>                 substitution.getUpperBound().accept(substitutionVisitor, substitutions),
    +<a class="jxr_linenumber" name="L296" href="#L296">296</a>                 substitution.getLowerBound().accept(substitutionVisitor, substitutions)
    +<a class="jxr_linenumber" name="L297" href="#L297">297</a>             );
    +<a class="jxr_linenumber" name="L298" href="#L298">298</a>         }
    +<a class="jxr_linenumber" name="L299" href="#L299">299</a> 
    +<a class="jxr_linenumber" name="L300" href="#L300">300</a>         <strong class="jxr_keyword">return</strong> type.accept(substitutionVisitor, substitutions);
    +<a class="jxr_linenumber" name="L301" href="#L301">301</a>     }
    +<a class="jxr_linenumber" name="L302" href="#L302">302</a> 
    +<a class="jxr_linenumber" name="L303" href="#L303">303</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L304" href="#L304">304</a> <em class="jxr_javadoccomment">     * Returns the actual type arguments of a type declaration given a subtype (typically with its own actual type</em>
    +<a class="jxr_linenumber" name="L305" href="#L305">305</a> <em class="jxr_javadoccomment">     * arguments).</em>
    +<a class="jxr_linenumber" name="L306" href="#L306">306</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L307" href="#L307">307</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This method "projects" the actual type arguments of {@code subtype}, as well as all actual type arguments of</em>
    +<a class="jxr_linenumber" name="L308" href="#L308">308</a> <em class="jxr_javadoccomment">     * super types in the type hierarchy between {@code typeElement} and {@code subType}, onto the type declaration</em>
    +<a class="jxr_linenumber" name="L309" href="#L309">309</a> <em class="jxr_javadoccomment">     * represented by {@code typeElement}.</em>
    +<a class="jxr_linenumber" name="L310" href="#L310">310</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L311" href="#L311">311</a> <em class="jxr_javadoccomment">     * &lt;p&gt;For example, {@code typeElement} may be the (generic) type declaration {@code Comparable&lt;T&gt;}, and</em>
    +<a class="jxr_linenumber" name="L312" href="#L312">312</a> <em class="jxr_javadoccomment">     * {@code subType} may be the (non-generic) type {@link Integer}. The result in this case would be a singleton list</em>
    +<a class="jxr_linenumber" name="L313" href="#L313">313</a> <em class="jxr_javadoccomment">     * containing the type {@link Integer}.</em>
    +<a class="jxr_linenumber" name="L314" href="#L314">314</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L315" href="#L315">315</a> <em class="jxr_javadoccomment">     * &lt;p&gt;More generally, resolution works as follows: First, the shortest inheritance path from {@code subType} to</em>
    +<a class="jxr_linenumber" name="L316" href="#L316">316</a> <em class="jxr_javadoccomment">     * {@code typeElement} is found. Note that while Java allows multiple inheritance for interfaces, JLS §8.1.5</em>
    +<a class="jxr_linenumber" name="L317" href="#L317">317</a> <em class="jxr_javadoccomment">     * disallows inheriting from the same interface with different type parameters (both directly and transitively).</em>
    +<a class="jxr_linenumber" name="L318" href="#L318">318</a> <em class="jxr_javadoccomment">     * Hence, the shortest path contains all information that is necessary to resolve formal type parameters to actual</em>
    +<a class="jxr_linenumber" name="L319" href="#L319">319</a> <em class="jxr_javadoccomment">     * parameters. This method then propagates the actual type arguments bottom-up along the inheritance path.</em>
    +<a class="jxr_linenumber" name="L320" href="#L320">320</a> <em class="jxr_javadoccomment">     * Note that the inheritance path consists of {@link DeclaredType} instances, and it may consist of generic types,</em>
    +<a class="jxr_linenumber" name="L321" href="#L321">321</a> <em class="jxr_javadoccomment">     * non-generic types, and raw types.</em>
    +<a class="jxr_linenumber" name="L322" href="#L322">322</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L323" href="#L323">323</a> <em class="jxr_javadoccomment">     * &lt;p&gt;If the inheritance path contains a raw type &lt;em&gt;before&lt;/em&gt; the last path element, this method proceeds</em>
    +<a class="jxr_linenumber" name="L324" href="#L324">324</a> <em class="jxr_javadoccomment">     * by using the "prototypical" type returned by {@link Element#asType()} instead. Correspondingly, it is possible</em>
    +<a class="jxr_linenumber" name="L325" href="#L325">325</a> <em class="jxr_javadoccomment">     * that the returned list may contain type variables from a type declaration along the inheritance path. However, if</em>
    +<a class="jxr_linenumber" name="L326" href="#L326">326</a> <em class="jxr_javadoccomment">     * the &lt;em&gt;last&lt;/em&gt; inheritance path element is a raw type, the returned list will be empty. Otherwise, if a</em>
    +<a class="jxr_linenumber" name="L327" href="#L327">327</a> <em class="jxr_javadoccomment">     * non-null non-empty {@link List} is returned, it is guaranteed to have the same number of elements as</em>
    +<a class="jxr_linenumber" name="L328" href="#L328">328</a> <em class="jxr_javadoccomment">     * {@code typeElement.getTypeParameters()}.</em>
    +<a class="jxr_linenumber" name="L329" href="#L329">329</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L330" href="#L330">330</a> <em class="jxr_javadoccomment">     * @param typeElement type declaration</em>
    +<a class="jxr_linenumber" name="L331" href="#L331">331</a> <em class="jxr_javadoccomment">     * @param subType potential subtype of {@code typeElement}, must be a non-generic type declaration, raw type,</em>
    +<a class="jxr_linenumber" name="L332" href="#L332">332</a> <em class="jxr_javadoccomment">     *     generic type declaration, or parameterized type</em>
    +<a class="jxr_linenumber" name="L333" href="#L333">333</a> <em class="jxr_javadoccomment">     * @return actual type arguments for the formal parameters of {@code typeElement} (empty list if the &lt;em&gt;last&lt;/em&gt;</em>
    +<a class="jxr_linenumber" name="L334" href="#L334">334</a> <em class="jxr_javadoccomment">     *     path element in the inheritance path from {@code subType} to {@code typeElement} is a raw type), or</em>
    +<a class="jxr_linenumber" name="L335" href="#L335">335</a> <em class="jxr_javadoccomment">     *     {@code null} if {@code subType} is not a subtype of {@code typeElement}</em>
    +<a class="jxr_linenumber" name="L336" href="#L336">336</a> <em class="jxr_javadoccomment">     * @throws IllegalArgumentException if the arguments do not satisfy the constraints mentioned above</em>
    +<a class="jxr_linenumber" name="L337" href="#L337">337</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L338" href="#L338">338</a>     @Nullable
    +<a class="jxr_linenumber" name="L339" href="#L339">339</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; resolveActualTypeArguments(TypeElement typeElement, TypeMirror subType) {
    +<a class="jxr_linenumber" name="L340" href="#L340">340</a>         requireValidElement(Objects.requireNonNull(typeElement));
    +<a class="jxr_linenumber" name="L341" href="#L341">341</a>         requireValidType(Objects.requireNonNull(subType));
    +<a class="jxr_linenumber" name="L342" href="#L342">342</a> 
    +<a class="jxr_linenumber" name="L343" href="#L343">343</a>         <strong class="jxr_keyword">if</strong> (subType.getKind() != TypeKind.DECLARED) {
    +<a class="jxr_linenumber" name="L344" href="#L344">344</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L345" href="#L345">345</a>         }
    +<a class="jxr_linenumber" name="L346" href="#L346">346</a> 
    +<a class="jxr_linenumber" name="L347" href="#L347">347</a>         DeclaredType declaredSubType = (DeclaredType) subType;
    +<a class="jxr_linenumber" name="L348" href="#L348">348</a> 
    +<a class="jxr_linenumber" name="L349" href="#L349">349</a>         <em class="jxr_comment">// getShortestPathToSuperType() will throw an exception if subType does not satisfy the constraints mentioned</em>
    +<a class="jxr_linenumber" name="L350" href="#L350">350</a>         <em class="jxr_comment">// above.</em>
    +<a class="jxr_linenumber" name="L351" href="#L351">351</a>         @Nullable List&lt;DeclaredType&gt; path = getShortestPathToSuperType(typeElement, declaredSubType);
    +<a class="jxr_linenumber" name="L352" href="#L352">352</a>         <strong class="jxr_keyword">if</strong> (path == <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L353" href="#L353">353</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L354" href="#L354">354</a>         }
    +<a class="jxr_linenumber" name="L355" href="#L355">355</a> 
    +<a class="jxr_linenumber" name="L356" href="#L356">356</a>         <em class="jxr_comment">// Early exit if there is nothing to resolve. However, we must not move this early exit any earlier, because</em>
    +<a class="jxr_linenumber" name="L357" href="#L357">357</a>         <em class="jxr_comment">// we do want to return null if subType is not a subtype of typeElement.</em>
    +<a class="jxr_linenumber" name="L358" href="#L358">358</a>         <strong class="jxr_keyword">if</strong> (typeElement.getTypeParameters().isEmpty()) {
    +<a class="jxr_linenumber" name="L359" href="#L359">359</a>             <strong class="jxr_keyword">return</strong> Collections.emptyList();
    +<a class="jxr_linenumber" name="L360" href="#L360">360</a>         }
    +<a class="jxr_linenumber" name="L361" href="#L361">361</a> 
    +<a class="jxr_linenumber" name="L362" href="#L362">362</a>         Iterator&lt;DeclaredType&gt; pathIterator = path.iterator();
    +<a class="jxr_linenumber" name="L363" href="#L363">363</a>         DeclaredType current = pathIterator.next();
    +<a class="jxr_linenumber" name="L364" href="#L364">364</a>         <strong class="jxr_keyword">while</strong> (pathIterator.hasNext()) {
    +<a class="jxr_linenumber" name="L365" href="#L365">365</a>             TypeElement currentTypeElement = (TypeElement) current.asElement();
    +<a class="jxr_linenumber" name="L366" href="#L366">366</a> 
    +<a class="jxr_linenumber" name="L367" href="#L367">367</a>             <em class="jxr_comment">// Check whether "current" is a raw type. This may happen in the first loop iteration if subType is a raw</em>
    +<a class="jxr_linenumber" name="L368" href="#L368">368</a>             <em class="jxr_comment">// type, or in subsequent iterations if the type that was previously "current" (during the last iteration</em>
    +<a class="jxr_linenumber" name="L369" href="#L369">369</a>             <em class="jxr_comment">// of the for-loop) derived from a raw type. If yes, use instead the "prototypical" type returned by</em>
    +<a class="jxr_linenumber" name="L370" href="#L370">370</a>             <em class="jxr_comment">// Element#asType().</em>
    +<a class="jxr_linenumber" name="L371" href="#L371">371</a>             <strong class="jxr_keyword">if</strong> (current.getTypeArguments().isEmpty() &amp;&amp; !currentTypeElement.getTypeParameters().isEmpty()) {
    +<a class="jxr_linenumber" name="L372" href="#L372">372</a>                 current = (DeclaredType) currentTypeElement.asType();
    +<a class="jxr_linenumber" name="L373" href="#L373">373</a>             }
    +<a class="jxr_linenumber" name="L374" href="#L374">374</a> 
    +<a class="jxr_linenumber" name="L375" href="#L375">375</a>             List&lt;? <strong class="jxr_keyword">extends</strong> TypeParameterElement&gt; currentFormalParameters = currentTypeElement.getTypeParameters();
    +<a class="jxr_linenumber" name="L376" href="#L376">376</a>             List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; currentActualParameters = current.getTypeArguments();
    +<a class="jxr_linenumber" name="L377" href="#L377">377</a> 
    +<a class="jxr_linenumber" name="L378" href="#L378">378</a>             Map&lt;TypeParameterElement, TypeMirror&gt; currentFormalToActual = <strong class="jxr_keyword">new</strong> LinkedHashMap&lt;&gt;();
    +<a class="jxr_linenumber" name="L379" href="#L379">379</a>             <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> index = 0; index &lt; currentFormalParameters.size(); ++index) {
    +<a class="jxr_linenumber" name="L380" href="#L380">380</a>                 currentFormalToActual.put(currentFormalParameters.get(index), currentActualParameters.get(index));
    +<a class="jxr_linenumber" name="L381" href="#L381">381</a>             }
    +<a class="jxr_linenumber" name="L382" href="#L382">382</a> 
    +<a class="jxr_linenumber" name="L383" href="#L383">383</a>             current = (DeclaredType) substitute(pathIterator.next(), currentFormalToActual);
    +<a class="jxr_linenumber" name="L384" href="#L384">384</a>         }
    +<a class="jxr_linenumber" name="L385" href="#L385">385</a>         <strong class="jxr_keyword">return</strong> current.getTypeArguments();
    +<a class="jxr_linenumber" name="L386" href="#L386">386</a>     }
    +<a class="jxr_linenumber" name="L387" href="#L387">387</a> 
    +<a class="jxr_linenumber" name="L388" href="#L388">388</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L389" href="#L389">389</a> <em class="jxr_javadoccomment">     * Visitor of a type mirror. Returns whether the visited type mirror is a subtype of the visitor argument (of type</em>
    +<a class="jxr_linenumber" name="L390" href="#L390">390</a> <em class="jxr_javadoccomment">     * {@link DeclaredType}).</em>
    +<a class="jxr_linenumber" name="L391" href="#L391">391</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L392" href="#L392">392</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This visitor is only used within this class and only on &lt;em&gt;valid&lt;/em&gt; {@link TypeMirror} instances. Hence, it</em>
    +<a class="jxr_linenumber" name="L393" href="#L393">393</a> <em class="jxr_javadoccomment">     * can be asserted that the visitor parameter is always non-null.</em>
    +<a class="jxr_linenumber" name="L394" href="#L394">394</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L395" href="#L395">395</a> <em class="jxr_javadoccomment">     * @see #declaredTypeSubtypeVisitor</em>
    +<a class="jxr_linenumber" name="L396" href="#L396">396</a> <em class="jxr_javadoccomment">     * @see #requireValidType(TypeMirror)</em>
    +<a class="jxr_linenumber" name="L397" href="#L397">397</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L398" href="#L398">398</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">DeclaredTypeSubtypeVisitor</a> <strong class="jxr_keyword">extends</strong> ExtendedTypeKindVisitor7&lt;Boolean, DeclaredType&gt; {
    +<a class="jxr_linenumber" name="L399" href="#L399">399</a>         <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">DeclaredTypeSubtypeVisitor</a>() {
    +<a class="jxr_linenumber" name="L400" href="#L400">400</a>             <strong class="jxr_keyword">super</strong>(false);
    +<a class="jxr_linenumber" name="L401" href="#L401">401</a>         }
    +<a class="jxr_linenumber" name="L402" href="#L402">402</a> 
    +<a class="jxr_linenumber" name="L403" href="#L403">403</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L404" href="#L404">404</a> <em class="jxr_javadoccomment">         * Returns whether the first declared type is a subtype of the second declared type.</em>
    +<a class="jxr_linenumber" name="L405" href="#L405">405</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L406" href="#L406">406</a> <em class="jxr_javadoccomment">         * &lt;p&gt;This method proceeds by computing the actual type arguments when {@code subType} is projected onto the</em>
    +<a class="jxr_linenumber" name="L407" href="#L407">407</a> <em class="jxr_javadoccomment">         * type declaration corresponding to {@code superType}. It then tests if all actual type arguments of</em>
    +<a class="jxr_linenumber" name="L408" href="#L408">408</a> <em class="jxr_javadoccomment">         * {@code subType} are &lt;em&gt;contained&lt;/em&gt; in those of {@code superType}.</em>
    +<a class="jxr_linenumber" name="L409" href="#L409">409</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L410" href="#L410">410</a>         @Override
    +<a class="jxr_linenumber" name="L411" href="#L411">411</a>         <strong class="jxr_keyword">public</strong> Boolean visitDeclared(DeclaredType subType, @Nullable DeclaredType superType) {
    +<a class="jxr_linenumber" name="L412" href="#L412">412</a>             assert superType != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L413" href="#L413">413</a>             DeclaredType actualSubType = subType;
    +<a class="jxr_linenumber" name="L414" href="#L414">414</a> 
    +<a class="jxr_linenumber" name="L415" href="#L415">415</a>             <em class="jxr_comment">// First test if there subType has at least one wildcard type argument. In that case, we need to perform a</em>
    +<a class="jxr_linenumber" name="L416" href="#L416">416</a>             <em class="jxr_comment">// capture conversion first.</em>
    +<a class="jxr_linenumber" name="L417" href="#L417">417</a>             <em class="jxr_comment">// Note that this is the right place to do capture conversion: JLS §8.1.4 and §9.1.3 state about class types</em>
    +<a class="jxr_linenumber" name="L418" href="#L418">418</a>             <em class="jxr_comment">// and interfaces type listed in the extends or implements clause of a class/interface declaration:</em>
    +<a class="jxr_linenumber" name="L419" href="#L419">419</a>             <em class="jxr_comment">// - "If the ClassType has type arguments, it must denote a well-formed parameterized type (§4.5), and none</em>
    +<a class="jxr_linenumber" name="L420" href="#L420">420</a>             <em class="jxr_comment">// of the type arguments may be wildcard type arguments, or a compile-time error occurs."</em>
    +<a class="jxr_linenumber" name="L421" href="#L421">421</a>             <em class="jxr_comment">// - "If an InterfaceType has type arguments, it must denote a well-formed parameterized type (§4.5), and</em>
    +<a class="jxr_linenumber" name="L422" href="#L422">422</a>             <em class="jxr_comment">// none of the type arguments may be wildcard type arguments, or a compile-time error occurs."</em>
    +<a class="jxr_linenumber" name="L423" href="#L423">423</a>             <em class="jxr_comment">// Hence, wildcards do not appear on the "inheritance path" between subType and superType.</em>
    +<a class="jxr_linenumber" name="L424" href="#L424">424</a>             <strong class="jxr_keyword">for</strong> (TypeMirror subTypeArgument: subType.getTypeArguments()) {
    +<a class="jxr_linenumber" name="L425" href="#L425">425</a>                 <strong class="jxr_keyword">if</strong> (subTypeArgument.getKind() == TypeKind.WILDCARD) {
    +<a class="jxr_linenumber" name="L426" href="#L426">426</a>                     actualSubType = (DeclaredType) capture(subType);
    +<a class="jxr_linenumber" name="L427" href="#L427">427</a>                     <strong class="jxr_keyword">break</strong>;
    +<a class="jxr_linenumber" name="L428" href="#L428">428</a>                 }
    +<a class="jxr_linenumber" name="L429" href="#L429">429</a>             }
    +<a class="jxr_linenumber" name="L430" href="#L430">430</a> 
    +<a class="jxr_linenumber" name="L431" href="#L431">431</a>             <em class="jxr_comment">// Resolve the actual type parameters of subType when projected onto the superType</em>
    +<a class="jxr_linenumber" name="L432" href="#L432">432</a>             TypeElement superTypeDeclaration = (TypeElement) superType.asElement();
    +<a class="jxr_linenumber" name="L433" href="#L433">433</a>             @Nullable List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; projectedTypeArguments
    +<a class="jxr_linenumber" name="L434" href="#L434">434</a>                 = resolveActualTypeArguments(superTypeDeclaration, actualSubType);
    +<a class="jxr_linenumber" name="L435" href="#L435">435</a> 
    +<a class="jxr_linenumber" name="L436" href="#L436">436</a>             <strong class="jxr_keyword">if</strong> (projectedTypeArguments == <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L437" href="#L437">437</a>                 <em class="jxr_comment">// subType is not a subtype of the type declaration</em>
    +<a class="jxr_linenumber" name="L438" href="#L438">438</a>                 <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L439" href="#L439">439</a>             }
    +<a class="jxr_linenumber" name="L440" href="#L440">440</a> 
    +<a class="jxr_linenumber" name="L441" href="#L441">441</a>             List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; superTypeArguments = superType.getTypeArguments();
    +<a class="jxr_linenumber" name="L442" href="#L442">442</a>             <strong class="jxr_keyword">if</strong> (projectedTypeArguments.isEmpty() &amp;&amp; !superTypeArguments.isEmpty()) {
    +<a class="jxr_linenumber" name="L443" href="#L443">443</a>                 <em class="jxr_comment">// the projection of subType onto superType resulted in a raw type, which is neither a subtype of any</em>
    +<a class="jxr_linenumber" name="L444" href="#L444">444</a>                 <em class="jxr_comment">// parametrized type of the generic type declaration of superType, nor the generic type declaration</em>
    +<a class="jxr_linenumber" name="L445" href="#L445">445</a>                 <em class="jxr_comment">// itself</em>
    +<a class="jxr_linenumber" name="L446" href="#L446">446</a>                 <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L447" href="#L447">447</a>             }
    +<a class="jxr_linenumber" name="L448" href="#L448">448</a> 
    +<a class="jxr_linenumber" name="L449" href="#L449">449</a>             <em class="jxr_comment">// Note that superType could be a raw type, in which case superTypeArguments is empty. In that case, the</em>
    +<a class="jxr_linenumber" name="L450" href="#L450">450</a>             <em class="jxr_comment">// loop would not be executed at all.</em>
    +<a class="jxr_linenumber" name="L451" href="#L451">451</a>             Iterator&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; projectedTypeArgumentsIterator = projectedTypeArguments.iterator();
    +<a class="jxr_linenumber" name="L452" href="#L452">452</a>             <strong class="jxr_keyword">for</strong> (TypeMirror to: superTypeArguments) {
    +<a class="jxr_linenumber" name="L453" href="#L453">453</a>                 TypeMirror from = projectedTypeArgumentsIterator.next();
    +<a class="jxr_linenumber" name="L454" href="#L454">454</a>                 <strong class="jxr_keyword">if</strong> (!contains(to, from)) {
    +<a class="jxr_linenumber" name="L455" href="#L455">455</a>                     <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L456" href="#L456">456</a>                 }
    +<a class="jxr_linenumber" name="L457" href="#L457">457</a>             }
    +<a class="jxr_linenumber" name="L458" href="#L458">458</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L459" href="#L459">459</a>         }
    +<a class="jxr_linenumber" name="L460" href="#L460">460</a> 
    +<a class="jxr_linenumber" name="L461" href="#L461">461</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L462" href="#L462">462</a> <em class="jxr_javadoccomment">         * Returns whether the array type is a subtype of the declared type.</em>
    +<a class="jxr_linenumber" name="L463" href="#L463">463</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L464" href="#L464">464</a> <em class="jxr_javadoccomment">         * &lt;p&gt;According to JLS §4.10.3, an array type can only be a subtype of a declared type if the latter represents</em>
    +<a class="jxr_linenumber" name="L465" href="#L465">465</a> <em class="jxr_javadoccomment">         * one of {@link Object}, {@link Cloneable}, or {@link Serializable}.</em>
    +<a class="jxr_linenumber" name="L466" href="#L466">466</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L467" href="#L467">467</a>         @Override
    +<a class="jxr_linenumber" name="L468" href="#L468">468</a>         <strong class="jxr_keyword">public</strong> Boolean visitArray(ArrayType subType, @Nullable DeclaredType superType) {
    +<a class="jxr_linenumber" name="L469" href="#L469">469</a>             assert superType != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L470" href="#L470">470</a>             <strong class="jxr_keyword">return</strong> typeMirror(Object.<strong class="jxr_keyword">class</strong>).equals(superType)
    +<a class="jxr_linenumber" name="L471" href="#L471">471</a>                 || typeMirror(Cloneable.<strong class="jxr_keyword">class</strong>).equals(superType)
    +<a class="jxr_linenumber" name="L472" href="#L472">472</a>                 || typeMirror(Serializable.<strong class="jxr_keyword">class</strong>).equals(superType);
    +<a class="jxr_linenumber" name="L473" href="#L473">473</a>         }
    +<a class="jxr_linenumber" name="L474" href="#L474">474</a> 
    +<a class="jxr_linenumber" name="L475" href="#L475">475</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L476" href="#L476">476</a> <em class="jxr_javadoccomment">         * Returns whether the type variable is a subtype of the declared type.</em>
    +<a class="jxr_linenumber" name="L477" href="#L477">477</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L478" href="#L478">478</a> <em class="jxr_javadoccomment">         * &lt;p&gt;According to JLS §4.10.2, the direct supertypes of a type variable are the types listed in its bound.</em>
    +<a class="jxr_linenumber" name="L479" href="#L479">479</a> <em class="jxr_javadoccomment">         * Hence, this method returns true if {@link TypeVariable#getUpperBound()} is a subtype of {@code superType}.</em>
    +<a class="jxr_linenumber" name="L480" href="#L480">480</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L481" href="#L481">481</a>         @Override
    +<a class="jxr_linenumber" name="L482" href="#L482">482</a>         <strong class="jxr_keyword">public</strong> Boolean visitTypeVariable(TypeVariable subType, @Nullable DeclaredType superType) {
    +<a class="jxr_linenumber" name="L483" href="#L483">483</a>             assert superType != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L484" href="#L484">484</a>             <strong class="jxr_keyword">return</strong> isSubtype(subType.getUpperBound(), superType);
    +<a class="jxr_linenumber" name="L485" href="#L485">485</a>         }
    +<a class="jxr_linenumber" name="L486" href="#L486">486</a> 
    +<a class="jxr_linenumber" name="L487" href="#L487">487</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L488" href="#L488">488</a> <em class="jxr_javadoccomment">         * Returns whether the intersection type is a subtype of the declared type.</em>
    +<a class="jxr_linenumber" name="L489" href="#L489">489</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L490" href="#L490">490</a> <em class="jxr_javadoccomment">         * &lt;p&gt;According to JLS §4.10.2, the direct supertypes of an intersection type {@code T_1 &amp; ... T_n} are</em>
    +<a class="jxr_linenumber" name="L491" href="#L491">491</a> <em class="jxr_javadoccomment">         * {@code T_1}, ..., {@code T_n}. Hence, this method returns true if at least one of</em>
    +<a class="jxr_linenumber" name="L492" href="#L492">492</a> <em class="jxr_javadoccomment">         * {@link IntersectionType#getBounds()} is a subtype of {@code superType}.</em>
    +<a class="jxr_linenumber" name="L493" href="#L493">493</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L494" href="#L494">494</a>         @Override
    +<a class="jxr_linenumber" name="L495" href="#L495">495</a>         <strong class="jxr_keyword">public</strong> Boolean visitIntersection(<a href="../../../../net/florianschoppmann/java/type/IntersectionType.html">IntersectionType</a> subType, @Nullable DeclaredType superType) {
    +<a class="jxr_linenumber" name="L496" href="#L496">496</a>             assert superType != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L497" href="#L497">497</a>             <strong class="jxr_keyword">for</strong> (TypeMirror bound: subType.getBounds()) {
    +<a class="jxr_linenumber" name="L498" href="#L498">498</a>                 <strong class="jxr_keyword">if</strong> (isSubtype(bound, superType)) {
    +<a class="jxr_linenumber" name="L499" href="#L499">499</a>                     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L500" href="#L500">500</a>                 }
    +<a class="jxr_linenumber" name="L501" href="#L501">501</a>             }
    +<a class="jxr_linenumber" name="L502" href="#L502">502</a>             <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L503" href="#L503">503</a>         }
    +<a class="jxr_linenumber" name="L504" href="#L504">504</a>     }
    +<a class="jxr_linenumber" name="L505" href="#L505">505</a> 
    +<a class="jxr_linenumber" name="L506" href="#L506">506</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L507" href="#L507">507</a> <em class="jxr_javadoccomment">     * Visitor of a type mirror. Returns whether the visited type mirror is a supertype of the visitor argument.</em>
    +<a class="jxr_linenumber" name="L508" href="#L508">508</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L509" href="#L509">509</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This visitor does not have to deal with the null-type, which has been dealt with before. It has to make a</em>
    +<a class="jxr_linenumber" name="L510" href="#L510">510</a> <em class="jxr_javadoccomment">     * decision for {@link ArrayType}, {@link DeclaredType}, {@link PrimitiveType}, and {@link TypeVariable}.</em>
    +<a class="jxr_linenumber" name="L511" href="#L511">511</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L512" href="#L512">512</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Java 8 introduces {@code IntersectionType}, but this code currently uses Java 7. Moreover, there are other</em>
    +<a class="jxr_linenumber" name="L513" href="#L513">513</a> <em class="jxr_javadoccomment">     * types that are currently not supported, such as {@link javax.lang.model.type.UnionType}. Finally,</em>
    +<a class="jxr_linenumber" name="L514" href="#L514">514</a> <em class="jxr_javadoccomment">     * {@link WildcardType} is not a type, but only a type argument, so it is not necessary to be dealt with here.</em>
    +<a class="jxr_linenumber" name="L515" href="#L515">515</a> <em class="jxr_javadoccomment">     * Likewise, {@link NoType} is not used to model proper types, but only empty bounds, non-existence of interface</em>
    +<a class="jxr_linenumber" name="L516" href="#L516">516</a> <em class="jxr_javadoccomment">     * super classes, etc.</em>
    +<a class="jxr_linenumber" name="L517" href="#L517">517</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L518" href="#L518">518</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This visitor is only used within this class and only on &lt;em&gt;valid&lt;/em&gt; {@link TypeMirror} instances. Hence, it</em>
    +<a class="jxr_linenumber" name="L519" href="#L519">519</a> <em class="jxr_javadoccomment">     * can be asserted that the visitor parameter is always non-null.</em>
    +<a class="jxr_linenumber" name="L520" href="#L520">520</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L521" href="#L521">521</a> <em class="jxr_javadoccomment">     * @see #subtypeVisitor</em>
    +<a class="jxr_linenumber" name="L522" href="#L522">522</a> <em class="jxr_javadoccomment">     * @see #requireValidType(TypeMirror)</em>
    +<a class="jxr_linenumber" name="L523" href="#L523">523</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L524" href="#L524">524</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">SubtypeVisitor</a> <strong class="jxr_keyword">extends</strong> ExtendedTypeKindVisitor7&lt;Boolean, TypeMirror&gt; {
    +<a class="jxr_linenumber" name="L525" href="#L525">525</a>         <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">SubtypeVisitor</a>() {
    +<a class="jxr_linenumber" name="L526" href="#L526">526</a>             <strong class="jxr_keyword">super</strong>(false);
    +<a class="jxr_linenumber" name="L527" href="#L527">527</a>         }
    +<a class="jxr_linenumber" name="L528" href="#L528">528</a> 
    +<a class="jxr_linenumber" name="L529" href="#L529">529</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L530" href="#L530">530</a> <em class="jxr_javadoccomment">         * Returns whether the array type is a super type of the type given as second argument.</em>
    +<a class="jxr_linenumber" name="L531" href="#L531">531</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L532" href="#L532">532</a> <em class="jxr_javadoccomment">         * &lt;p&gt;According to JLS §4.10.3, array component types are covariant; for instance, {@code Integer[]} is a proper</em>
    +<a class="jxr_linenumber" name="L533" href="#L533">533</a> <em class="jxr_javadoccomment">         * subtype of {@code Number[]}. Moreover, all subtypes of an array type are again array types. Hence, this</em>
    +<a class="jxr_linenumber" name="L534" href="#L534">534</a> <em class="jxr_javadoccomment">         * method simply reduces the problem to testing if {@code subType} is also an array type and then applying</em>
    +<a class="jxr_linenumber" name="L535" href="#L535">535</a> <em class="jxr_javadoccomment">         * {@link AbstractTypes#isSubtype(TypeMirror, TypeMirror)} to the component types.</em>
    +<a class="jxr_linenumber" name="L536" href="#L536">536</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L537" href="#L537">537</a>         @Override
    +<a class="jxr_linenumber" name="L538" href="#L538">538</a>         <strong class="jxr_keyword">public</strong> Boolean visitArray(ArrayType superType, @Nullable TypeMirror subType) {
    +<a class="jxr_linenumber" name="L539" href="#L539">539</a>             assert subType != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L540" href="#L540">540</a>             <strong class="jxr_keyword">return</strong> subType.getKind() == TypeKind.ARRAY
    +<a class="jxr_linenumber" name="L541" href="#L541">541</a>                 &amp;&amp; isSubtype(((ArrayType) subType).getComponentType(), superType.getComponentType());
    +<a class="jxr_linenumber" name="L542" href="#L542">542</a>         }
    +<a class="jxr_linenumber" name="L543" href="#L543">543</a> 
    +<a class="jxr_linenumber" name="L544" href="#L544">544</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L545" href="#L545">545</a> <em class="jxr_javadoccomment">         * Returns whether the declared type is a super type of the type given as second argument.</em>
    +<a class="jxr_linenumber" name="L546" href="#L546">546</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L547" href="#L547">547</a> <em class="jxr_javadoccomment">         * &lt;p&gt;This method has {@link DeclaredTypeSubtypeVisitor} visit {@code subType}.</em>
    +<a class="jxr_linenumber" name="L548" href="#L548">548</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L549" href="#L549">549</a>         @Override
    +<a class="jxr_linenumber" name="L550" href="#L550">550</a>         <strong class="jxr_keyword">public</strong> Boolean visitDeclared(DeclaredType superType, @Nullable TypeMirror subType) {
    +<a class="jxr_linenumber" name="L551" href="#L551">551</a>             assert subType != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L552" href="#L552">552</a>             <strong class="jxr_keyword">return</strong> subType.accept(declaredTypeSubtypeVisitor, superType);
    +<a class="jxr_linenumber" name="L553" href="#L553">553</a>         }
    +<a class="jxr_linenumber" name="L554" href="#L554">554</a> 
    +<a class="jxr_linenumber" name="L555" href="#L555">555</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List&lt;TypeKind&gt; numericKindEnumValues = Collections.unmodifiableList(Arrays.asList(
    +<a class="jxr_linenumber" name="L556" href="#L556">556</a>             TypeKind.DOUBLE, TypeKind.FLOAT, TypeKind.LONG, TypeKind.INT, TypeKind.SHORT, TypeKind.BYTE
    +<a class="jxr_linenumber" name="L557" href="#L557">557</a>         ));
    +<a class="jxr_linenumber" name="L558" href="#L558">558</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> intIndex = numericKindEnumValues.indexOf(TypeKind.INT);
    +<a class="jxr_linenumber" name="L559" href="#L559">559</a> 
    +<a class="jxr_linenumber" name="L560" href="#L560">560</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L561" href="#L561">561</a> <em class="jxr_javadoccomment">         * Returns whether the primitive type is a supertype of the given type.</em>
    +<a class="jxr_linenumber" name="L562" href="#L562">562</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L563" href="#L563">563</a>         @Override
    +<a class="jxr_linenumber" name="L564" href="#L564">564</a>         <strong class="jxr_keyword">public</strong> Boolean visitPrimitive(PrimitiveType superType, @Nullable TypeMirror subType) {
    +<a class="jxr_linenumber" name="L565" href="#L565">565</a>             assert subType != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L566" href="#L566">566</a>             <strong class="jxr_keyword">if</strong> (!subType.getKind().isPrimitive()) {
    +<a class="jxr_linenumber" name="L567" href="#L567">567</a>                 <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L568" href="#L568">568</a>             }
    +<a class="jxr_linenumber" name="L569" href="#L569">569</a> 
    +<a class="jxr_linenumber" name="L570" href="#L570">570</a>             <strong class="jxr_keyword">int</strong> superTypeIndex = numericKindEnumValues.indexOf(superType.getKind());
    +<a class="jxr_linenumber" name="L571" href="#L571">571</a>             <strong class="jxr_keyword">int</strong> subTypeIndex = numericKindEnumValues.indexOf(subType.getKind());
    +<a class="jxr_linenumber" name="L572" href="#L572">572</a>             <strong class="jxr_keyword">return</strong> (subType.getKind() == TypeKind.CHAR &amp;&amp; 0 &lt;= superTypeIndex &amp;&amp; superTypeIndex &lt;= intIndex)
    +<a class="jxr_linenumber" name="L573" href="#L573">573</a>                 || (0 &lt;= superTypeIndex &amp;&amp; superTypeIndex &lt;= subTypeIndex);
    +<a class="jxr_linenumber" name="L574" href="#L574">574</a>         }
    +<a class="jxr_linenumber" name="L575" href="#L575">575</a> 
    +<a class="jxr_linenumber" name="L576" href="#L576">576</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L577" href="#L577">577</a> <em class="jxr_javadoccomment">         * Returns whether the type variable is a super type of the given type.</em>
    +<a class="jxr_linenumber" name="L578" href="#L578">578</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L579" href="#L579">579</a> <em class="jxr_javadoccomment">         * &lt;p&gt;A type variable is only a supertype of its lower bound.</em>
    +<a class="jxr_linenumber" name="L580" href="#L580">580</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L581" href="#L581">581</a>         @Override
    +<a class="jxr_linenumber" name="L582" href="#L582">582</a>         <strong class="jxr_keyword">public</strong> Boolean visitTypeVariable(TypeVariable superType, @Nullable TypeMirror subType) {
    +<a class="jxr_linenumber" name="L583" href="#L583">583</a>             assert subType != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L584" href="#L584">584</a>             <strong class="jxr_keyword">return</strong> isSameType(superType.getLowerBound(), subType);
    +<a class="jxr_linenumber" name="L585" href="#L585">585</a>         }
    +<a class="jxr_linenumber" name="L586" href="#L586">586</a> 
    +<a class="jxr_linenumber" name="L587" href="#L587">587</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L588" href="#L588">588</a> <em class="jxr_javadoccomment">         * Returns whether the given intersection type is a super type of the given type.</em>
    +<a class="jxr_linenumber" name="L589" href="#L589">589</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L590" href="#L590">590</a> <em class="jxr_javadoccomment">         * &lt;p&gt;While one might expect that the set of supertypes of an intersection type {@code T_1 &amp; ... &amp; T_n} includes</em>
    +<a class="jxr_linenumber" name="L591" href="#L591">591</a> <em class="jxr_javadoccomment">         * the intersection of any (non-empty) subset of {@code T_1}, ..., {@code T_n}, this seems is not specified by</em>
    +<a class="jxr_linenumber" name="L592" href="#L592">592</a> <em class="jxr_javadoccomment">         * JLS §4.10 (which only says that "the direct supertypes of an intersection type {@code T_1 &amp; ... &amp; T_n} are</em>
    +<a class="jxr_linenumber" name="L593" href="#L593">593</a> <em class="jxr_javadoccomment">         * {@code T_i} (1 ≤ i ≤ n)"). See also issue</em>
    +<a class="jxr_linenumber" name="L594" href="#L594">594</a> <em class="jxr_javadoccomment">         * &lt;a href="https://bugs.openjdk.java.net/browse/JDK-6718388"&gt;JDK-6718388&lt;/a&gt;.</em>
    +<a class="jxr_linenumber" name="L595" href="#L595">595</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L596" href="#L596">596</a> <em class="jxr_javadoccomment">         * &lt;p&gt;Therefore, an intersection type is only a supertype of itself.</em>
    +<a class="jxr_linenumber" name="L597" href="#L597">597</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L598" href="#L598">598</a>         @Override
    +<a class="jxr_linenumber" name="L599" href="#L599">599</a>         <strong class="jxr_keyword">public</strong> Boolean visitIntersection(<a href="../../../../net/florianschoppmann/java/type/IntersectionType.html">IntersectionType</a> superType, @Nullable TypeMirror subType) {
    +<a class="jxr_linenumber" name="L600" href="#L600">600</a>             assert subType != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L601" href="#L601">601</a>             <strong class="jxr_keyword">return</strong> isSameType(superType, subType);
    +<a class="jxr_linenumber" name="L602" href="#L602">602</a>         }
    +<a class="jxr_linenumber" name="L603" href="#L603">603</a>     }
    +<a class="jxr_linenumber" name="L604" href="#L604">604</a> 
    +<a class="jxr_linenumber" name="L605" href="#L605">605</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L606" href="#L606">606</a> <em class="jxr_javadoccomment">     * Returns whether the first type is a subtype of the second type, as specified by JLS §4.10.</em>
    +<a class="jxr_linenumber" name="L607" href="#L607">607</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L608" href="#L608">608</a> <em class="jxr_javadoccomment">     * &lt;p&gt;The subtype relationship is transitive and reflexive.</em>
    +<a class="jxr_linenumber" name="L609" href="#L609">609</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L610" href="#L610">610</a> <em class="jxr_javadoccomment">     * @param t1 the first type</em>
    +<a class="jxr_linenumber" name="L611" href="#L611">611</a> <em class="jxr_javadoccomment">     * @param t2 the second type</em>
    +<a class="jxr_linenumber" name="L612" href="#L612">612</a> <em class="jxr_javadoccomment">     * @return {@code true} if and only if the first type is a subtype of the second</em>
    +<a class="jxr_linenumber" name="L613" href="#L613">613</a> <em class="jxr_javadoccomment">     * @throws NullPointerException if an argument is null</em>
    +<a class="jxr_linenumber" name="L614" href="#L614">614</a> <em class="jxr_javadoccomment">     * @throws IllegalArgumentException if given an executable or package type</em>
    +<a class="jxr_linenumber" name="L615" href="#L615">615</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L616" href="#L616">616</a>     @Override
    +<a class="jxr_linenumber" name="L617" href="#L617">617</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isSubtype(TypeMirror t1, TypeMirror t2) {
    +<a class="jxr_linenumber" name="L618" href="#L618">618</a>         requireValidType(Objects.requireNonNull(t1));
    +<a class="jxr_linenumber" name="L619" href="#L619">619</a>         requireValidType(Objects.requireNonNull(t2));
    +<a class="jxr_linenumber" name="L620" href="#L620">620</a> 
    +<a class="jxr_linenumber" name="L621" href="#L621">621</a>         <em class="jxr_comment">// §4.10.2: The direct supertypes of the null type are all reference types other than the null type itself.</em>
    +<a class="jxr_linenumber" name="L622" href="#L622">622</a>         <strong class="jxr_keyword">if</strong> (t1.getKind() == TypeKind.NULL &amp;&amp; REFERENCE_TYPES.contains(t2.getKind())) {
    +<a class="jxr_linenumber" name="L623" href="#L623">623</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L624" href="#L624">624</a>         }
    +<a class="jxr_linenumber" name="L625" href="#L625">625</a> 
    +<a class="jxr_linenumber" name="L626" href="#L626">626</a>         <strong class="jxr_keyword">return</strong> t2.accept(subtypeVisitor, t1);
    +<a class="jxr_linenumber" name="L627" href="#L627">627</a>     }
    +<a class="jxr_linenumber" name="L628" href="#L628">628</a> 
    +<a class="jxr_linenumber" name="L629" href="#L629">629</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L630" href="#L630">630</a> <em class="jxr_javadoccomment">     * Returns whether the first type argument &lt;em&gt;contains&lt;/em&gt; the second type argument, as specified by JLS §4.5.1.</em>
    +<a class="jxr_linenumber" name="L631" href="#L631">631</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L632" href="#L632">632</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Using the JLS notation, this method returns true if {@code t2 &lt;= t1}. As JLS §4.10 states, "subtyping does not</em>
    +<a class="jxr_linenumber" name="L633" href="#L633">633</a> <em class="jxr_javadoccomment">     * extend through parameterized types." Hence, this method is necessarily different from</em>
    +<a class="jxr_linenumber" name="L634" href="#L634">634</a> <em class="jxr_javadoccomment">     * {@link #isSubtype(TypeMirror, TypeMirror)}. In particular, the super-type relationship does not include types</em>
    +<a class="jxr_linenumber" name="L635" href="#L635">635</a> <em class="jxr_javadoccomment">     * with covariant type arguments.</em>
    +<a class="jxr_linenumber" name="L636" href="#L636">636</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L637" href="#L637">637</a> <em class="jxr_javadoccomment">     * @param t1 the first type</em>
    +<a class="jxr_linenumber" name="L638" href="#L638">638</a> <em class="jxr_javadoccomment">     * @param t2 the second type</em>
    +<a class="jxr_linenumber" name="L639" href="#L639">639</a> <em class="jxr_javadoccomment">     * @return {@code true} if and only if the first type contains the second</em>
    +<a class="jxr_linenumber" name="L640" href="#L640">640</a> <em class="jxr_javadoccomment">     * @throws IllegalArgumentException if given an executable or package type</em>
    +<a class="jxr_linenumber" name="L641" href="#L641">641</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L642" href="#L642">642</a>     @Override
    +<a class="jxr_linenumber" name="L643" href="#L643">643</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> contains(TypeMirror t1, TypeMirror t2) {
    +<a class="jxr_linenumber" name="L644" href="#L644">644</a>         Objects.requireNonNull(t1);
    +<a class="jxr_linenumber" name="L645" href="#L645">645</a>         Objects.requireNonNull(t2);
    +<a class="jxr_linenumber" name="L646" href="#L646">646</a>         requireValidType(t1);
    +<a class="jxr_linenumber" name="L647" href="#L647">647</a>         requireValidType(t2);
    +<a class="jxr_linenumber" name="L648" href="#L648">648</a> 
    +<a class="jxr_linenumber" name="L649" href="#L649">649</a>         <em class="jxr_comment">// We need to cover these cases (JLS §4.5.1):</em>
    +<a class="jxr_linenumber" name="L650" href="#L650">650</a>         <em class="jxr_comment">//</em>
    +<a class="jxr_linenumber" name="L651" href="#L651">651</a>         <em class="jxr_comment">// (a) wildcard t2 &lt;= wildcard t1</em>
    +<a class="jxr_linenumber" name="L652" href="#L652">652</a>         <em class="jxr_comment">// 1. ? extends T &lt;= ? extends S if T &lt;: S</em>
    +<a class="jxr_linenumber" name="L653" href="#L653">653</a>         <em class="jxr_comment">// 2. ? extends T &lt;= ?</em>
    +<a class="jxr_linenumber" name="L654" href="#L654">654</a>         <em class="jxr_comment">// 3. ? super T &lt;= ? super S if S &lt;: T</em>
    +<a class="jxr_linenumber" name="L655" href="#L655">655</a>         <em class="jxr_comment">// 4. ? super T &lt;= ?</em>
    +<a class="jxr_linenumber" name="L656" href="#L656">656</a>         <em class="jxr_comment">// 5. ? super T &lt;= ? extends Object</em>
    +<a class="jxr_linenumber" name="L657" href="#L657">657</a>         <em class="jxr_comment">//</em>
    +<a class="jxr_linenumber" name="L658" href="#L658">658</a>         <em class="jxr_comment">// (b) other type t2 &lt;= other type t1</em>
    +<a class="jxr_linenumber" name="L659" href="#L659">659</a>         <em class="jxr_comment">// 1. T &lt;= T</em>
    +<a class="jxr_linenumber" name="L660" href="#L660">660</a>         <em class="jxr_comment">//</em>
    +<a class="jxr_linenumber" name="L661" href="#L661">661</a>         <em class="jxr_comment">// (c) other type t2 &lt;= wildcard t1</em>
    +<a class="jxr_linenumber" name="L662" href="#L662">662</a>         <em class="jxr_comment">// 1. T &lt;= ? extends T</em>
    +<a class="jxr_linenumber" name="L663" href="#L663">663</a>         <em class="jxr_comment">// 2. T &lt;= ? super T</em>
    +<a class="jxr_linenumber" name="L664" href="#L664">664</a> 
    +<a class="jxr_linenumber" name="L665" href="#L665">665</a>         <strong class="jxr_keyword">if</strong> (t1.getKind() == TypeKind.WILDCARD) {
    +<a class="jxr_linenumber" name="L666" href="#L666">666</a>             @Nullable TypeMirror t1ExtendsBound = ((WildcardType) t1).getExtendsBound();
    +<a class="jxr_linenumber" name="L667" href="#L667">667</a>             @Nullable TypeMirror t1SuperBound = ((WildcardType) t1).getSuperBound();
    +<a class="jxr_linenumber" name="L668" href="#L668">668</a>             <strong class="jxr_keyword">boolean</strong> t1HasExtendsBound = t1ExtendsBound != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L669" href="#L669">669</a>             <strong class="jxr_keyword">boolean</strong> t1HasSuperBound = t1SuperBound != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L670" href="#L670">670</a> 
    +<a class="jxr_linenumber" name="L671" href="#L671">671</a>             <strong class="jxr_keyword">if</strong> (t2.getKind() == TypeKind.WILDCARD) {
    +<a class="jxr_linenumber" name="L672" href="#L672">672</a>                 <em class="jxr_comment">// Handle (a).</em>
    +<a class="jxr_linenumber" name="L673" href="#L673">673</a>                 @Nullable TypeMirror t2ExtendsBound = ((WildcardType) t2).getExtendsBound();
    +<a class="jxr_linenumber" name="L674" href="#L674">674</a>                 @Nullable TypeMirror t2SuperBound = ((WildcardType) t2).getSuperBound();
    +<a class="jxr_linenumber" name="L675" href="#L675">675</a> 
    +<a class="jxr_linenumber" name="L676" href="#L676">676</a>                 <strong class="jxr_keyword">if</strong> (t2ExtendsBound != <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L677" href="#L677">677</a>                     <strong class="jxr_keyword">if</strong> (t1ExtendsBound != <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L678" href="#L678">678</a>                         <em class="jxr_comment">// (a) 1.</em>
    +<a class="jxr_linenumber" name="L679" href="#L679">679</a>                         <strong class="jxr_keyword">return</strong> isSubtype(t2ExtendsBound, t1ExtendsBound);
    +<a class="jxr_linenumber" name="L680" href="#L680">680</a>                     } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (t1SuperBound == <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L681" href="#L681">681</a>                         <em class="jxr_comment">// (a) 2.</em>
    +<a class="jxr_linenumber" name="L682" href="#L682">682</a>                         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L683" href="#L683">683</a>                     }
    +<a class="jxr_linenumber" name="L684" href="#L684">684</a>                     <em class="jxr_comment">// Note that "? super S" never contains a type argument of form "? extends T"</em>
    +<a class="jxr_linenumber" name="L685" href="#L685">685</a>                     <strong class="jxr_keyword">return</strong> false;
    +<a class="jxr_linenumber" name="L686" href="#L686">686</a>                 } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (t2SuperBound != <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L687" href="#L687">687</a>                     <strong class="jxr_keyword">if</strong> (t1SuperBound != <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L688" href="#L688">688</a>                         <em class="jxr_comment">// (a) 3.</em>
    +<a class="jxr_linenumber" name="L689" href="#L689">689</a>                         <strong class="jxr_keyword">return</strong> isSubtype(t1SuperBound, t2SuperBound);
    +<a class="jxr_linenumber" name="L690" href="#L690">690</a>                     } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L691" href="#L691">691</a>                         <em class="jxr_comment">// (a) 4. and 5.: Handle case "? super T &lt;= ?" (always true) or "? super S &lt;= ? extends T" (only</em>
    +<a class="jxr_linenumber" name="L692" href="#L692">692</a>                         <em class="jxr_comment">// if T is Object)</em>
    +<a class="jxr_linenumber" name="L693" href="#L693">693</a>                         <strong class="jxr_keyword">return</strong> t1ExtendsBound == <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L694" href="#L694">694</a>                             || isSameType(t1ExtendsBound, typeMirror(Object.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L695" href="#L695">695</a>                     }
    +<a class="jxr_linenumber" name="L696" href="#L696">696</a>                 } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L697" href="#L697">697</a>                     <em class="jxr_comment">// Handle special case of (a), namely "? &lt;= ? extends T" (only if T is Object), "? &lt;= ? super T"</em>
    +<a class="jxr_linenumber" name="L698" href="#L698">698</a>                     <em class="jxr_comment">// (always false), or "? &lt;= ?" (which is equivalent to "? extends Object &lt;= ? extends Object" and</em>
    +<a class="jxr_linenumber" name="L699" href="#L699">699</a>                     <em class="jxr_comment">// therefore true).</em>
    +<a class="jxr_linenumber" name="L700" href="#L700">700</a>                     <strong class="jxr_keyword">return</strong> t1SuperBound == <strong class="jxr_keyword">null</strong> &amp;&amp; (
    +<a class="jxr_linenumber" name="L701" href="#L701">701</a>                         t1ExtendsBound == <strong class="jxr_keyword">null</strong> || isSameType(t1ExtendsBound, typeMirror(Object.<strong class="jxr_keyword">class</strong>))
    +<a class="jxr_linenumber" name="L702" href="#L702">702</a>                     );
    +<a class="jxr_linenumber" name="L703" href="#L703">703</a>                 }
    +<a class="jxr_linenumber" name="L704" href="#L704">704</a>             } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L705" href="#L705">705</a>                 <em class="jxr_comment">// Handle (c). Reduce to case (a).</em>
    +<a class="jxr_linenumber" name="L706" href="#L706">706</a>                 <strong class="jxr_keyword">if</strong> (t1HasExtendsBound) {
    +<a class="jxr_linenumber" name="L707" href="#L707">707</a>                     <em class="jxr_comment">// (c) 1.</em>
    +<a class="jxr_linenumber" name="L708" href="#L708">708</a>                     <strong class="jxr_keyword">return</strong> contains(t1, getWildcardType(t2, <strong class="jxr_keyword">null</strong>));
    +<a class="jxr_linenumber" name="L709" href="#L709">709</a>                 } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (t1HasSuperBound) {
    +<a class="jxr_linenumber" name="L710" href="#L710">710</a>                     <em class="jxr_comment">// (c) 2.</em>
    +<a class="jxr_linenumber" name="L711" href="#L711">711</a>                     <strong class="jxr_keyword">return</strong> contains(t1, getWildcardType(<strong class="jxr_keyword">null</strong>, t2));
    +<a class="jxr_linenumber" name="L712" href="#L712">712</a>                 }
    +<a class="jxr_linenumber" name="L713" href="#L713">713</a>                 <em class="jxr_comment">// Combining (c) 1. with (a) 2. or (c) 2. with (a) 4., we immediately have "T &lt;= ?"</em>
    +<a class="jxr_linenumber" name="L714" href="#L714">714</a>                 <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L715" href="#L715">715</a>             }
    +<a class="jxr_linenumber" name="L716" href="#L716">716</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L717" href="#L717">717</a>             <em class="jxr_comment">// Handle (b).</em>
    +<a class="jxr_linenumber" name="L718" href="#L718">718</a>             <strong class="jxr_keyword">return</strong> isSameType(t1, t2);
    +<a class="jxr_linenumber" name="L719" href="#L719">719</a>         }
    +<a class="jxr_linenumber" name="L720" href="#L720">720</a>     }
    +<a class="jxr_linenumber" name="L721" href="#L721">721</a> 
    +<a class="jxr_linenumber" name="L722" href="#L722">722</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L723" href="#L723">723</a> <em class="jxr_javadoccomment">     * Returns the direct super types of the given type declaration, as defined by JLS §4.10.2.</em>
    +<a class="jxr_linenumber" name="L724" href="#L724">724</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L725" href="#L725">725</a>     <strong class="jxr_keyword">private</strong> List&lt;DeclaredType&gt; directSupertypesOfTypeDeclaration(TypeElement typeElement) {
    +<a class="jxr_linenumber" name="L726" href="#L726">726</a>         TypeMirror superClass = typeElement.getSuperclass();
    +<a class="jxr_linenumber" name="L727" href="#L727">727</a>         List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; interfaces = typeElement.getInterfaces();
    +<a class="jxr_linenumber" name="L728" href="#L728">728</a>         List&lt;DeclaredType&gt; newSuperTypes = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(1 + interfaces.size());
    +<a class="jxr_linenumber" name="L729" href="#L729">729</a>         <strong class="jxr_keyword">if</strong> (superClass.getKind() == TypeKind.DECLARED) {
    +<a class="jxr_linenumber" name="L730" href="#L730">730</a>             newSuperTypes.add((DeclaredType) superClass);
    +<a class="jxr_linenumber" name="L731" href="#L731">731</a>         }
    +<a class="jxr_linenumber" name="L732" href="#L732">732</a>         <strong class="jxr_keyword">for</strong> (TypeMirror superInterface: interfaces) {
    +<a class="jxr_linenumber" name="L733" href="#L733">733</a>             newSuperTypes.add((DeclaredType) superInterface);
    +<a class="jxr_linenumber" name="L734" href="#L734">734</a>         }
    +<a class="jxr_linenumber" name="L735" href="#L735">735</a>         <strong class="jxr_keyword">if</strong> (typeElement.getKind() == ElementKind.INTERFACE &amp;&amp; interfaces.isEmpty()) {
    +<a class="jxr_linenumber" name="L736" href="#L736">736</a>             newSuperTypes.add((DeclaredType) typeMirror(Object.<strong class="jxr_keyword">class</strong>));
    +<a class="jxr_linenumber" name="L737" href="#L737">737</a>         }
    +<a class="jxr_linenumber" name="L738" href="#L738">738</a>         <strong class="jxr_keyword">return</strong> newSuperTypes;
    +<a class="jxr_linenumber" name="L739" href="#L739">739</a>     }
    +<a class="jxr_linenumber" name="L740" href="#L740">740</a> 
    +<a class="jxr_linenumber" name="L741" href="#L741">741</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L742" href="#L742">742</a> <em class="jxr_javadoccomment">     * Internal class to keep state for the Dijkstra shortest-path algorithm in</em>
    +<a class="jxr_linenumber" name="L743" href="#L743">743</a> <em class="jxr_javadoccomment">     * {@link #getShortestPathToSuperType(TypeElement, DeclaredType)}.</em>
    +<a class="jxr_linenumber" name="L744" href="#L744">744</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L745" href="#L745">745</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">TypeDeclarationVertexState</a> {
    +<a class="jxr_linenumber" name="L746" href="#L746">746</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">int</strong> distance;
    +<a class="jxr_linenumber" name="L747" href="#L747">747</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> visited;
    +<a class="jxr_linenumber" name="L748" href="#L748">748</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> TypeElement typeElement;
    +<a class="jxr_linenumber" name="L749" href="#L749">749</a> 
    +<a class="jxr_linenumber" name="L750" href="#L750">750</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L751" href="#L751">751</a> <em class="jxr_javadoccomment">         * The type as contained in {@code previous.typeDeclaration.getSuperTypes()}.</em>
    +<a class="jxr_linenumber" name="L752" href="#L752">752</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L753" href="#L753">753</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> DeclaredType declaredType;
    +<a class="jxr_linenumber" name="L754" href="#L754">754</a> 
    +<a class="jxr_linenumber" name="L755" href="#L755">755</a>         @Nullable <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">TypeDeclarationVertexState</a> previous;
    +<a class="jxr_linenumber" name="L756" href="#L756">756</a> 
    +<a class="jxr_linenumber" name="L757" href="#L757">757</a>         <strong class="jxr_keyword">private</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">TypeDeclarationVertexState</a>(<strong class="jxr_keyword">int</strong> distance, <strong class="jxr_keyword">boolean</strong> visited, TypeElement typeElement,
    +<a class="jxr_linenumber" name="L758" href="#L758">758</a>                 DeclaredType declaredType) {
    +<a class="jxr_linenumber" name="L759" href="#L759">759</a>             <strong class="jxr_keyword">this</strong>.distance = distance;
    +<a class="jxr_linenumber" name="L760" href="#L760">760</a>             <strong class="jxr_keyword">this</strong>.visited = visited;
    +<a class="jxr_linenumber" name="L761" href="#L761">761</a>             <strong class="jxr_keyword">this</strong>.typeElement = typeElement;
    +<a class="jxr_linenumber" name="L762" href="#L762">762</a>             <strong class="jxr_keyword">this</strong>.declaredType = declaredType;
    +<a class="jxr_linenumber" name="L763" href="#L763">763</a>         }
    +<a class="jxr_linenumber" name="L764" href="#L764">764</a> 
    +<a class="jxr_linenumber" name="L765" href="#L765">765</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L766" href="#L766">766</a> <em class="jxr_javadoccomment">         * Returns the path induced by this node, starting with {@code derived} and ending with {@link #declaredType}.</em>
    +<a class="jxr_linenumber" name="L767" href="#L767">767</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L768" href="#L768">768</a> <em class="jxr_javadoccomment">         * &lt;p&gt;The path is obtained by following {@link #previous} until {@code null}. Each element in the path (except</em>
    +<a class="jxr_linenumber" name="L769" href="#L769">769</a> <em class="jxr_javadoccomment">         * for the first) is the {@link #declaredType} of the current instance.</em>
    +<a class="jxr_linenumber" name="L770" href="#L770">770</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L771" href="#L771">771</a> <em class="jxr_javadoccomment">         * @param derived the first element in the path</em>
    +<a class="jxr_linenumber" name="L772" href="#L772">772</a> <em class="jxr_javadoccomment">         * @return the path induced by this node</em>
    +<a class="jxr_linenumber" name="L773" href="#L773">773</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L774" href="#L774">774</a>         <strong class="jxr_keyword">private</strong> List&lt;DeclaredType&gt; toPath(DeclaredType derived) {
    +<a class="jxr_linenumber" name="L775" href="#L775">775</a>             DeclaredType[] path = <strong class="jxr_keyword">new</strong> DeclaredType[distance + 1];
    +<a class="jxr_linenumber" name="L776" href="#L776">776</a>             <strong class="jxr_keyword">int</strong> count = path.length;
    +<a class="jxr_linenumber" name="L777" href="#L777">777</a>             <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">TypeDeclarationVertexState</a> pathElement = <strong class="jxr_keyword">this</strong>;
    +<a class="jxr_linenumber" name="L778" href="#L778">778</a>             <strong class="jxr_keyword">while</strong> (pathElement.previous != <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L779" href="#L779">779</a>                 --count;
    +<a class="jxr_linenumber" name="L780" href="#L780">780</a>                 path[count] = pathElement.declaredType;
    +<a class="jxr_linenumber" name="L781" href="#L781">781</a>                 pathElement = pathElement.previous;
    +<a class="jxr_linenumber" name="L782" href="#L782">782</a>             }
    +<a class="jxr_linenumber" name="L783" href="#L783">783</a>             path[0] = derived;
    +<a class="jxr_linenumber" name="L784" href="#L784">784</a>             <strong class="jxr_keyword">return</strong> Arrays.asList(path);
    +<a class="jxr_linenumber" name="L785" href="#L785">785</a>         }
    +<a class="jxr_linenumber" name="L786" href="#L786">786</a>     }
    +<a class="jxr_linenumber" name="L787" href="#L787">787</a> 
    +<a class="jxr_linenumber" name="L788" href="#L788">788</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L789" href="#L789">789</a> <em class="jxr_javadoccomment">     * Returns the shortest inheritance path between a type declaration and a subtype (starting with</em>
    +<a class="jxr_linenumber" name="L790" href="#L790">790</a> <em class="jxr_javadoccomment">     * {@code derived} and ending with {@code base}).</em>
    +<a class="jxr_linenumber" name="L791" href="#L791">791</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L792" href="#L792">792</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Each element in the returned path is a non-generic type, a raw type, or a parameterized type. The</em>
    +<a class="jxr_linenumber" name="L793" href="#L793">793</a> <em class="jxr_javadoccomment">     * {@link DeclaredType} at position {@code i} is always contained in the result of</em>
    +<a class="jxr_linenumber" name="L794" href="#L794">794</a> <em class="jxr_javadoccomment">     * {@link #directSupertypesOfTypeDeclaration(TypeElement)} applied to the type declaration of the type at position</em>
    +<a class="jxr_linenumber" name="L795" href="#L795">795</a> <em class="jxr_javadoccomment">     * {@code (i - 1)}.</em>
    +<a class="jxr_linenumber" name="L796" href="#L796">796</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L797" href="#L797">797</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This methods runs a Dijkstra shortest-path algorithm. It relies on {@link TypeElement#equals(Object)}</em>
    +<a class="jxr_linenumber" name="L798" href="#L798">798</a> <em class="jxr_javadoccomment">     * being well-defined (two object representing the same type declaration must compare equal). Consequently, if</em>
    +<a class="jxr_linenumber" name="L799" href="#L799">799</a> <em class="jxr_javadoccomment">     * {@link DeclaredType} instances have an identity, it must be guaranteed that there are no two instances</em>
    +<a class="jxr_linenumber" name="L800" href="#L800">800</a> <em class="jxr_javadoccomment">     * representing the same type declaration.</em>
    +<a class="jxr_linenumber" name="L801" href="#L801">801</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L802" href="#L802">802</a> <em class="jxr_javadoccomment">     * @param base base type declaration</em>
    +<a class="jxr_linenumber" name="L803" href="#L803">803</a> <em class="jxr_javadoccomment">     * @param derived derived type</em>
    +<a class="jxr_linenumber" name="L804" href="#L804">804</a> <em class="jxr_javadoccomment">     * @return If there is an inheritance path from {@code derived} to {@code base}, then a {@code List&lt;DeclaredType&gt;}</em>
    +<a class="jxr_linenumber" name="L805" href="#L805">805</a> <em class="jxr_javadoccomment">     *     {@code p} such that {@code p.get(0).equals(toGenericType(derived))} and</em>
    +<a class="jxr_linenumber" name="L806" href="#L806">806</a> <em class="jxr_javadoccomment">     *     {@code toRawTypeDeclaration(p.get(p.size() - 1)).equals(base)} are {@code true}. Otherwise, {@code null} to</em>
    +<a class="jxr_linenumber" name="L807" href="#L807">807</a> <em class="jxr_javadoccomment">     *     indicate that there is no such path.</em>
    +<a class="jxr_linenumber" name="L808" href="#L808">808</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L809" href="#L809">809</a>     @Nullable
    +<a class="jxr_linenumber" name="L810" href="#L810">810</a>     <strong class="jxr_keyword">private</strong> List&lt;DeclaredType&gt; getShortestPathToSuperType(TypeElement base, DeclaredType derived) {
    +<a class="jxr_linenumber" name="L811" href="#L811">811</a>         TypeElement typeElement = (TypeElement) derived.asElement();
    +<a class="jxr_linenumber" name="L812" href="#L812">812</a> 
    +<a class="jxr_linenumber" name="L813" href="#L813">813</a>         Set&lt;TypeElement&gt; boundary = <strong class="jxr_keyword">new</strong> LinkedHashSet&lt;&gt;();
    +<a class="jxr_linenumber" name="L814" href="#L814">814</a>         Map&lt;TypeElement, TypeDeclarationVertexState&gt; dijkstraState = <strong class="jxr_keyword">new</strong> HashMap&lt;&gt;();
    +<a class="jxr_linenumber" name="L815" href="#L815">815</a> 
    +<a class="jxr_linenumber" name="L816" href="#L816">816</a>         <em class="jxr_comment">// Distance from derived to itself is 0</em>
    +<a class="jxr_linenumber" name="L817" href="#L817">817</a>         dijkstraState.put(typeElement, <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">TypeDeclarationVertexState</a>(0, false, typeElement, derived));
    +<a class="jxr_linenumber" name="L818" href="#L818">818</a>         <em class="jxr_comment">// Start off with derived</em>
    +<a class="jxr_linenumber" name="L819" href="#L819">819</a>         boundary.add(typeElement);
    +<a class="jxr_linenumber" name="L820" href="#L820">820</a> 
    +<a class="jxr_linenumber" name="L821" href="#L821">821</a>         <em class="jxr_comment">// Invariants:</em>
    +<a class="jxr_linenumber" name="L822" href="#L822">822</a>         <em class="jxr_comment">// - boundary only contains nodes that have *not* been visited</em>
    +<a class="jxr_linenumber" name="L823" href="#L823">823</a>         <em class="jxr_comment">// - For all visited nodes, the shortest path is known</em>
    +<a class="jxr_linenumber" name="L824" href="#L824">824</a>         <strong class="jxr_keyword">while</strong> (!boundary.isEmpty()) {
    +<a class="jxr_linenumber" name="L825" href="#L825">825</a>             <em class="jxr_comment">// shortest := vertex in boundary with smallest distance from typeElement</em>
    +<a class="jxr_linenumber" name="L826" href="#L826">826</a>             @Nullable <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">TypeDeclarationVertexState</a> shortest = <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L827" href="#L827">827</a>             <strong class="jxr_keyword">for</strong> (TypeElement currentDeclaration: boundary) {
    +<a class="jxr_linenumber" name="L828" href="#L828">828</a>                 <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">TypeDeclarationVertexState</a> current = dijkstraState.get(currentDeclaration);
    +<a class="jxr_linenumber" name="L829" href="#L829">829</a>                 <strong class="jxr_keyword">if</strong> (shortest == <strong class="jxr_keyword">null</strong> || current.distance &lt; shortest.distance) {
    +<a class="jxr_linenumber" name="L830" href="#L830">830</a>                     shortest = current;
    +<a class="jxr_linenumber" name="L831" href="#L831">831</a>                 }
    +<a class="jxr_linenumber" name="L832" href="#L832">832</a>             }
    +<a class="jxr_linenumber" name="L833" href="#L833">833</a>             <em class="jxr_comment">// Since boundary is non-empty, shortest was assigned in the previous loop. Also note that due to the above</em>
    +<a class="jxr_linenumber" name="L834" href="#L834">834</a>             <em class="jxr_comment">// invariant, shortest has not been visited.</em>
    +<a class="jxr_linenumber" name="L835" href="#L835">835</a>             assert shortest != <strong class="jxr_keyword">null</strong> &amp;&amp; !shortest.visited;
    +<a class="jxr_linenumber" name="L836" href="#L836">836</a> 
    +<a class="jxr_linenumber" name="L837" href="#L837">837</a>             <em class="jxr_comment">// Terminate if we found base. Since shortest.distance is non-decreasing over the loop iterations, it is</em>
    +<a class="jxr_linenumber" name="L838" href="#L838">838</a>             <em class="jxr_comment">// impossible to find a shorter path in future iterations.</em>
    +<a class="jxr_linenumber" name="L839" href="#L839">839</a>             <strong class="jxr_keyword">if</strong> (shortest.typeElement.equals(base)) {
    +<a class="jxr_linenumber" name="L840" href="#L840">840</a>                 <strong class="jxr_keyword">return</strong> shortest.toPath(derived);
    +<a class="jxr_linenumber" name="L841" href="#L841">841</a>             }
    +<a class="jxr_linenumber" name="L842" href="#L842">842</a> 
    +<a class="jxr_linenumber" name="L843" href="#L843">843</a>             <em class="jxr_comment">// Remove shortest from boundary.</em>
    +<a class="jxr_linenumber" name="L844" href="#L844">844</a>             boundary.remove(shortest.typeElement);
    +<a class="jxr_linenumber" name="L845" href="#L845">845</a>             shortest.visited = <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L846" href="#L846">846</a> 
    +<a class="jxr_linenumber" name="L847" href="#L847">847</a>             <strong class="jxr_keyword">for</strong> (DeclaredType superType: directSupertypesOfTypeDeclaration(shortest.typeElement)) {
    +<a class="jxr_linenumber" name="L848" href="#L848">848</a>                 <em class="jxr_comment">// A direct super type of a type declaration is either a non-generic type declaration or a raw type (in</em>
    +<a class="jxr_linenumber" name="L849" href="#L849">849</a>                 <em class="jxr_comment">// both cases represented as DeclaredType with no actual type parameters) or a parameterized type</em>
    +<a class="jxr_linenumber" name="L850" href="#L850">850</a>                 TypeElement superDeclaration = (TypeElement) superType.asElement();
    +<a class="jxr_linenumber" name="L851" href="#L851">851</a>                 @Nullable <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">TypeDeclarationVertexState</a> stats = dijkstraState.get(superDeclaration);
    +<a class="jxr_linenumber" name="L852" href="#L852">852</a> 
    +<a class="jxr_linenumber" name="L853" href="#L853">853</a>                 <strong class="jxr_keyword">if</strong> (stats == <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L854" href="#L854">854</a>                     stats = <strong class="jxr_keyword">new</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">TypeDeclarationVertexState</a>(Integer.MAX_VALUE, false, superDeclaration, superType);
    +<a class="jxr_linenumber" name="L855" href="#L855">855</a>                     dijkstraState.put(superDeclaration, stats);
    +<a class="jxr_linenumber" name="L856" href="#L856">856</a>                 }
    +<a class="jxr_linenumber" name="L857" href="#L857">857</a> 
    +<a class="jxr_linenumber" name="L858" href="#L858">858</a>                 <strong class="jxr_keyword">int</strong> alt = shortest.distance + 1;
    +<a class="jxr_linenumber" name="L859" href="#L859">859</a>                 <strong class="jxr_keyword">if</strong> (!stats.visited &amp;&amp; alt &lt; stats.distance) {
    +<a class="jxr_linenumber" name="L860" href="#L860">860</a>                     stats.distance = alt;
    +<a class="jxr_linenumber" name="L861" href="#L861">861</a>                     stats.previous = shortest;
    +<a class="jxr_linenumber" name="L862" href="#L862">862</a>                     boundary.add(superDeclaration);
    +<a class="jxr_linenumber" name="L863" href="#L863">863</a>                 }
    +<a class="jxr_linenumber" name="L864" href="#L864">864</a>             }
    +<a class="jxr_linenumber" name="L865" href="#L865">865</a>         }
    +<a class="jxr_linenumber" name="L866" href="#L866">866</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L867" href="#L867">867</a>     }
    +<a class="jxr_linenumber" name="L868" href="#L868">868</a> 
    +<a class="jxr_linenumber" name="L869" href="#L869">869</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L870" href="#L870">870</a> <em class="jxr_javadoccomment">     * Visitor of a type mirror. Returns the erasure of the visited type mirror.</em>
    +<a class="jxr_linenumber" name="L871" href="#L871">871</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L872" href="#L872">872</a> <em class="jxr_javadoccomment">     * @see #erasureVisitor</em>
    +<a class="jxr_linenumber" name="L873" href="#L873">873</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L874" href="#L874">874</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">ErasureVisitor</a> <strong class="jxr_keyword">extends</strong> ExtendedTypeKindVisitor7&lt;TypeMirror, Void&gt; {
    +<a class="jxr_linenumber" name="L875" href="#L875">875</a>         @Override
    +<a class="jxr_linenumber" name="L876" href="#L876">876</a>         <strong class="jxr_keyword">public</strong> TypeMirror visitDeclared(DeclaredType declaredType, @Nullable Void ignored) {
    +<a class="jxr_linenumber" name="L877" href="#L877">877</a>             TypeMirror originalEnclosingType = declaredType.getEnclosingType();
    +<a class="jxr_linenumber" name="L878" href="#L878">878</a>             @Nullable DeclaredType newEnclosingType = originalEnclosingType.getKind() == TypeKind.NONE
    +<a class="jxr_linenumber" name="L879" href="#L879">879</a>                 ? <strong class="jxr_keyword">null</strong>
    +<a class="jxr_linenumber" name="L880" href="#L880">880</a>                 : (DeclaredType) erasure(declaredType.getEnclosingType());
    +<a class="jxr_linenumber" name="L881" href="#L881">881</a>             <strong class="jxr_keyword">return</strong> getDeclaredType(newEnclosingType, (TypeElement) declaredType.asElement());
    +<a class="jxr_linenumber" name="L882" href="#L882">882</a>         }
    +<a class="jxr_linenumber" name="L883" href="#L883">883</a> 
    +<a class="jxr_linenumber" name="L884" href="#L884">884</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L885" href="#L885">885</a> <em class="jxr_javadoccomment">         * Returns the array type corresponding to the erasure of the component type.</em>
    +<a class="jxr_linenumber" name="L886" href="#L886">886</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L887" href="#L887">887</a>         @Override
    +<a class="jxr_linenumber" name="L888" href="#L888">888</a>         <strong class="jxr_keyword">public</strong> TypeMirror visitArray(ArrayType arrayType, @Nullable Void ignored) {
    +<a class="jxr_linenumber" name="L889" href="#L889">889</a>             <strong class="jxr_keyword">return</strong> getArrayType(erasure(arrayType.getComponentType()));
    +<a class="jxr_linenumber" name="L890" href="#L890">890</a>         }
    +<a class="jxr_linenumber" name="L891" href="#L891">891</a> 
    +<a class="jxr_linenumber" name="L892" href="#L892">892</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L893" href="#L893">893</a> <em class="jxr_javadoccomment">         * Returns the erasure of the leftmost bound of the given type variable.</em>
    +<a class="jxr_linenumber" name="L894" href="#L894">894</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L895" href="#L895">895</a> <em class="jxr_javadoccomment">         * &lt;p&gt;The erasure of a type variable is the erasure of its leftmost bound (JLS §4.6). If multiple bounds are</em>
    +<a class="jxr_linenumber" name="L896" href="#L896">896</a> <em class="jxr_javadoccomment">         * present, the upper bound is modelled as an intersection type. The erasure of an intersection type is</em>
    +<a class="jxr_linenumber" name="L897" href="#L897">897</a> <em class="jxr_javadoccomment">         * guaranteed to have see right form (see {@link #visitIntersection(IntersectionType, Void)}).</em>
    +<a class="jxr_linenumber" name="L898" href="#L898">898</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L899" href="#L899">899</a>         @Override
    +<a class="jxr_linenumber" name="L900" href="#L900">900</a>         <strong class="jxr_keyword">public</strong> TypeMirror visitTypeVariable(TypeVariable typeVariable, @Nullable Void ignored) {
    +<a class="jxr_linenumber" name="L901" href="#L901">901</a>             <strong class="jxr_keyword">return</strong> erasure(typeVariable.getUpperBound());
    +<a class="jxr_linenumber" name="L902" href="#L902">902</a>         }
    +<a class="jxr_linenumber" name="L903" href="#L903">903</a> 
    +<a class="jxr_linenumber" name="L904" href="#L904">904</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L905" href="#L905">905</a> <em class="jxr_javadoccomment">         * Returns the erasure of the leftmost member of the given intersection type.</em>
    +<a class="jxr_linenumber" name="L906" href="#L906">906</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L907" href="#L907">907</a> <em class="jxr_javadoccomment">         * &lt;p&gt;While JLS §4.6 does not mention intersection types (and thus, strictly speaking, the erasure of an</em>
    +<a class="jxr_linenumber" name="L908" href="#L908">908</a> <em class="jxr_javadoccomment">         * intersection type should be the unmodified intersection type itself), this implementation computes the</em>
    +<a class="jxr_linenumber" name="L909" href="#L909">909</a> <em class="jxr_javadoccomment">         * erasure of an intersection type as the erasure of its left-most type.</em>
    +<a class="jxr_linenumber" name="L910" href="#L910">910</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L911" href="#L911">911</a>         @Override
    +<a class="jxr_linenumber" name="L912" href="#L912">912</a>         <strong class="jxr_keyword">public</strong> TypeMirror visitIntersection(<a href="../../../../net/florianschoppmann/java/type/IntersectionType.html">IntersectionType</a> intersectionType, @Nullable Void ignored) {
    +<a class="jxr_linenumber" name="L913" href="#L913">913</a>             <strong class="jxr_keyword">return</strong> erasure(intersectionType.getBounds().get(0));
    +<a class="jxr_linenumber" name="L914" href="#L914">914</a>         }
    +<a class="jxr_linenumber" name="L915" href="#L915">915</a> 
    +<a class="jxr_linenumber" name="L916" href="#L916">916</a>         <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L917" href="#L917">917</a> <em class="jxr_javadoccomment">         * Returns the given type itself.</em>
    +<a class="jxr_linenumber" name="L918" href="#L918">918</a> <em class="jxr_javadoccomment">         *</em>
    +<a class="jxr_linenumber" name="L919" href="#L919">919</a> <em class="jxr_javadoccomment">         * &lt;p&gt;JLS §4.6 specifies: "The erasure of every other type is the type itself."</em>
    +<a class="jxr_linenumber" name="L920" href="#L920">920</a> <em class="jxr_javadoccomment">         */</em>
    +<a class="jxr_linenumber" name="L921" href="#L921">921</a>         @Override
    +<a class="jxr_linenumber" name="L922" href="#L922">922</a>         <strong class="jxr_keyword">protected</strong> TypeMirror defaultAction(TypeMirror type, Void ignored) {
    +<a class="jxr_linenumber" name="L923" href="#L923">923</a>             <strong class="jxr_keyword">return</strong> type;
    +<a class="jxr_linenumber" name="L924" href="#L924">924</a>         }
    +<a class="jxr_linenumber" name="L925" href="#L925">925</a>     }
    +<a class="jxr_linenumber" name="L926" href="#L926">926</a> 
    +<a class="jxr_linenumber" name="L927" href="#L927">927</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L928" href="#L928">928</a> <em class="jxr_javadoccomment">     * Returns the erasure of a type, as specified by JLS §4.6.</em>
    +<a class="jxr_linenumber" name="L929" href="#L929">929</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L930" href="#L930">930</a> <em class="jxr_javadoccomment">     * @param type the type to be erased</em>
    +<a class="jxr_linenumber" name="L931" href="#L931">931</a> <em class="jxr_javadoccomment">     * @return the erasure of the given type</em>
    +<a class="jxr_linenumber" name="L932" href="#L932">932</a> <em class="jxr_javadoccomment">     * @throws IllegalArgumentException if given a package type</em>
    +<a class="jxr_linenumber" name="L933" href="#L933">933</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L934" href="#L934">934</a>     @Override
    +<a class="jxr_linenumber" name="L935" href="#L935">935</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> TypeMirror erasure(TypeMirror type) {
    +<a class="jxr_linenumber" name="L936" href="#L936">936</a>         Objects.requireNonNull(type);
    +<a class="jxr_linenumber" name="L937" href="#L937">937</a>         requireValidType(type);
    +<a class="jxr_linenumber" name="L938" href="#L938">938</a> 
    +<a class="jxr_linenumber" name="L939" href="#L939">939</a>         <strong class="jxr_keyword">return</strong> type.accept(erasureVisitor, <strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L940" href="#L940">940</a>     }
    +<a class="jxr_linenumber" name="L941" href="#L941">941</a> 
    +<a class="jxr_linenumber" name="L942" href="#L942">942</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L943" href="#L943">943</a> <em class="jxr_javadoccomment">     * Returns the element corresponding to a type.</em>
    +<a class="jxr_linenumber" name="L944" href="#L944">944</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L945" href="#L945">945</a> <em class="jxr_javadoccomment">     * &lt;p&gt;The type may be a {@code DeclaredType} or {@code TypeVariable}. Returns {@code null} if the type is not one</em>
    +<a class="jxr_linenumber" name="L946" href="#L946">946</a> <em class="jxr_javadoccomment">     * with a corresponding element.</em>
    +<a class="jxr_linenumber" name="L947" href="#L947">947</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L948" href="#L948">948</a> <em class="jxr_javadoccomment">     * @param type the type</em>
    +<a class="jxr_linenumber" name="L949" href="#L949">949</a> <em class="jxr_javadoccomment">     * @return the element corresponding to the given type</em>
    +<a class="jxr_linenumber" name="L950" href="#L950">950</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L951" href="#L951">951</a>     @Override
    +<a class="jxr_linenumber" name="L952" href="#L952">952</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> Element asElement(TypeMirror type) {
    +<a class="jxr_linenumber" name="L953" href="#L953">953</a>         Objects.requireNonNull(type);
    +<a class="jxr_linenumber" name="L954" href="#L954">954</a>         requireValidType(type);
    +<a class="jxr_linenumber" name="L955" href="#L955">955</a> 
    +<a class="jxr_linenumber" name="L956" href="#L956">956</a>         <strong class="jxr_keyword">if</strong> (type.getKind() == TypeKind.DECLARED) {
    +<a class="jxr_linenumber" name="L957" href="#L957">957</a>             <strong class="jxr_keyword">return</strong> ((DeclaredType) type).asElement();
    +<a class="jxr_linenumber" name="L958" href="#L958">958</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (type.getKind() == TypeKind.TYPEVAR) {
    +<a class="jxr_linenumber" name="L959" href="#L959">959</a>             <strong class="jxr_keyword">return</strong> ((TypeVariable) type).asElement();
    +<a class="jxr_linenumber" name="L960" href="#L960">960</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L961" href="#L961">961</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L962" href="#L962">962</a>         }
    +<a class="jxr_linenumber" name="L963" href="#L963">963</a>     }
    +<a class="jxr_linenumber" name="L964" href="#L964">964</a> 
    +<a class="jxr_linenumber" name="L965" href="#L965">965</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L966" href="#L966">966</a> <em class="jxr_javadoccomment">     * Returns whether the two given type arguments represent the same type.</em>
    +<a class="jxr_linenumber" name="L967" href="#L967">967</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L968" href="#L968">968</a> <em class="jxr_javadoccomment">     * &lt;p&gt;If either of the arguments to this method represents a wildcard, this method will return false. As a</em>
    +<a class="jxr_linenumber" name="L969" href="#L969">969</a> <em class="jxr_javadoccomment">     * consequence, a wildcard is not the same type as itself.</em>
    +<a class="jxr_linenumber" name="L970" href="#L970">970</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L971" href="#L971">971</a> <em class="jxr_javadoccomment">     * @param t1 the first type</em>
    +<a class="jxr_linenumber" name="L972" href="#L972">972</a> <em class="jxr_javadoccomment">     * @param t2 the second type</em>
    +<a class="jxr_linenumber" name="L973" href="#L973">973</a> <em class="jxr_javadoccomment">     * @return {@code true} if and only if the two types are the same</em>
    +<a class="jxr_linenumber" name="L974" href="#L974">974</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L975" href="#L975">975</a>     @Override
    +<a class="jxr_linenumber" name="L976" href="#L976">976</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isSameType(TypeMirror t1, TypeMirror t2) {
    +<a class="jxr_linenumber" name="L977" href="#L977">977</a>         requireValidType(Objects.requireNonNull(t1));
    +<a class="jxr_linenumber" name="L978" href="#L978">978</a>         requireValidType(Objects.requireNonNull(t2));
    +<a class="jxr_linenumber" name="L979" href="#L979">979</a> 
    +<a class="jxr_linenumber" name="L980" href="#L980">980</a>         <strong class="jxr_keyword">return</strong> t1.getKind() != TypeKind.WILDCARD &amp;&amp; t1.equals(t2);
    +<a class="jxr_linenumber" name="L981" href="#L981">981</a>     }
    +<a class="jxr_linenumber" name="L982" href="#L982">982</a> 
    +<a class="jxr_linenumber" name="L983" href="#L983">983</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L984" href="#L984">984</a> <em class="jxr_javadoccomment">     * Returns the greatest lower bound (glb) of a wildcard extends bound and an upper bound of a type parameter.</em>
    +<a class="jxr_linenumber" name="L985" href="#L985">985</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L986" href="#L986">986</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This method is only called from {@link #capture(TypeMirror)}. JLS §5.1.10 defines the greatest lower bound</em>
    +<a class="jxr_linenumber" name="L987" href="#L987">987</a> <em class="jxr_javadoccomment">     * {@code glb(V_1, ..., V_m)} as {@code V_1 &amp; ... &amp; V_m}. Unfortunately, the specification provides no clarity</em>
    +<a class="jxr_linenumber" name="L988" href="#L988">988</a> <em class="jxr_javadoccomment">     * whether intersection types are allowed to be nested. This implementation takes the interpretation that</em>
    +<a class="jxr_linenumber" name="L989" href="#L989">989</a> <em class="jxr_javadoccomment">     * intersection types should not be nested. Therefore, the bounds contained in {@code originalUpperBound} are</em>
    +<a class="jxr_linenumber" name="L990" href="#L990">990</a> <em class="jxr_javadoccomment">     * unwrapped.</em>
    +<a class="jxr_linenumber" name="L991" href="#L991">991</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L992" href="#L992">992</a> <em class="jxr_javadoccomment">     * @param wildcardExtendsBound extends bound of the wildcard type argument</em>
    +<a class="jxr_linenumber" name="L993" href="#L993">993</a> <em class="jxr_javadoccomment">     * @param originalUpperBound original upper bound of the type parameter</em>
    +<a class="jxr_linenumber" name="L994" href="#L994">994</a> <em class="jxr_javadoccomment">     * @return the greatest lower bound</em>
    +<a class="jxr_linenumber" name="L995" href="#L995">995</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L996" href="#L996">996</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> TypeMirror[] greatestLowerBound(TypeMirror wildcardExtendsBound, TypeMirror originalUpperBound) {
    +<a class="jxr_linenumber" name="L997" href="#L997">997</a>         @Nullable TypeMirror[] result = <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L998" href="#L998">998</a>         <strong class="jxr_keyword">if</strong> (originalUpperBound instanceof IntersectionType) {
    +<a class="jxr_linenumber" name="L999" href="#L999">999</a>             <a href="../../../../net/florianschoppmann/java/type/IntersectionType.html">IntersectionType</a> originalIntersectionBound = (IntersectionType) originalUpperBound;
    +<a class="jxr_linenumber" name="L1000" href="#L1000">1000</a>             <strong class="jxr_keyword">if</strong> (originalIntersectionBound.isIntersectionType()) {
    +<a class="jxr_linenumber" name="L1001" href="#L1001">1001</a>                 List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; originalBounds = originalIntersectionBound.getBounds();
    +<a class="jxr_linenumber" name="L1002" href="#L1002">1002</a>                 result = <strong class="jxr_keyword">new</strong> TypeMirror[1 + originalBounds.size()];
    +<a class="jxr_linenumber" name="L1003" href="#L1003">1003</a>                 <strong class="jxr_keyword">int</strong> i = 0;
    +<a class="jxr_linenumber" name="L1004" href="#L1004">1004</a>                 <strong class="jxr_keyword">for</strong> (TypeMirror originalBound: originalBounds) {
    +<a class="jxr_linenumber" name="L1005" href="#L1005">1005</a>                     ++i;
    +<a class="jxr_linenumber" name="L1006" href="#L1006">1006</a>                     result[i] = originalBound;
    +<a class="jxr_linenumber" name="L1007" href="#L1007">1007</a>                 }
    +<a class="jxr_linenumber" name="L1008" href="#L1008">1008</a>             }
    +<a class="jxr_linenumber" name="L1009" href="#L1009">1009</a>         }
    +<a class="jxr_linenumber" name="L1010" href="#L1010">1010</a> 
    +<a class="jxr_linenumber" name="L1011" href="#L1011">1011</a>         <strong class="jxr_keyword">if</strong> (result == <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L1012" href="#L1012">1012</a>             result = <strong class="jxr_keyword">new</strong> TypeMirror[2];
    +<a class="jxr_linenumber" name="L1013" href="#L1013">1013</a>             result[1] = originalUpperBound;
    +<a class="jxr_linenumber" name="L1014" href="#L1014">1014</a>         }
    +<a class="jxr_linenumber" name="L1015" href="#L1015">1015</a> 
    +<a class="jxr_linenumber" name="L1016" href="#L1016">1016</a>         result[0] = wildcardExtendsBound;
    +<a class="jxr_linenumber" name="L1017" href="#L1017">1017</a>         <strong class="jxr_keyword">return</strong> result;
    +<a class="jxr_linenumber" name="L1018" href="#L1018">1018</a>     }
    +<a class="jxr_linenumber" name="L1019" href="#L1019">1019</a> 
    +<a class="jxr_linenumber" name="L1020" href="#L1020">1020</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1021" href="#L1021">1021</a> <em class="jxr_javadoccomment">     * Returns the caputure conversion of (just) the given wildcard argument.</em>
    +<a class="jxr_linenumber" name="L1022" href="#L1022">1022</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1023" href="#L1023">1023</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This method is only called by {@link #capture(TypeMirror)}.</em>
    +<a class="jxr_linenumber" name="L1024" href="#L1024">1024</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1025" href="#L1025">1025</a>     <strong class="jxr_keyword">private</strong> TypeVariable captureWildcardArgument(WildcardType wildcardArgument, TypeParameterElement typeParameter) {
    +<a class="jxr_linenumber" name="L1026" href="#L1026">1026</a>         TypeVariable originalTypeVariable = (TypeVariable) typeParameter.asType();
    +<a class="jxr_linenumber" name="L1027" href="#L1027">1027</a> 
    +<a class="jxr_linenumber" name="L1028" href="#L1028">1028</a>         <em class="jxr_comment">// Denoted U_i in JLS 5.1.10</em>
    +<a class="jxr_linenumber" name="L1029" href="#L1029">1029</a>         TypeMirror originalUpperBound = originalTypeVariable.getUpperBound();
    +<a class="jxr_linenumber" name="L1030" href="#L1030">1030</a> 
    +<a class="jxr_linenumber" name="L1031" href="#L1031">1031</a>         <em class="jxr_comment">// Both of the following are denoted B_i in JLS 5.1.10 (in "? extends B_i" and "? super B_i", respectively)</em>
    +<a class="jxr_linenumber" name="L1032" href="#L1032">1032</a>         @Nullable TypeMirror wildcardExtendsBound = wildcardArgument.getExtendsBound();
    +<a class="jxr_linenumber" name="L1033" href="#L1033">1033</a>         @Nullable TypeMirror wildcardSuperBound = wildcardArgument.getSuperBound();
    +<a class="jxr_linenumber" name="L1034" href="#L1034">1034</a> 
    +<a class="jxr_linenumber" name="L1035" href="#L1035">1035</a>         TypeMirror newUpperBound;
    +<a class="jxr_linenumber" name="L1036" href="#L1036">1036</a>         TypeMirror newLowerBound;
    +<a class="jxr_linenumber" name="L1037" href="#L1037">1037</a> 
    +<a class="jxr_linenumber" name="L1038" href="#L1038">1038</a>         <em class="jxr_comment">// There exists a capture conversion from a parameterized type G&lt;T_1,...,T_n&gt; (§4.5) to a parameterized type</em>
    +<a class="jxr_linenumber" name="L1039" href="#L1039">1039</a>         <em class="jxr_comment">// G&lt;S_1, ..., S_n&gt;, where, for 1 &lt;= i &lt;= n:</em>
    +<a class="jxr_linenumber" name="L1040" href="#L1040">1040</a>         <strong class="jxr_keyword">if</strong> (wildcardExtendsBound == <strong class="jxr_keyword">null</strong> &amp;&amp; wildcardSuperBound == <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L1041" href="#L1041">1041</a>             <em class="jxr_comment">// If T_i is a wildcard type argument (§4.5.1) of the form ?, then S_i is a fresh type variable whose</em>
    +<a class="jxr_linenumber" name="L1042" href="#L1042">1042</a>             <em class="jxr_comment">// upper bound is U_i[A_1 := S_1, ..., A_n := S_n] and whose lower bound is the null type (§4.1).</em>
    +<a class="jxr_linenumber" name="L1043" href="#L1043">1043</a>             newUpperBound = originalUpperBound;
    +<a class="jxr_linenumber" name="L1044" href="#L1044">1044</a>             newLowerBound = getNullType();
    +<a class="jxr_linenumber" name="L1045" href="#L1045">1045</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (wildcardSuperBound == <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L1046" href="#L1046">1046</a>             <em class="jxr_comment">// If T_i is a wildcard type argument of the form ? extends B_i, then S_i is a fresh type variable whose</em>
    +<a class="jxr_linenumber" name="L1047" href="#L1047">1047</a>             <em class="jxr_comment">// upper bound is glb(B_i, U_i[A_1 := S_1, ..., A_n := S_n]) and whose lower bound is the null type.</em>
    +<a class="jxr_linenumber" name="L1048" href="#L1048">1048</a>             <em class="jxr_comment">//</em>
    +<a class="jxr_linenumber" name="L1049" href="#L1049">1049</a>             <em class="jxr_comment">// glb(V_1, ..., V_m) is defined as V_1 &amp; ... &amp; V_m.</em>
    +<a class="jxr_linenumber" name="L1050" href="#L1050">1050</a>             <em class="jxr_comment">// It is a compile-time error if, for any two classes (not interfaces) V_i and V_j, V_i is not a</em>
    +<a class="jxr_linenumber" name="L1051" href="#L1051">1051</a>             <em class="jxr_comment">// subclass of V_j or vice versa.</em>
    +<a class="jxr_linenumber" name="L1052" href="#L1052">1052</a>             newUpperBound = getIntersectionType(greatestLowerBound(wildcardExtendsBound, originalUpperBound));
    +<a class="jxr_linenumber" name="L1053" href="#L1053">1053</a>             newLowerBound = getNullType();
    +<a class="jxr_linenumber" name="L1054" href="#L1054">1054</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L1055" href="#L1055">1055</a>             <em class="jxr_comment">// If T_i is a wildcard type argument of the form ? super B_i, then S_i is a fresh type variable whose</em>
    +<a class="jxr_linenumber" name="L1056" href="#L1056">1056</a>             <em class="jxr_comment">// upper bound is U_i[A_1 := S1, ..., A_n := S_n] and whose lower bound is B_i.</em>
    +<a class="jxr_linenumber" name="L1057" href="#L1057">1057</a>             assert wildcardExtendsBound == <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1058" href="#L1058">1058</a> 
    +<a class="jxr_linenumber" name="L1059" href="#L1059">1059</a>             newUpperBound = originalUpperBound;
    +<a class="jxr_linenumber" name="L1060" href="#L1060">1060</a>             newLowerBound = wildcardSuperBound;
    +<a class="jxr_linenumber" name="L1061" href="#L1061">1061</a>         }
    +<a class="jxr_linenumber" name="L1062" href="#L1062">1062</a> 
    +<a class="jxr_linenumber" name="L1063" href="#L1063">1063</a>         <strong class="jxr_keyword">return</strong> getTypeVariable(typeParameter, newUpperBound, newLowerBound, wildcardArgument);
    +<a class="jxr_linenumber" name="L1064" href="#L1064">1064</a>     }
    +<a class="jxr_linenumber" name="L1065" href="#L1065">1065</a> 
    +<a class="jxr_linenumber" name="L1066" href="#L1066">1066</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1067" href="#L1067">1067</a> <em class="jxr_javadoccomment">     * Returns the capture conversion of the given type, as specified by JLS §5.1.10.</em>
    +<a class="jxr_linenumber" name="L1068" href="#L1068">1068</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1069" href="#L1069">1069</a> <em class="jxr_javadoccomment">     * @param type the type to be converted</em>
    +<a class="jxr_linenumber" name="L1070" href="#L1070">1070</a> <em class="jxr_javadoccomment">     * @return the result of applying capture conversion</em>
    +<a class="jxr_linenumber" name="L1071" href="#L1071">1071</a> <em class="jxr_javadoccomment">     * @throws IllegalArgumentException if given an executable or package type</em>
    +<a class="jxr_linenumber" name="L1072" href="#L1072">1072</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1073" href="#L1073">1073</a>     @Override
    +<a class="jxr_linenumber" name="L1074" href="#L1074">1074</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> TypeMirror capture(TypeMirror type) {
    +<a class="jxr_linenumber" name="L1075" href="#L1075">1075</a>         Objects.requireNonNull(type);
    +<a class="jxr_linenumber" name="L1076" href="#L1076">1076</a>         requireValidType(type);
    +<a class="jxr_linenumber" name="L1077" href="#L1077">1077</a> 
    +<a class="jxr_linenumber" name="L1078" href="#L1078">1078</a>         <em class="jxr_comment">// JLS §5.1.10 states: "Capture conversion on any type other than a parameterized type (§4.5) acts as an</em>
    +<a class="jxr_linenumber" name="L1079" href="#L1079">1079</a>         <em class="jxr_comment">// identity conversion (§5.1.1)."</em>
    +<a class="jxr_linenumber" name="L1080" href="#L1080">1080</a>         <strong class="jxr_keyword">if</strong> (type.getKind() != TypeKind.DECLARED) {
    +<a class="jxr_linenumber" name="L1081" href="#L1081">1081</a>             <strong class="jxr_keyword">return</strong> type;
    +<a class="jxr_linenumber" name="L1082" href="#L1082">1082</a>         }
    +<a class="jxr_linenumber" name="L1083" href="#L1083">1083</a> 
    +<a class="jxr_linenumber" name="L1084" href="#L1084">1084</a>         DeclaredType declaredType = (DeclaredType) type;
    +<a class="jxr_linenumber" name="L1085" href="#L1085">1085</a>         List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; typeArguments = declaredType.getTypeArguments();
    +<a class="jxr_linenumber" name="L1086" href="#L1086">1086</a>         <strong class="jxr_keyword">if</strong> (typeArguments.isEmpty()) {
    +<a class="jxr_linenumber" name="L1087" href="#L1087">1087</a>             <strong class="jxr_keyword">return</strong> declaredType;
    +<a class="jxr_linenumber" name="L1088" href="#L1088">1088</a>         }
    +<a class="jxr_linenumber" name="L1089" href="#L1089">1089</a> 
    +<a class="jxr_linenumber" name="L1090" href="#L1090">1090</a>         TypeElement typeDeclaration = (TypeElement) declaredType.asElement();
    +<a class="jxr_linenumber" name="L1091" href="#L1091">1091</a>         Iterator&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; typeArgumentIterator = typeArguments.iterator();
    +<a class="jxr_linenumber" name="L1092" href="#L1092">1092</a>         Iterator&lt;? <strong class="jxr_keyword">extends</strong> TypeParameterElement&gt; typeParameterIterator = typeDeclaration.getTypeParameters().iterator();
    +<a class="jxr_linenumber" name="L1093" href="#L1093">1093</a>         TypeMirror[] newArguments = <strong class="jxr_keyword">new</strong> TypeMirror[typeArguments.size()];
    +<a class="jxr_linenumber" name="L1094" href="#L1094">1094</a>         Map&lt;TypeParameterElement, TypeMirror&gt; substitutions = <strong class="jxr_keyword">new</strong> LinkedHashMap&lt;&gt;();
    +<a class="jxr_linenumber" name="L1095" href="#L1095">1095</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> index = 0; index &lt; newArguments.length; ++index) {
    +<a class="jxr_linenumber" name="L1096" href="#L1096">1096</a>             TypeMirror typeArgument = typeArgumentIterator.next();
    +<a class="jxr_linenumber" name="L1097" href="#L1097">1097</a>             TypeParameterElement typeParameter = typeParameterIterator.next();
    +<a class="jxr_linenumber" name="L1098" href="#L1098">1098</a>             TypeMirror substitution;
    +<a class="jxr_linenumber" name="L1099" href="#L1099">1099</a> 
    +<a class="jxr_linenumber" name="L1100" href="#L1100">1100</a>             <strong class="jxr_keyword">if</strong> (typeArgument.getKind() != TypeKind.WILDCARD) {
    +<a class="jxr_linenumber" name="L1101" href="#L1101">1101</a>                 newArguments[index] = typeArgument;
    +<a class="jxr_linenumber" name="L1102" href="#L1102">1102</a>                 substitution = typeArgument;
    +<a class="jxr_linenumber" name="L1103" href="#L1103">1103</a>             } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L1104" href="#L1104">1104</a>                 <em class="jxr_comment">// For the intermediate declared type (see below), we need the original type variable corresponding to</em>
    +<a class="jxr_linenumber" name="L1105" href="#L1105">1105</a>                 <em class="jxr_comment">// the formal type parameter. Only original type variables will be replaced by the substitutionVisitor.</em>
    +<a class="jxr_linenumber" name="L1106" href="#L1106">1106</a>                 newArguments[index] = typeParameter.asType();
    +<a class="jxr_linenumber" name="L1107" href="#L1107">1107</a>                 substitution = captureWildcardArgument((WildcardType) typeArgument, typeParameter);
    +<a class="jxr_linenumber" name="L1108" href="#L1108">1108</a>             }
    +<a class="jxr_linenumber" name="L1109" href="#L1109">1109</a>             substitutions.put(typeParameter, substitution);
    +<a class="jxr_linenumber" name="L1110" href="#L1110">1110</a>         }
    +<a class="jxr_linenumber" name="L1111" href="#L1111">1111</a> 
    +<a class="jxr_linenumber" name="L1112" href="#L1112">1112</a>         TypeMirror enclosingType = declaredType.getEnclosingType();
    +<a class="jxr_linenumber" name="L1113" href="#L1113">1113</a> 
    +<a class="jxr_linenumber" name="L1114" href="#L1114">1114</a>         <em class="jxr_comment">// Construct intermediateDeclaredType that already has type variables in its argument list instead of wildcard</em>
    +<a class="jxr_linenumber" name="L1115" href="#L1115">1115</a>         <em class="jxr_comment">// arguments.</em>
    +<a class="jxr_linenumber" name="L1116" href="#L1116">1116</a>         DeclaredType intermediateDeclaredType;
    +<a class="jxr_linenumber" name="L1117" href="#L1117">1117</a>         <strong class="jxr_keyword">if</strong> (enclosingType.getKind() == TypeKind.DECLARED) {
    +<a class="jxr_linenumber" name="L1118" href="#L1118">1118</a>             intermediateDeclaredType = getDeclaredType((DeclaredType) enclosingType, typeDeclaration, newArguments);
    +<a class="jxr_linenumber" name="L1119" href="#L1119">1119</a>         } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L1120" href="#L1120">1120</a>             intermediateDeclaredType = getDeclaredType(typeDeclaration, newArguments);
    +<a class="jxr_linenumber" name="L1121" href="#L1121">1121</a>         }
    +<a class="jxr_linenumber" name="L1122" href="#L1122">1122</a> 
    +<a class="jxr_linenumber" name="L1123" href="#L1123">1123</a>         <strong class="jxr_keyword">return</strong> substitute(intermediateDeclaredType, substitutions);
    +<a class="jxr_linenumber" name="L1124" href="#L1124">1124</a>     }
    +<a class="jxr_linenumber" name="L1125" href="#L1125">1125</a> 
    +<a class="jxr_linenumber" name="L1126" href="#L1126">1126</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1127" href="#L1127">1127</a> <em class="jxr_javadoccomment">     * Returns a new type variable that corresponds to the given formal type parameter and that has the given actual</em>
    +<a class="jxr_linenumber" name="L1128" href="#L1128">1128</a> <em class="jxr_javadoccomment">     * upper and lower bounds.</em>
    +<a class="jxr_linenumber" name="L1129" href="#L1129">1129</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1130" href="#L1130">1130</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This method is primarily needed during capture conversion, in order to create a fresh type variable that</em>
    +<a class="jxr_linenumber" name="L1131" href="#L1131">1131</a> <em class="jxr_javadoccomment">     * overrides the bounds of the formal type parameter it represents. This method is also called during substitution.</em>
    +<a class="jxr_linenumber" name="L1132" href="#L1132">1132</a> <em class="jxr_javadoccomment">     * As an example, given a formal type parameter {@code T extends Object} and an upper bound {@code Number}, this</em>
    +<a class="jxr_linenumber" name="L1133" href="#L1133">1133</a> <em class="jxr_javadoccomment">     * method returns the type variable {@code T} with upper bound {@code Number}.</em>
    +<a class="jxr_linenumber" name="L1134" href="#L1134">1134</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1135" href="#L1135">1135</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This method is not suited for creating type variables with recursive type bounds if these bounds override the</em>
    +<a class="jxr_linenumber" name="L1136" href="#L1136">1136</a> <em class="jxr_javadoccomment">     * bounds of the formal type parameter (as only happens during capture conversion). In order to create such a type</em>
    +<a class="jxr_linenumber" name="L1137" href="#L1137">1137</a> <em class="jxr_javadoccomment">     * variable, this method may be used to create an interim type variable, where the (overridden) upper and lower</em>
    +<a class="jxr_linenumber" name="L1138" href="#L1138">1138</a> <em class="jxr_javadoccomment">     * bounds should only reference the type variable returned by {@link TypeParameterElement#asType()}. As a second</em>
    +<a class="jxr_linenumber" name="L1139" href="#L1139">1139</a> <em class="jxr_javadoccomment">     * step, {@link #substitute(TypeMirror, Map)} may then be used to substitute the original type variable with the</em>
    +<a class="jxr_linenumber" name="L1140" href="#L1140">1140</a> <em class="jxr_javadoccomment">     * interim type variable. The result will be a fresh type variable with the overridden bounds, and these bounds</em>
    +<a class="jxr_linenumber" name="L1141" href="#L1141">1141</a> <em class="jxr_javadoccomment">     * will reference the fresh type variable instead of the original type variable.</em>
    +<a class="jxr_linenumber" name="L1142" href="#L1142">1142</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1143" href="#L1143">1143</a> <em class="jxr_javadoccomment">     * @param typeParameter the formal type parameter</em>
    +<a class="jxr_linenumber" name="L1144" href="#L1144">1144</a> <em class="jxr_javadoccomment">     * @param upperBound the upper bound for the new type variable, may contain recursive references to</em>
    +<a class="jxr_linenumber" name="L1145" href="#L1145">1145</a> <em class="jxr_javadoccomment">     *     {@code typeParameter.asType()}</em>
    +<a class="jxr_linenumber" name="L1146" href="#L1146">1146</a> <em class="jxr_javadoccomment">     * @param lowerBound the lower bound for the new type variable, may contain recursive references to</em>
    +<a class="jxr_linenumber" name="L1147" href="#L1147">1147</a> <em class="jxr_javadoccomment">     *     {@code typeParameter.asType()}</em>
    +<a class="jxr_linenumber" name="L1148" href="#L1148">1148</a> <em class="jxr_javadoccomment">     * @param capturedTypeArgument the wildcard type argument that new type variable captures as part of a capture</em>
    +<a class="jxr_linenumber" name="L1149" href="#L1149">1149</a> <em class="jxr_javadoccomment">     *     conversion (§5.1.10 JLS), or {@code null} if the new type variable is not the result of a capture conversion</em>
    +<a class="jxr_linenumber" name="L1150" href="#L1150">1150</a> <em class="jxr_javadoccomment">     * @return the new type variable</em>
    +<a class="jxr_linenumber" name="L1151" href="#L1151">1151</a> <em class="jxr_javadoccomment">     * @throws NullPointerException if any of the first three arguments is null</em>
    +<a class="jxr_linenumber" name="L1152" href="#L1152">1152</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1153" href="#L1153">1153</a>     <strong class="jxr_keyword">protected</strong> TypeVariable getTypeVariable(TypeParameterElement typeParameter, TypeMirror upperBound,
    +<a class="jxr_linenumber" name="L1154" href="#L1154">1154</a>             TypeMirror lowerBound, @Nullable WildcardType capturedTypeArgument) {
    +<a class="jxr_linenumber" name="L1155" href="#L1155">1155</a>         Objects.requireNonNull(typeParameter);
    +<a class="jxr_linenumber" name="L1156" href="#L1156">1156</a>         Objects.requireNonNull(upperBound);
    +<a class="jxr_linenumber" name="L1157" href="#L1157">1157</a>         Objects.requireNonNull(lowerBound);
    +<a class="jxr_linenumber" name="L1158" href="#L1158">1158</a>         requireValidType(upperBound);
    +<a class="jxr_linenumber" name="L1159" href="#L1159">1159</a>         requireValidType(lowerBound);
    +<a class="jxr_linenumber" name="L1160" href="#L1160">1160</a>         requireValidType(capturedTypeArgument);
    +<a class="jxr_linenumber" name="L1161" href="#L1161">1161</a> 
    +<a class="jxr_linenumber" name="L1162" href="#L1162">1162</a>         TypeVariable typeVariable = createTypeVariable(typeParameter, capturedTypeArgument);
    +<a class="jxr_linenumber" name="L1163" href="#L1163">1163</a>         setTypeVariableBounds(typeVariable, upperBound, lowerBound);
    +<a class="jxr_linenumber" name="L1164" href="#L1164">1164</a>         <strong class="jxr_keyword">return</strong> typeVariable;
    +<a class="jxr_linenumber" name="L1165" href="#L1165">1165</a>     }
    +<a class="jxr_linenumber" name="L1166" href="#L1166">1166</a> 
    +<a class="jxr_linenumber" name="L1167" href="#L1167">1167</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1168" href="#L1168">1168</a> <em class="jxr_javadoccomment">     * Creates a new &lt;em&gt;unfinished&lt;/em&gt; type variable for the given formal parameter.</em>
    +<a class="jxr_linenumber" name="L1169" href="#L1169">1169</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1170" href="#L1170">1170</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Whenever this method is called within this class, the returned type variable is guaranteed to be passed to</em>
    +<a class="jxr_linenumber" name="L1171" href="#L1171">1171</a> <em class="jxr_javadoccomment">     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} before being used as a {@link TypeVariable}</em>
    +<a class="jxr_linenumber" name="L1172" href="#L1172">1172</a> <em class="jxr_javadoccomment">     * instance. That is, the returned type variable is considered to be under construction until being passed to</em>
    +<a class="jxr_linenumber" name="L1173" href="#L1173">1173</a> <em class="jxr_javadoccomment">     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)}, and only after that method call, the type</em>
    +<a class="jxr_linenumber" name="L1174" href="#L1174">1174</a> <em class="jxr_javadoccomment">     * variable will have to satisfy the contract specified by interface {@link TypeVariable} and its super-interfaces.</em>
    +<a class="jxr_linenumber" name="L1175" href="#L1175">1175</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1176" href="#L1176">1176</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Before {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} is called on the returned</em>
    +<a class="jxr_linenumber" name="L1177" href="#L1177">1177</a> <em class="jxr_javadoccomment">     * {@link TypeVariable}, calling either {@link TypeVariable#getUpperBound()} or {@link TypeVariable#getLowerBound()}</em>
    +<a class="jxr_linenumber" name="L1178" href="#L1178">1178</a> <em class="jxr_javadoccomment">     * must trigger an {@link IllegalStateException}.</em>
    +<a class="jxr_linenumber" name="L1179" href="#L1179">1179</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1180" href="#L1180">1180</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Note that the previous paragraph does not guarantee that</em>
    +<a class="jxr_linenumber" name="L1181" href="#L1181">1181</a> <em class="jxr_javadoccomment">     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} is always called on the newly returned</em>
    +<a class="jxr_linenumber" name="L1182" href="#L1182">1182</a> <em class="jxr_javadoccomment">     * type-variable instance. If any exception occurs before the new type-variable could be used, then</em>
    +<a class="jxr_linenumber" name="L1183" href="#L1183">1183</a> <em class="jxr_javadoccomment">     * {@link #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)} may not be called (even if the exception is</em>
    +<a class="jxr_linenumber" name="L1184" href="#L1184">1184</a> <em class="jxr_javadoccomment">     * unrelated to the construction of the new type-variable instance).</em>
    +<a class="jxr_linenumber" name="L1185" href="#L1185">1185</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1186" href="#L1186">1186</a> <em class="jxr_javadoccomment">     * &lt;p&gt;The {@link TypeVariable} interface does not provide access to captured wildcard type arguments. It can be</em>
    +<a class="jxr_linenumber" name="L1187" href="#L1187">1187</a> <em class="jxr_javadoccomment">     * retrieved by calling {@link #capturedTypeArgument(TypeVariable)} instead.</em>
    +<a class="jxr_linenumber" name="L1188" href="#L1188">1188</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1189" href="#L1189">1189</a> <em class="jxr_javadoccomment">     * @param typeParameter the formal type parameter</em>
    +<a class="jxr_linenumber" name="L1190" href="#L1190">1190</a> <em class="jxr_javadoccomment">     * @param capturedTypeArgument the wildcard type argument that new type variable captures as part of a capture</em>
    +<a class="jxr_linenumber" name="L1191" href="#L1191">1191</a> <em class="jxr_javadoccomment">     *     conversion (§5.1.10 JLS), or {@code null} if the new type variable is not the result of a capture conversion</em>
    +<a class="jxr_linenumber" name="L1192" href="#L1192">1192</a> <em class="jxr_javadoccomment">     * @return new unfinished type variable for the given formal parameter, which may not yet satisfy the contracts</em>
    +<a class="jxr_linenumber" name="L1193" href="#L1193">1193</a> <em class="jxr_javadoccomment">     *     of {@link TypeVariable}</em>
    +<a class="jxr_linenumber" name="L1194" href="#L1194">1194</a> <em class="jxr_javadoccomment">     * @see #setTypeVariableBounds(TypeVariable, TypeMirror, TypeMirror)</em>
    +<a class="jxr_linenumber" name="L1195" href="#L1195">1195</a> <em class="jxr_javadoccomment">     * @see #capturedTypeArgument(TypeVariable)</em>
    +<a class="jxr_linenumber" name="L1196" href="#L1196">1196</a> <em class="jxr_javadoccomment">     * @throws NullPointerException if {@code typeParameter} is null</em>
    +<a class="jxr_linenumber" name="L1197" href="#L1197">1197</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1198" href="#L1198">1198</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">abstract</strong> TypeVariable createTypeVariable(TypeParameterElement typeParameter,
    +<a class="jxr_linenumber" name="L1199" href="#L1199">1199</a>         @Nullable WildcardType capturedTypeArgument);
    +<a class="jxr_linenumber" name="L1200" href="#L1200">1200</a> 
    +<a class="jxr_linenumber" name="L1201" href="#L1201">1201</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1202" href="#L1202">1202</a> <em class="jxr_javadoccomment">     * Sets the bounds of a type variable previously returned by</em>
    +<a class="jxr_linenumber" name="L1203" href="#L1203">1203</a> <em class="jxr_javadoccomment">     * {@link #createTypeVariable(TypeParameterElement, WildcardType)}.</em>
    +<a class="jxr_linenumber" name="L1204" href="#L1204">1204</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1205" href="#L1205">1205</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Before an (unfinished) type-variable instance returned by</em>
    +<a class="jxr_linenumber" name="L1206" href="#L1206">1206</a> <em class="jxr_javadoccomment">     * {@link #createTypeVariable(TypeParameterElement, WildcardType)} is used by this class, this method is guaranteed</em>
    +<a class="jxr_linenumber" name="L1207" href="#L1207">1207</a> <em class="jxr_javadoccomment">     * to be called exactly once.</em>
    +<a class="jxr_linenumber" name="L1208" href="#L1208">1208</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1209" href="#L1209">1209</a> <em class="jxr_javadoccomment">     * &lt;p&gt;Implementations that create effectively immutable {@link TypeMirror} instances may use this method to "freeze"</em>
    +<a class="jxr_linenumber" name="L1210" href="#L1210">1210</a> <em class="jxr_javadoccomment">     * the given type-variable instance.</em>
    +<a class="jxr_linenumber" name="L1211" href="#L1211">1211</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1212" href="#L1212">1212</a> <em class="jxr_javadoccomment">     * @param typeVariable type variable previously returned by</em>
    +<a class="jxr_linenumber" name="L1213" href="#L1213">1213</a> <em class="jxr_javadoccomment">     *     {@link #createTypeVariable(TypeParameterElement, WildcardType)}</em>
    +<a class="jxr_linenumber" name="L1214" href="#L1214">1214</a> <em class="jxr_javadoccomment">     * @param upperBound Upper bound for the given type variable. If no explicit upper bound is used, a</em>
    +<a class="jxr_linenumber" name="L1215" href="#L1215">1215</a> <em class="jxr_javadoccomment">     *     {@link DeclaredType} representing {@link Object} will be passed.</em>
    +<a class="jxr_linenumber" name="L1216" href="#L1216">1216</a> <em class="jxr_javadoccomment">     * @param lowerBound Lower bound for the given type variable. This may a {@link NullType} instance, unless capture</em>
    +<a class="jxr_linenumber" name="L1217" href="#L1217">1217</a> <em class="jxr_javadoccomment">     *     conversion produced a type variable with a non-trivial lower bound.</em>
    +<a class="jxr_linenumber" name="L1218" href="#L1218">1218</a> <em class="jxr_javadoccomment">     * @see #createTypeVariable(TypeParameterElement, WildcardType)</em>
    +<a class="jxr_linenumber" name="L1219" href="#L1219">1219</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1220" href="#L1220">1220</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">void</strong> setTypeVariableBounds(TypeVariable typeVariable, TypeMirror upperBound,
    +<a class="jxr_linenumber" name="L1221" href="#L1221">1221</a>         TypeMirror lowerBound);
    +<a class="jxr_linenumber" name="L1222" href="#L1222">1222</a> 
    +<a class="jxr_linenumber" name="L1223" href="#L1223">1223</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1224" href="#L1224">1224</a> <em class="jxr_javadoccomment">     * Returns the captured wildcard type argument of the given type variable, or null if the given type variable is not</em>
    +<a class="jxr_linenumber" name="L1225" href="#L1225">1225</a> <em class="jxr_javadoccomment">     * the result of a capture conversion.</em>
    +<a class="jxr_linenumber" name="L1226" href="#L1226">1226</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1227" href="#L1227">1227</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This method returns the wildcard type argument that was previously passed to</em>
    +<a class="jxr_linenumber" name="L1228" href="#L1228">1228</a> <em class="jxr_javadoccomment">     * {@link #createTypeVariable(TypeParameterElement, WildcardType)}.</em>
    +<a class="jxr_linenumber" name="L1229" href="#L1229">1229</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1230" href="#L1230">1230</a> <em class="jxr_javadoccomment">     * @param typeVariable the type variable that may be the result of a capture conversion</em>
    +<a class="jxr_linenumber" name="L1231" href="#L1231">1231</a> <em class="jxr_javadoccomment">     * @return the captured wildcard type argument, or null if not applicable</em>
    +<a class="jxr_linenumber" name="L1232" href="#L1232">1232</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1233" href="#L1233">1233</a>     @Nullable
    +<a class="jxr_linenumber" name="L1234" href="#L1234">1234</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">abstract</strong> WildcardType capturedTypeArgument(TypeVariable typeVariable);
    +<a class="jxr_linenumber" name="L1235" href="#L1235">1235</a> 
    +<a class="jxr_linenumber" name="L1236" href="#L1236">1236</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1237" href="#L1237">1237</a> <em class="jxr_javadoccomment">     * Returns a new intersection type. At least one bounds needs to be given.</em>
    +<a class="jxr_linenumber" name="L1238" href="#L1238">1238</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1239" href="#L1239">1239</a> <em class="jxr_javadoccomment">     * @param bounds the bounds of the new intersection type</em>
    +<a class="jxr_linenumber" name="L1240" href="#L1240">1240</a> <em class="jxr_javadoccomment">     * @return the new intersection type</em>
    +<a class="jxr_linenumber" name="L1241" href="#L1241">1241</a> <em class="jxr_javadoccomment">     * @throws IllegalArgumentException if the given array is empty</em>
    +<a class="jxr_linenumber" name="L1242" href="#L1242">1242</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1243" href="#L1243">1243</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">abstract</strong> <a href="../../../../net/florianschoppmann/java/type/IntersectionType.html">IntersectionType</a> getIntersectionType(TypeMirror... bounds);
    +<a class="jxr_linenumber" name="L1244" href="#L1244">1244</a> 
    +<a class="jxr_linenumber" name="L1245" href="#L1245">1245</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1246" href="#L1246">1246</a> <em class="jxr_javadoccomment">     * Visitor of {@link TypeMirror} instances that appends the {@link String} representation to the</em>
    +<a class="jxr_linenumber" name="L1247" href="#L1247">1247</a> <em class="jxr_javadoccomment">     * {@link StringBuilder} instance passed as visitor argument.</em>
    +<a class="jxr_linenumber" name="L1248" href="#L1248">1248</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1249" href="#L1249">1249</a> <em class="jxr_javadoccomment">     * &lt;p&gt;This visitor is only used within this class and only on &lt;em&gt;valid&lt;/em&gt; {@link TypeMirror} instances. Hence, it</em>
    +<a class="jxr_linenumber" name="L1250" href="#L1250">1250</a> <em class="jxr_javadoccomment">     * can be asserted that the visitor parameter is always non-null.</em>
    +<a class="jxr_linenumber" name="L1251" href="#L1251">1251</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1252" href="#L1252">1252</a> <em class="jxr_javadoccomment">     * @see #requireValidType(TypeMirror)</em>
    +<a class="jxr_linenumber" name="L1253" href="#L1253">1253</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1254" href="#L1254">1254</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../net/florianschoppmann/java/type/AbstractTypes.html">ToStringVisitor</a> <strong class="jxr_keyword">extends</strong> ExtendedTypeKindVisitor7&lt;Void, StringBuilder&gt; {
    +<a class="jxr_linenumber" name="L1255" href="#L1255">1255</a>         @Override
    +<a class="jxr_linenumber" name="L1256" href="#L1256">1256</a>         <strong class="jxr_keyword">public</strong> Void visitPrimitive(PrimitiveType primitiveType, @Nullable StringBuilder stringBuilder) {
    +<a class="jxr_linenumber" name="L1257" href="#L1257">1257</a>             assert stringBuilder != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1258" href="#L1258">1258</a>             stringBuilder.append(primitiveType.getKind().toString().toLowerCase());
    +<a class="jxr_linenumber" name="L1259" href="#L1259">1259</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1260" href="#L1260">1260</a>         }
    +<a class="jxr_linenumber" name="L1261" href="#L1261">1261</a> 
    +<a class="jxr_linenumber" name="L1262" href="#L1262">1262</a>         @Override
    +<a class="jxr_linenumber" name="L1263" href="#L1263">1263</a>         <strong class="jxr_keyword">public</strong> Void visitNull(NullType nullType, @Nullable StringBuilder stringBuilder) {
    +<a class="jxr_linenumber" name="L1264" href="#L1264">1264</a>             assert stringBuilder != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1265" href="#L1265">1265</a>             stringBuilder.append(<span class="jxr_string">"null"</span>);
    +<a class="jxr_linenumber" name="L1266" href="#L1266">1266</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1267" href="#L1267">1267</a>         }
    +<a class="jxr_linenumber" name="L1268" href="#L1268">1268</a> 
    +<a class="jxr_linenumber" name="L1269" href="#L1269">1269</a>         @Override
    +<a class="jxr_linenumber" name="L1270" href="#L1270">1270</a>         <strong class="jxr_keyword">public</strong> Void visitNoType(NoType noType, @Nullable StringBuilder stringBuilder) {
    +<a class="jxr_linenumber" name="L1271" href="#L1271">1271</a>             assert stringBuilder != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1272" href="#L1272">1272</a>             stringBuilder.append(noType.getKind().toString().toLowerCase());
    +<a class="jxr_linenumber" name="L1273" href="#L1273">1273</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1274" href="#L1274">1274</a>         }
    +<a class="jxr_linenumber" name="L1275" href="#L1275">1275</a> 
    +<a class="jxr_linenumber" name="L1276" href="#L1276">1276</a>         @Override
    +<a class="jxr_linenumber" name="L1277" href="#L1277">1277</a>         <strong class="jxr_keyword">public</strong> Void visitDeclared(DeclaredType declaredType, @Nullable StringBuilder stringBuilder) {
    +<a class="jxr_linenumber" name="L1278" href="#L1278">1278</a>             assert stringBuilder != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1279" href="#L1279">1279</a>             TypeMirror enclosingType = declaredType.getEnclosingType();
    +<a class="jxr_linenumber" name="L1280" href="#L1280">1280</a>             TypeElement typeElement = (TypeElement) declaredType.asElement();
    +<a class="jxr_linenumber" name="L1281" href="#L1281">1281</a>             <strong class="jxr_keyword">if</strong> (enclosingType.getKind() == TypeKind.DECLARED) {
    +<a class="jxr_linenumber" name="L1282" href="#L1282">1282</a>                 visitDeclared((DeclaredType) enclosingType, stringBuilder);
    +<a class="jxr_linenumber" name="L1283" href="#L1283">1283</a>                 stringBuilder.append('.').append(typeElement.getSimpleName());
    +<a class="jxr_linenumber" name="L1284" href="#L1284">1284</a>             } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L1285" href="#L1285">1285</a>                 stringBuilder.append(typeElement.getQualifiedName());
    +<a class="jxr_linenumber" name="L1286" href="#L1286">1286</a>             }
    +<a class="jxr_linenumber" name="L1287" href="#L1287">1287</a> 
    +<a class="jxr_linenumber" name="L1288" href="#L1288">1288</a>             List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; typeArguments = declaredType.getTypeArguments();
    +<a class="jxr_linenumber" name="L1289" href="#L1289">1289</a>             <strong class="jxr_keyword">if</strong> (!typeArguments.isEmpty()) {
    +<a class="jxr_linenumber" name="L1290" href="#L1290">1290</a>                 stringBuilder.append('&lt;');
    +<a class="jxr_linenumber" name="L1291" href="#L1291">1291</a>                 appendList(stringBuilder, typeArguments, <span class="jxr_string">", "</span>);
    +<a class="jxr_linenumber" name="L1292" href="#L1292">1292</a>                 stringBuilder.append('&gt;');
    +<a class="jxr_linenumber" name="L1293" href="#L1293">1293</a>             }
    +<a class="jxr_linenumber" name="L1294" href="#L1294">1294</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1295" href="#L1295">1295</a>         }
    +<a class="jxr_linenumber" name="L1296" href="#L1296">1296</a> 
    +<a class="jxr_linenumber" name="L1297" href="#L1297">1297</a>         @Override
    +<a class="jxr_linenumber" name="L1298" href="#L1298">1298</a>         <strong class="jxr_keyword">public</strong> Void visitArray(ArrayType arrayType, @Nullable StringBuilder stringBuilder) {
    +<a class="jxr_linenumber" name="L1299" href="#L1299">1299</a>             assert stringBuilder != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1300" href="#L1300">1300</a>             arrayType.getComponentType().accept(<strong class="jxr_keyword">this</strong>, stringBuilder);
    +<a class="jxr_linenumber" name="L1301" href="#L1301">1301</a>             stringBuilder.append(<span class="jxr_string">"[]"</span>);
    +<a class="jxr_linenumber" name="L1302" href="#L1302">1302</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1303" href="#L1303">1303</a>         }
    +<a class="jxr_linenumber" name="L1304" href="#L1304">1304</a> 
    +<a class="jxr_linenumber" name="L1305" href="#L1305">1305</a>         @Override
    +<a class="jxr_linenumber" name="L1306" href="#L1306">1306</a>         <strong class="jxr_keyword">public</strong> Void visitTypeVariable(TypeVariable typeVariable, @Nullable StringBuilder stringBuilder) {
    +<a class="jxr_linenumber" name="L1307" href="#L1307">1307</a>             assert stringBuilder != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1308" href="#L1308">1308</a>             @Nullable WildcardType capturedTypeArgument = capturedTypeArgument(typeVariable);
    +<a class="jxr_linenumber" name="L1309" href="#L1309">1309</a>             <strong class="jxr_keyword">if</strong> (capturedTypeArgument != <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L1310" href="#L1310">1310</a>                 stringBuilder.append(<span class="jxr_string">"capture&lt;"</span>);
    +<a class="jxr_linenumber" name="L1311" href="#L1311">1311</a>                 capturedTypeArgument.accept(<strong class="jxr_keyword">this</strong>, stringBuilder);
    +<a class="jxr_linenumber" name="L1312" href="#L1312">1312</a>                 stringBuilder.append('&gt;');
    +<a class="jxr_linenumber" name="L1313" href="#L1313">1313</a>             } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L1314" href="#L1314">1314</a>                 stringBuilder.append(typeVariable.asElement().getSimpleName());
    +<a class="jxr_linenumber" name="L1315" href="#L1315">1315</a>             }
    +<a class="jxr_linenumber" name="L1316" href="#L1316">1316</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1317" href="#L1317">1317</a>         }
    +<a class="jxr_linenumber" name="L1318" href="#L1318">1318</a> 
    +<a class="jxr_linenumber" name="L1319" href="#L1319">1319</a>         @Override
    +<a class="jxr_linenumber" name="L1320" href="#L1320">1320</a>         <strong class="jxr_keyword">public</strong> Void visitWildcard(WildcardType wildcardTypeArgument, @Nullable StringBuilder stringBuilder) {
    +<a class="jxr_linenumber" name="L1321" href="#L1321">1321</a>             assert stringBuilder != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1322" href="#L1322">1322</a>             stringBuilder.append('?');
    +<a class="jxr_linenumber" name="L1323" href="#L1323">1323</a>             @Nullable TypeMirror extendsBound = wildcardTypeArgument.getExtendsBound();
    +<a class="jxr_linenumber" name="L1324" href="#L1324">1324</a>             <strong class="jxr_keyword">if</strong> (extendsBound != <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L1325" href="#L1325">1325</a>                 stringBuilder.append(<span class="jxr_string">" extends "</span>);
    +<a class="jxr_linenumber" name="L1326" href="#L1326">1326</a>                 extendsBound.accept(<strong class="jxr_keyword">this</strong>, stringBuilder);
    +<a class="jxr_linenumber" name="L1327" href="#L1327">1327</a>             }
    +<a class="jxr_linenumber" name="L1328" href="#L1328">1328</a>             @Nullable TypeMirror superBound = wildcardTypeArgument.getSuperBound();
    +<a class="jxr_linenumber" name="L1329" href="#L1329">1329</a>             <strong class="jxr_keyword">if</strong> (superBound != <strong class="jxr_keyword">null</strong>) {
    +<a class="jxr_linenumber" name="L1330" href="#L1330">1330</a>                 stringBuilder.append(<span class="jxr_string">" super "</span>);
    +<a class="jxr_linenumber" name="L1331" href="#L1331">1331</a>                 superBound.accept(<strong class="jxr_keyword">this</strong>, stringBuilder);
    +<a class="jxr_linenumber" name="L1332" href="#L1332">1332</a>             }
    +<a class="jxr_linenumber" name="L1333" href="#L1333">1333</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1334" href="#L1334">1334</a>         }
    +<a class="jxr_linenumber" name="L1335" href="#L1335">1335</a> 
    +<a class="jxr_linenumber" name="L1336" href="#L1336">1336</a>         @Override
    +<a class="jxr_linenumber" name="L1337" href="#L1337">1337</a>         <strong class="jxr_keyword">public</strong> Void visitIntersection(<a href="../../../../net/florianschoppmann/java/type/IntersectionType.html">IntersectionType</a> intersectionType, @Nullable StringBuilder stringBuilder) {
    +<a class="jxr_linenumber" name="L1338" href="#L1338">1338</a>             assert stringBuilder != <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1339" href="#L1339">1339</a>             appendList(stringBuilder, intersectionType.getBounds(), <span class="jxr_string">" &amp; "</span>);
    +<a class="jxr_linenumber" name="L1340" href="#L1340">1340</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
    +<a class="jxr_linenumber" name="L1341" href="#L1341">1341</a>         }
    +<a class="jxr_linenumber" name="L1342" href="#L1342">1342</a> 
    +<a class="jxr_linenumber" name="L1343" href="#L1343">1343</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> appendList(StringBuilder stringBuilder, List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; types, String glue) {
    +<a class="jxr_linenumber" name="L1344" href="#L1344">1344</a>             assert !types.isEmpty();
    +<a class="jxr_linenumber" name="L1345" href="#L1345">1345</a> 
    +<a class="jxr_linenumber" name="L1346" href="#L1346">1346</a>             <strong class="jxr_keyword">boolean</strong> first = <strong class="jxr_keyword">true</strong>;
    +<a class="jxr_linenumber" name="L1347" href="#L1347">1347</a>             <strong class="jxr_keyword">for</strong> (TypeMirror type: types) {
    +<a class="jxr_linenumber" name="L1348" href="#L1348">1348</a>                 <strong class="jxr_keyword">if</strong> (first) {
    +<a class="jxr_linenumber" name="L1349" href="#L1349">1349</a>                     first = false;
    +<a class="jxr_linenumber" name="L1350" href="#L1350">1350</a>                 } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L1351" href="#L1351">1351</a>                     stringBuilder.append(glue);
    +<a class="jxr_linenumber" name="L1352" href="#L1352">1352</a>                 }
    +<a class="jxr_linenumber" name="L1353" href="#L1353">1353</a>                 type.accept(<strong class="jxr_keyword">this</strong>, stringBuilder);
    +<a class="jxr_linenumber" name="L1354" href="#L1354">1354</a>             }
    +<a class="jxr_linenumber" name="L1355" href="#L1355">1355</a>         }
    +<a class="jxr_linenumber" name="L1356" href="#L1356">1356</a>     }
    +<a class="jxr_linenumber" name="L1357" href="#L1357">1357</a> 
    +<a class="jxr_linenumber" name="L1358" href="#L1358">1358</a>     <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L1359" href="#L1359">1359</a> <em class="jxr_javadoccomment">     * Returns the canonical string representation of the given type.</em>
    +<a class="jxr_linenumber" name="L1360" href="#L1360">1360</a> <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L1361" href="#L1361">1361</a> <em class="jxr_javadoccomment">     * @param type type</em>
    +<a class="jxr_linenumber" name="L1362" href="#L1362">1362</a> <em class="jxr_javadoccomment">     * @return canonical string representation of the given type</em>
    +<a class="jxr_linenumber" name="L1363" href="#L1363">1363</a> <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L1364" href="#L1364">1364</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> String toString(TypeMirror type) {
    +<a class="jxr_linenumber" name="L1365" href="#L1365">1365</a>         requireValidType(Objects.requireNonNull(type));
    +<a class="jxr_linenumber" name="L1366" href="#L1366">1366</a> 
    +<a class="jxr_linenumber" name="L1367" href="#L1367">1367</a>         StringBuilder stringBuilder = <strong class="jxr_keyword">new</strong> StringBuilder(DEFAULT_STRING_BUILDER_SIZE);
    +<a class="jxr_linenumber" name="L1368" href="#L1368">1368</a>         type.accept(toStringVisitor, stringBuilder);
    +<a class="jxr_linenumber" name="L1369" href="#L1369">1369</a>         <strong class="jxr_keyword">return</strong> stringBuilder.toString();
    +<a class="jxr_linenumber" name="L1370" href="#L1370">1370</a>     }
    +<a class="jxr_linenumber" name="L1371" href="#L1371">1371</a> }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/type/AnnotatedConstruct.html b/xref/net/florianschoppmann/java/type/AnnotatedConstruct.html
    new file mode 100644
    index 0000000..ba70241
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/type/AnnotatedConstruct.html
    @@ -0,0 +1,61 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>AnnotatedConstruct xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/type/AnnotatedConstruct.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.type;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.element.AnnotationMirror;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> java.lang.annotation.Annotation;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_javadoccomment"> * Represents a construct that can be annotated, equivalent to {@code javax.lang.model.AnnotatedConstruct} in JDK 8.</em>
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;This interface's sole purpose is to ensure source compatibility with Java 7 and 8, despite the fact that</em>
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_javadoccomment"> * {@code javax.lang.model.AnnotatedConstruct} was retrofitted into the Java language model hierarchy in JDK 8. See the</em>
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_javadoccomment"> * &lt;a href="<a href="http://docs.oracle.com/javase/8/docs/api/javax/lang/model/AnnotatedConstruct.html" target="alexandria_uri">http://docs.oracle.com/javase/8/docs/api/javax/lang/model/AnnotatedConstruct.html</a>"&gt;JDK 8 JavaDoc for</em>
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_javadoccomment"> * {@code javax.lang.model.AnnotatedConstruct}&lt;/a&gt; for more information.</em>
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;Implementations may implement both {@code javax.lang.model.AnnotatedConstruct} and this interface. At some time</em>
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_javadoccomment"> * in the future, when Java 7 compatibility is no longer required, this interface will be deprecated and eventually</em>
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_javadoccomment"> * removed in favor of {@code javax.lang.model.AnnotatedConstruct}.</em>
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/type/AnnotatedConstruct.html">AnnotatedConstruct</a> {
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_javadoccomment">     * Returns the annotations that are &lt;em&gt;directly present&lt;/em&gt; on this construct.</em>
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <em class="jxr_javadoccomment">     * @return the annotations &lt;em&gt;directly present&lt;/em&gt; on this construct; an empty list if there are none</em>
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>      List&lt;? <strong class="jxr_keyword">extends</strong> AnnotationMirror&gt; getAnnotationMirrors();
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <em class="jxr_javadoccomment">     * Returns this construct's annotation of the specified type if such an annotation is &lt;em&gt;present&lt;/em&gt;, else</em>
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment">     * {@code null}.</em>
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">     * @param &lt;A&gt; the annotation type</em>
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">     * @param annotationType the {@code Class} object corresponding to the annotation type</em>
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">     * @return this construct's annotation for the specified annotation type if present, else {@code null}</em>
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      @Nullable
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      &lt;A <strong class="jxr_keyword">extends</strong> Annotation&gt; A getAnnotation(Class&lt;A&gt; annotationType);
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     * Returns annotations that are &lt;em&gt;associated&lt;/em&gt; with this construct.</em>
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     * @param &lt;A&gt; the annotation type</em>
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     * @param annotationType the {@code Class} object corresponding to the annotation type</em>
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     * @return this construct's annotations for the specified annotation type if present on this construct, else an</em>
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     *     empty array</em>
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      &lt;A <strong class="jxr_keyword">extends</strong> Annotation&gt; A[] getAnnotationsByType(Class&lt;A&gt; annotationType);
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html b/xref/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html
    new file mode 100644
    index 0000000..509088e
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html
    @@ -0,0 +1,106 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>ExtendedTypeKindVisitor7 xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.type;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nullable;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.annotation.processing.SupportedSourceVersion;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeMirror;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.UnknownTypeException;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.util.TypeKindVisitor7;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <strong class="jxr_keyword">import</strong> java.util.Objects;
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> javax.lang.model.SourceVersion.RELEASE_7;
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_javadoccomment"> * A visitor of types that supports {@link IntersectionType}, but otherwise behaves as {@link TypeKindVisitor7}.</em>
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;This visitor provides a new method {@link #visitIntersection(IntersectionType, Object)} in order to visit</em>
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_javadoccomment"> * instances of {@link IntersectionType}. At some time in the future, when Java 7 compatibility is no longer</em>
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_javadoccomment"> * required, {@link IntersectionType} and this class will be removed and replaced by their Java 8 equivalents.</em>
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_javadoccomment"> * @param &lt;R&gt; The return type of this visitor's methods. Use {@link Void} for visitors that do not need to return</em>
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_javadoccomment"> *     results.</em>
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_javadoccomment"> * @param &lt;P&gt; The type of the additional parameter to this visitor's methods. Use {@code Void} for visitors that do</em>
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_javadoccomment"> *     not need an additional parameter.</em>
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  @SupportedSourceVersion(RELEASE_7)
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> ExtendedTypeKindVisitor7&lt;R, P&gt; <strong class="jxr_keyword">extends</strong> TypeKindVisitor7&lt;R, P&gt; {
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment">     * Constructor for concrete subclasses to call; uses {@code null} for the default value.</em>
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>      <strong class="jxr_keyword">protected</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html">ExtendedTypeKindVisitor7</a>() {
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>          <strong class="jxr_keyword">super</strong>(<strong class="jxr_keyword">null</strong>);
    +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      }
    +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
    +<a class="jxr_linenumber" name="L33" href="#L33">33</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">     * Constructor for concrete subclasses to call; uses the argument for the default value.</em>
    +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment">     * @param defaultValue the value to assign to {@link #DEFAULT_VALUE}</em>
    +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <strong class="jxr_keyword">protected</strong> <a href="../../../../net/florianschoppmann/java/type/ExtendedTypeKindVisitor7.html">ExtendedTypeKindVisitor7</a>(R defaultValue) {
    +<a class="jxr_linenumber" name="L39" href="#L39">39</a>          <strong class="jxr_keyword">super</strong>(defaultValue);
    +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      }
    +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
    +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     * Visits an unknown kind of type or an {@link IntersectionType}, which did not exist in the {@link TypeMirror}</em>
    +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     * hierarchy of Java 7.</em>
    +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;This method is final. Use {@link #visitOther(TypeMirror, Object)} to override the default behavior when</em>
    +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     * visiting an unknown type.</em>
    +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     * @param typeMirror the type to visit</em>
    +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     * @param parameter a visitor-specified parameter</em>
    +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     * @return a visitor-specified result</em>
    +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     * @throws UnknownTypeException a visitor implementation may optionally throw this exception</em>
    +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      @Override
    +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      @Nullable
    +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> R visitUnknown(TypeMirror typeMirror, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          Objects.requireNonNull(typeMirror);
    +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          <strong class="jxr_keyword">if</strong> (typeMirror instanceof IntersectionType &amp;&amp; ((IntersectionType) typeMirror).isIntersectionType()) {
    +<a class="jxr_linenumber" name="L59" href="#L59">59</a>              <strong class="jxr_keyword">return</strong> visitIntersection((IntersectionType) typeMirror, parameter);
    +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          } <strong class="jxr_keyword">else</strong> {
    +<a class="jxr_linenumber" name="L61" href="#L61">61</a>              <strong class="jxr_keyword">return</strong> visitOther(typeMirror, parameter);
    +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          }
    +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      }
    +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
    +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     * Visits an unknown kind of type. This can occur if the language evolves and new kinds of types are added to the</em>
    +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     * {@link TypeMirror} hierarchy.</em>
    +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;The default implementation of this method in {@code TypeKindVisitor7WithIntersectionType} will always throw</em>
    +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  <em class="jxr_javadoccomment">     * {@link UnknownTypeException}. This behavior is not required of a subclass.</em>
    +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     * @param typeMirror the type to visit</em>
    +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     * @param parameter a visitor-specified parameter</em>
    +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     * @return a visitor-specified result</em>
    +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     * @throws UnknownTypeException a visitor implementation may optionally throw this exception</em>
    +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L77" href="#L77">77</a>      @Nullable
    +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      <strong class="jxr_keyword">public</strong> R visitOther(TypeMirror typeMirror, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnknownTypeException(typeMirror, parameter);
    +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      }
    +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  
    +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     * Visits an intersection type by calling {@link #defaultAction(TypeMirror, Object)}.</em>
    +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     * @param intersectionType the intersection type to visit</em>
    +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     * @param parameter a visitor-specified parameter</em>
    +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  <em class="jxr_javadoccomment">     * @return the result of {@code defaultAction}</em>
    +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L89" href="#L89">89</a>      @Nullable
    +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      <strong class="jxr_keyword">public</strong> R visitIntersection(<a href="../../../../net/florianschoppmann/java/type/IntersectionType.html">IntersectionType</a> intersectionType, @Nullable P parameter) {
    +<a class="jxr_linenumber" name="L91" href="#L91">91</a>          <strong class="jxr_keyword">return</strong> defaultAction(intersectionType, parameter);
    +<a class="jxr_linenumber" name="L92" href="#L92">92</a>      }
    +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/type/IntersectionType.html b/xref/net/florianschoppmann/java/type/IntersectionType.html
    new file mode 100644
    index 0000000..129209d
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/type/IntersectionType.html
    @@ -0,0 +1,43 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>IntersectionType xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/type/IntersectionType.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.type;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.lang.model.type.TypeMirror;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> java.util.List;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_javadoccomment"> * Represents an intersection type, equivalent to {@code javax.lang.model.type.IntersectionType} in JDK 8.</em>
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_javadoccomment"> * &lt;p&gt;Implementations may implement both {@code javax.lang.model.type.IntersectionType} and this interface. At some time</em>
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_javadoccomment"> * in the future, when Java 7 compatibility is no longer required, this interface will be deprecated and eventually</em>
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_javadoccomment"> * removed in favor of {@code javax.lang.model.type.IntersectionType}.</em>
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/type/IntersectionType.html">IntersectionType</a> <strong class="jxr_keyword">extends</strong> TypeMirror, <a href="../../../../net/florianschoppmann/java/type/AnnotatedConstruct.html">AnnotatedConstruct</a> {
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_javadoccomment">     * Return the bounds comprising this intersection type.</em>
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_javadoccomment">     * @return the bounds of this intersection types.</em>
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>      List&lt;? <strong class="jxr_keyword">extends</strong> TypeMirror&gt; getBounds();
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>      <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_javadoccomment">     * Returns whether this type mirror represents an intersection type.</em>
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;Since implementations may choose to implement multiple {@link TypeMirror} sub-interfaces at the same time,</em>
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  <em class="jxr_javadoccomment">     * this method exists so that an object can explicitly indicate whether it represents an intersection type.</em>
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">     *</em>
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment">     * @return whether this type mirror represents an intersection type</em>
    +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment">     */</em>
    +<a class="jxr_linenumber" name="L29" href="#L29">29</a>      <strong class="jxr_keyword">boolean</strong> isIntersectionType();
    +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/type/NonNullByDefault.html b/xref/net/florianschoppmann/java/type/NonNullByDefault.html
    new file mode 100644
    index 0000000..2736cac
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/type/NonNullByDefault.html
    @@ -0,0 +1,40 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +<title>NonNullByDefault xref</title>
    +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
    +</head>
    +<body>
    +<div id="overview"><a href="../../../../../apidocs/net/florianschoppmann/java/type/NonNullByDefault.html">View Javadoc</a></div><pre>
    +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <strong class="jxr_keyword">package</strong> net.florianschoppmann.java.type;
    +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   
    +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <strong class="jxr_keyword">import</strong> javax.annotation.Nonnull;
    +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <strong class="jxr_keyword">import</strong> javax.annotation.meta.TypeQualifierDefault;
    +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <strong class="jxr_keyword">import</strong> java.lang.annotation.ElementType;
    +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <strong class="jxr_keyword">import</strong> java.lang.annotation.Retention;
    +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <strong class="jxr_keyword">import</strong> java.lang.annotation.RetentionPolicy;
    +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   
    +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_javadoccomment">/**</em>
    +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_javadoccomment"> * Annotation to define that all contained entities for which a {@code null} annotation is otherwise lacking should be</em>
    +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_javadoccomment"> * considered as {@link Nonnull}.</em>
    +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_javadoccomment"> *</em>
    +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;This annotation can be applied to all element types.</em>
    +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_javadoccomment"> */</em>
    +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  @TypeQualifierDefault({
    +<a class="jxr_linenumber" name="L16" href="#L16">16</a>      ElementType.ANNOTATION_TYPE,
    +<a class="jxr_linenumber" name="L17" href="#L17">17</a>      ElementType.CONSTRUCTOR,
    +<a class="jxr_linenumber" name="L18" href="#L18">18</a>      ElementType.FIELD,
    +<a class="jxr_linenumber" name="L19" href="#L19">19</a>      ElementType.LOCAL_VARIABLE,
    +<a class="jxr_linenumber" name="L20" href="#L20">20</a>      ElementType.METHOD,
    +<a class="jxr_linenumber" name="L21" href="#L21">21</a>      ElementType.PACKAGE,
    +<a class="jxr_linenumber" name="L22" href="#L22">22</a>      ElementType.PARAMETER,
    +<a class="jxr_linenumber" name="L23" href="#L23">23</a>      ElementType.TYPE
    +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  })
    +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  @Nonnull
    +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  @Retention(RetentionPolicy.RUNTIME)
    +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">public</strong> @<strong class="jxr_keyword">interface</strong> <a href="../../../../net/florianschoppmann/java/type/NonNullByDefault.html">NonNullByDefault</a> { }
    +</pre>
    +<hr/>
    +<div id="footer">Copyright &#169; 2014&#x2013;2015. All rights reserved.</div>
    +</body>
    +</html>
    diff --git a/xref/net/florianschoppmann/java/type/package-frame.html b/xref/net/florianschoppmann/java/type/package-frame.html
    new file mode 100644
    index 0000000..f8f9d6c
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/type/package-frame.html
    @@ -0,0 +1,57 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference Package net.florianschoppmann.java.type</title>
    +		<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +
    +		<h3>
    +        	<a href="package-summary.html" target="classFrame">net.florianschoppmann.java.type</a>
    +      	</h3>
    +
    +      	<h3>Classes</h3>
    +
    +      	<ul>
    +      		          	<li>
    +            	<a href="AbstractTypes.html" target="classFrame">AbstractTypes</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AnnotatedConstruct.html" target="classFrame">AnnotatedConstruct</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypes.html" target="classFrame">DeclaredTypeSubtypeVisitor</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypes.html" target="classFrame">ErasureVisitor</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="ExtendedTypeKindVisitor7.html" target="classFrame">ExtendedTypeKindVisitor7</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="IntersectionType.html" target="classFrame">IntersectionType</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="NonNullByDefault.html" target="classFrame">NonNullByDefault</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypes.html" target="classFrame">SubstitutionVisitor</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypes.html" target="classFrame">Substitutions</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypes.html" target="classFrame">SubtypeVisitor</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypes.html" target="classFrame">ToStringVisitor</a>
    +          	</li>
    +          	          	<li>
    +            	<a href="AbstractTypes.html" target="classFrame">TypeDeclarationVertexState</a>
    +          	</li>
    +          	      	</ul>
    +
    +	</body>
    +</html>
    \ No newline at end of file
    diff --git a/xref/net/florianschoppmann/java/type/package-summary.html b/xref/net/florianschoppmann/java/type/package-summary.html
    new file mode 100644
    index 0000000..9af8bad
    --- /dev/null
    +++ b/xref/net/florianschoppmann/java/type/package-summary.html
    @@ -0,0 +1,124 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference Package net.florianschoppmann.java.type</title>
    +		<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +		      	<div class="overview">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../overview-summary.html">Overview</a>
    +          		</li>
    +          		<li class="selected">Package</li>
    +        	</ul>
    +      	</div>
    +      	<div class="framenoframe">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../index.html" target="_top">FRAMES</a>
    +          		</li>
    +          		<li>
    +            		<a href="package-summary.html" target="_top">NO FRAMES</a>
    +          		</li>
    +        	</ul>
    +      	</div>
    +		
    +		      	<h2>Package net.florianschoppmann.java.type</h2>
    +
    +		<table class="summary">
    +        	<thead>
    +          		<tr>
    +            		<th>Class Summary</th>
    +          		</tr>
    +        	</thead>
    +        	<tbody>
    +        		            	<tr>
    +              		<td>
    +                		<a href="AbstractTypes.html" target="classFrame">AbstractTypes</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AnnotatedConstruct.html" target="classFrame">AnnotatedConstruct</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypes.html" target="classFrame">DeclaredTypeSubtypeVisitor</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypes.html" target="classFrame">ErasureVisitor</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="ExtendedTypeKindVisitor7.html" target="classFrame">ExtendedTypeKindVisitor7</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="IntersectionType.html" target="classFrame">IntersectionType</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="NonNullByDefault.html" target="classFrame">NonNullByDefault</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypes.html" target="classFrame">SubstitutionVisitor</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypes.html" target="classFrame">Substitutions</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypes.html" target="classFrame">SubtypeVisitor</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypes.html" target="classFrame">ToStringVisitor</a>
    +              		</td>
    +            	</tr>
    +				            	<tr>
    +              		<td>
    +                		<a href="AbstractTypes.html" target="classFrame">TypeDeclarationVertexState</a>
    +              		</td>
    +            	</tr>
    +				        	</tbody>
    +      	</table>
    +		
    +		      	<div class="overview">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../overview-summary.html">Overview</a>
    +          		</li>
    +          		<li class="selected">Package</li>
    +        	</ul>
    +      	</div>
    +      	<div class="framenoframe">
    +        	<ul>
    +          		<li>
    +            		<a href="../../../../index.html" target="_top">FRAMES</a>
    +          		</li>
    +          		<li>
    +            		<a href="package-summary.html" target="_top">NO FRAMES</a>
    +          		</li>
    +        	</ul>
    +      	</div>
    +				<hr />
    +		<div id="footer">
    +			Copyright &#169; 2014&#x2013;2015. All rights reserved.
    +		</div>
    +	</body>
    +</html>
    \ No newline at end of file
    diff --git a/xref/overview-frame.html b/xref/overview-frame.html
    new file mode 100644
    index 0000000..5916885
    --- /dev/null
    +++ b/xref/overview-frame.html
    @@ -0,0 +1,28 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference</title>
    +		<link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +
    +		<h3>
    +			<a href="allclasses-frame.html" target="packageFrame">All Classes</a>
    +		</h3>
    +
    +		<h3>Packages</h3>
    +
    +		<ul>
    +						<li>
    +				<a href="net/florianschoppmann/java/reflect/package-frame.html" target="packageFrame">net.florianschoppmann.java.reflect</a>
    +			</li>
    +						<li>
    +				<a href="net/florianschoppmann/java/type/package-frame.html" target="packageFrame">net.florianschoppmann.java.type</a>
    +			</li>
    +					</ul>
    +
    +	</body>
    +</html>
    +
    diff --git a/xref/overview-summary.html b/xref/overview-summary.html
    new file mode 100644
    index 0000000..a7ab766
    --- /dev/null
    +++ b/xref/overview-summary.html
    @@ -0,0 +1,71 @@
    +
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xml:lang="en" lang="en">
    +	<head>
    +		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    +		<title>Java Types 1.0.1 Reference</title>
    +		<link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
    +	</head>
    +	<body>
    +				<div class="overview">
    +			<ul>
    +				<li class="selected">Overview</li>
    +				<li>Package</li>
    +			</ul>
    +		</div>
    +		<div class="framenoframe">
    +			<ul>
    +				<li>
    +					<a href="index.html" target="_top">FRAMES</a>
    +				</li>
    +				<li>
    +    	        	<a href="overview-summary.html" target="_top">NO FRAMES</a>
    +        	  	</li>
    +	        </ul>
    +      	</div>
    +		
    +		      	<h2>Java Types 1.0.1 Reference</h2>
    +
    +		<table class="summary">
    +        	<thead>
    +          		<tr>
    +            		<th>Packages</th>
    +          		</tr>
    +        	</thead>
    +        	<tbody>
    +    	    	            	<tr>
    +              		<td>
    +                		<a href="net/florianschoppmann/java/reflect/package-summary.html">net.florianschoppmann.java.reflect</a>
    +              		</td>
    +            	</tr>
    +	          	            	<tr>
    +              		<td>
    +                		<a href="net/florianschoppmann/java/type/package-summary.html">net.florianschoppmann.java.type</a>
    +              		</td>
    +            	</tr>
    +	          	        	</tbody>
    +      	</table>
    +		
    +				<div class="overview">
    +			<ul>
    +				<li class="selected">Overview</li>
    +				<li>Package</li>
    +			</ul>
    +		</div>
    +		<div class="framenoframe">
    +			<ul>
    +				<li>
    +					<a href="index.html" target="_top">FRAMES</a>
    +				</li>
    +				<li>
    +    	        	<a href="overview-summary.html" target="_top">NO FRAMES</a>
    +        	  	</li>
    +	        </ul>
    +      	</div>
    +		
    +		<hr />
    +		<div id="footer">
    +			Copyright &#169; 2014&#x2013;2015. All rights reserved.
    +		</div>
    +	</body>
    +</html>
    \ No newline at end of file
    diff --git a/xref/stylesheet.css b/xref/stylesheet.css
    new file mode 100644
    index 0000000..89732f8
    --- /dev/null
    +++ b/xref/stylesheet.css
    @@ -0,0 +1,114 @@
    +/* Javadoc style sheet */
    +/* Define colors, fonts and other style attributes here to override the defaults  */
    +body {
    +    background-color: #fff;
    +    font-family: Arial, Helvetica, sans-serif;
    +}
    +
    +a:link {
    +    color: #00f;
    +}
    +a:visited {
    +    color: #00a;
    +}
    +
    +a:active, a:hover {
    +    color: #f30 !important;
    +}
    +
    +ul, li {
    +    list-style-type:none;
    +    margin:0;
    +    padding:0;
    +}
    +
    +table td {
    +    padding: 3px;
    +    border: 1px solid #000;
    +}
    +table {
    +    width:100%;
    +    border: 1px solid #000;
    +    border-collapse: collapse;
    +}
    +
    +div.overview {
    +    background-color:#ddd;
    +    padding: 4px 4px 4px 0;
    +}
    +div.overview li, div.framenoframe li {
    +    display: inline;
    +}
    +div.framenoframe {
    +    text-align: center;
    +    font-size: x-small;
    +}
    +div.framenoframe li {
    +    margin: 0 3px 0 3px;
    +}
    +div.overview li {
    +    margin:3px 3px 0 3px;
    +    padding: 4px;
    +}
    +li.selected {
    +    background-color:#888;
    +    color: #fff;
    +    font-weight: bold;
    +}
    +
    +table.summary {
    +    margin-bottom: 20px;
    +}
    +table.summary td, table.summary th {
    +    font-weight: bold;
    +    text-align: left;
    +    padding: 3px;
    +}
    +table.summary th {
    +    background-color:#036;
    +    color: #fff;
    +}
    +table.summary td {
    +    background-color:#eee;
    +    border: 1px solid black;
    +}
    +
    +em {
    +    color: #A00;
    +}
    +em.comment {
    +    color: #390;
    +}
    +.string {
    +    color: #009;
    +}
    +
    +#overview {
    +    padding:2px;
    +}
    +
    +hr {
    +    height: 1px;
    +    color: #000;
    +}
    +
    +/* JXR style sheet */
    +.jxr_comment
    +{
    +    color: #390;
    +}
    +
    +.jxr_javadoccomment
    +{
    +    color: #A00;
    +}
    +
    +.jxr_string
    +{
    +    color: #009;
    +}
    +
    +.jxr_keyword
    +{
    +    color: #000;
    +}