ConstantPool: support adding long, float & double entries, too

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Proxy: make all methods public

Proxies implement interfaces whose methods *must* be public, as per the
specification of the Java language.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Refactor Assembler#writeClass

We are about to add more method attributes than just Code and need to
make sure that the class pool is filled properly *before* it is written
out.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Assembler: support writing out annotations

When instantiating proxies, we need to take pains that the annotations of
every interface's methods we proxy are available, too.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Assembler: support writing out annotation default values

This makes sure that Proxy instances of annotations inherit the default
values of the annotation's methods.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Use the default value in annotations' proxies

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
AnnotationInvocationHandler: avoid calling Method#getName too often

This is only a cosmetic change, but we should not call getName()
over and over again ;-)

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Make sure that test classes have access to the annotations

Earlier, if the annotations were already up-to-date (but
Annotations.class not), the compilation would fail.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Verify that Proxy instances have access to annotations' default values

For quick access, the sezpoz library stores lists in
META-INF/annotations/ of classes that have been annotated in a
special way.

To support the use case where the annotations actually changed since
sezpoz stored said lists, sezpoz then creates proxy instances for the
annotated classes to be able to provide some backwards compatibility:
as long as there are default values for the new annotations, everything
is groovy.

Therefore, let's make sure that proxy instances inherit the
annotations' default values.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
When proxying multiple interfaces, proxy all their annotations

If two interfaces contain the same method, we can easily proxy both, but
we have to take care to proxy both interface's annotations, not just
one.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>