Skip to content
This repository has been archived by the owner on Feb 26, 2023. It is now read-only.

java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy after moving to Anndroid Anotations v.2.7 #379

Closed
zasadnyy opened this issue Nov 5, 2012 · 9 comments

Comments

@zasadnyy
Copy link

zasadnyy commented Nov 5, 2012

I've got problems with building my project in eclipse after moving to Android Annotations v.2.7, at the same time maven build is ok. Here is stacktrace from eclipse Error log:

Error
Mon Nov 05 15:49:49 GMT+02:00 2012
Errors running builder 'Java Builder' on project 'heroes'.

java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
    at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:653)
    at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:460)
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:286)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:222)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
    at java.lang.Class.initAnnotationsIfNecessary(Class.java:3070)
    at java.lang.Class.getAnnotation(Class.java:3029)
    at javax.annotation.processing.AbstractProcessor.getSupportedSourceVersion(AbstractProcessor.java:103)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.ProcessorInfo.<init>(ProcessorInfo.java:56)
    at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.discoverNextProcessor(IdeAnnotationProcessorManager.java:94)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:116)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:159)
    at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:134)
    at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:820)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:434)
    at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:365)
    at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:178)
    at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:302)
    at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:60)
    at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:254)
    at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:178)
    at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239)
    at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295)
    at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351)
    at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374)
    at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143)
    at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

Eclipse session data:

eclipse.buildId=M20120914-1800
java.version=1.6.0_35
java.vendor=Apple Inc.
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.jee.product -product org.eclipse.epp.package.jee.product -keyring /Users/vitaliyzasadnyy/.eclipse_keyring -showlocation
Command-line arguments:  -os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.jee.product -data /Users/vitaliyzasadnyy/Development/workspaces/native-container-android -product org.eclipse.epp.package.jee.product -keyring /Users/vitaliyzasadnyy/.eclipse_keyring -showlocation
@pyricau
Copy link
Contributor

pyricau commented Nov 5, 2012

Hi @zasadnyy, thank you for reporting this.

As far as I can see, AbstractProcessor.getSupportedSourceVersion() tries to read the @SupportedSourceVersion annotation on the processor.

From the stacktrace, we can deduce that the AnnotationParser is trying to read all the annotations on the processor class. And that one of these annotations has a class array parameter that contains classes that cannot be loaded.

The only annotation that has a class array in AndroidAnnotationsProcessor is @ SupportedAnnotationClasses.

From that we can deduce that the annotations supported by androidannotations are not present, which means they are not in the classpath of the eclipse compiler.

As you probably noted, we extracted the API jar as a separate Maven artifact, leading to a new maven configuration:

<dependencies>
        <!-- [...] -->
    <dependency>
        <groupId>com.googlecode.androidannotations</groupId>
        <artifactId>androidannotations</artifactId>
        <version>2.7</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.googlecode.androidannotations</groupId>
        <artifactId>androidannotations-api</artifactId>
        <version>2.7</version>
    </dependency>
</dependencies>

Since you are telling me that is works fine with Maven, I assume you configured this right.

Previously, the androidannotations dependency contained the annotations. It doesn't contain them any more, they are now in the androidannotations-api jar.

This is fine for Maven, because dependencies available in scope compile are also available to Javac. However, Eclipse differentiate those dependencies with the annotation processing jars.

So, I assume that you're using the "manual way" to configure the eclipse annotation processing: adding jars to Java Compiler > Annotation Processing > Factory Path. And it currently only contains androidannotations-2.7.jar.

To fix the problem, you should add the two AndroidAnnotations dependencies: codemodel and androidannotations-api

Here is how we should update the doc:

  1. Right-click your project, choose Properties
  2. Go to Java Compiler > Annotation Processing and choose Enable annotation processing
  3. Go to Java Compiler > Annotation Processing > Factory Path
  4. Click on Add Variable, select M2_REPO and click on Extend...; then, select the following JAR : com/googlecode/androidannotations/androidannotations-api/2.7/androidannotations-api-2.7.jar
  5. Click on Add Variable, select M2_REPO and click on Extend...; then, select the following JAR : com/sun/codemodel/codemodel/2.4.1/codemodel-2.4.1.jar
  6. Click on Add Variable, select M2_REPO and click on Extend...; then, select the following JAR : com/googlecode/androidannotations/androidannotations/2.7/androidannotations-2.7.jar
  7. Confirm the workspace rebuild
  8. Done!

Could you please confirm if this works or not? If yes we'll update the doc and add a warning.

Thanks a lot!

Let's note that this problem won't happen for people using only the zip Bundle (without any Maven conf), because androidannotations.jar in the bundle contains its dependencies.

@zasadnyy
Copy link
Author

zasadnyy commented Nov 5, 2012

Thanks man, for so quick answer!
Yes this solved my problem, you can update documentation.

Rgds, Vitaliy.

@zasadnyy zasadnyy closed this as completed Nov 5, 2012
@arnaudruffin
Copy link

I see that you've already updated the documentation on
https://github.com/excilys/androidannotations/wiki/Building-Project-Maven-Eclipse

don't forget to also update the part where you put directly the content of the .factorypath file.
If I'm not wrong it should look like this:

<factorypath>
    <factorypathentry kind="PLUGIN" id="org.eclipse.jst.ws.annotations.core" enabled="true" runInBatchMode="false"/>
    <factorypathentry kind="VARJAR" id="M2_REPO/com/googlecode/androidannotations/androidannotations/2.7/androidannotations-2.7.jar" enabled="true" runInBatchMode="false"/>
    <factorypathentry kind="VARJAR" id="M2_REPO/com/googlecode/androidannotations/androidannotations-api/2.7/androidannotations-api-2.7.jar" enabled="true" runInBatchMode="false"/>
    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/codemodel/codemodel/2.4.1/codemodel-2.4.1.jar" enabled="true" runInBatchMode="false"/>
</factorypath>

Thanks again for the quick update

Arnaud

@zasadnyy
Copy link
Author

zasadnyy commented Nov 5, 2012

Maybe it'll be useful to add note that this configuration should be used starting from v.2.7 ?

Rgds, Vitaliy.

@pyricau
Copy link
Contributor

pyricau commented Nov 5, 2012

You're right. Reopening until we update the doc.

@ipereziriarte
Copy link

Hi, I'm getting the same problem with IntelliJ. Using the old 2.7 snapshot was flawless, but with the final version there's no way that this works

@pyricau
Copy link
Contributor

pyricau commented Nov 22, 2012

@estornino Could you check #395 ?

@ipereziriarte
Copy link

Hi, thanks to Albin from jayway I finally make it work. You can check the process here in the comments http://www.jayway.com/2012/08/31/making-androidannotations-work-with-intellij-idea/ is the same method that the one explained by @satyanarayanag at #395 Using semicolons ';' in the processor path it allows you to include more than one path.
Thank you very much for your help and congrats for your work on this library!
Regards

@pyricau
Copy link
Contributor

pyricau commented Nov 22, 2012

I'm closing this issue as it seems everyone was able to get it working. Please let us know if otherwise.

If anyone feels like writing the documentation for AA + IntelliJ or AA + IntelliJ + Maven, please go ahead and let us know on the mailing list!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants