Bug 525972 - java.lang.ArrayIndexOutOfBoundsException: 2 (at org.aspectj.weaver.ResolvedType.getMemberParameterizationMap(ResolvedType.java:970))
Summary: java.lang.ArrayIndexOutOfBoundsException: 2 (at org.aspectj.weaver.ResolvedTy...
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.8.11   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: 1.9.0   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-10-13 02:14 EDT by Miika Vesti CLA
Modified: 2017-10-23 17:40 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Miika Vesti CLA 2017-10-13 02:14:16 EDT
ArrayIndexOutBoundsException when using maven and aspectj-maven-plugin to compile a project.

This error occurs in a large project and I am unable to share the source code. I began facing this issue after I upgraded from spring-data-mongodb-1.10.x to spring-data-mongodb-2.0.0.

This error occurs when I compile the project
1) in eclipse
2) using maven from command line

The stack trace below is produced by maven from command line. Eclipse does not provide full stack trace when compile fails but I assume it is related to the same problem.

Feel free to ask if you need more details.

---- AspectJ Properties ---
AspectJ Compiler 1.8.11 built on Tuesday Sep 26, 2017 at 15:08:44 GMT
---- Dump Properties ---
Dump file: ajcore.20171013.085754.775.txt
Dump reason: java.lang.ArrayIndexOutOfBoundsException
Dump on exception: true
Dump at exit condition: abort
---- Exception Information ---
java.lang.ArrayIndexOutOfBoundsException: 2
	at org.aspectj.weaver.ResolvedType.getMemberParameterizationMap(ResolvedType.java:970)
	at org.aspectj.weaver.ReferenceType.getDeclaredInterfaces(ReferenceType.java:748)
	at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:629)
	at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:635)
	at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:647)
	at org.aspectj.weaver.ResolvedType.isTopmostImplementor(ResolvedType.java:2327)
	at org.aspectj.weaver.ResolvedTypeMunger.matches(ResolvedTypeMunger.java:133)
	at org.aspectj.weaver.ConcreteTypeMunger.matches(ConcreteTypeMunger.java:81)
	at org.aspectj.ajdt.internal.compiler.lookup.AjLookupEnvironment.weaveInterTypeDeclarations(AjLookupEnvironment.java:783)
	at org.aspectj.ajdt.internal.compiler.lookup.AjLookupEnvironment.weaveInterTypeDeclarations(AjLookupEnvironment.java:646)
	at org.aspectj.ajdt.internal.compiler.lookup.AjLookupEnvironment.doPendingWeaves(AjLookupEnvironment.java:421)
	at org.aspectj.ajdt.internal.compiler.lookup.AjLookupEnvironment.completeTypeBindings(AjLookupEnvironment.java:201)
	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:859)
	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:385)
	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:435)
	at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:417)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1036)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:272)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:185)
	at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:114)
	at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
	at org.aspectj.tools.ajc.Main.run(Main.java:371)
	at org.aspectj.tools.ajc.Main.runMain(Main.java:248)
	at org.codehaus.mojo.aspectj.AbstractAjcCompiler.execute(AbstractAjcCompiler.java:544)
	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
	at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Comment 1 Andrew Clement CLA 2017-10-13 18:33:21 EDT
From the line of code:

parameterizationMap.put(tvs[i].getName(), typeParameters[i]);

I think there are less typeParameters than we expect. I've added some diagnostics for this problem to a 1.8.12.BUILD-SNAPSHOT - can you try with that?

It is in the maven repo:

        <repository>
            <id>spring-maven-snapshot</id>
            <name>Spring Maven Snapshot Repository</name>
            <url>http://maven.springframework.org/snapshot</url>
        </repository>

It should tell us what types were involved in the problem in an IllegalStateException then we can dig a little deeper. (Although I haven't been able to exactly test it because I can't recreate). thanks!
Comment 2 Miika Vesti CLA 2017-10-16 03:29:38 EDT
Thanks for the response. I tried to use 1.8.12.BUILD-SNAPSHOT and found the problem:

[ERROR] Failed to execute goal org.codehaus.mojo:aspectj-maven-plugin:1.10:compile (default) on project oneportal: AJC compiler errors:
[ERROR] abort ABORT -- (IllegalStateException) Problem occurred whilst calling isAssignableFrom for Lorg/springframework/beans/factory/aspectj/AbstractInterfaceDrivenDependencyInjectionAspect$ConfigurableDeserializationSupport; and L---REDACTED_PACKAGE---/BaseEntity;
[ERROR] Problem occurred whilst calling isAssignableFrom for Lorg/springframework/beans/factory/aspectj/AbstractInterfaceDrivenDependencyInjectionAspect$ConfigurableDeserializationSupport; and L---REDACTED_PACKAGE---/BaseEntity;
[ERROR] java.lang.IllegalStateException: Problem occurred whilst calling isAssignableFrom for Lorg/springframework/beans/factory/aspectj/AbstractInterfaceDrivenDependencyInjectionAspect$ConfigurableDeserializationSupport; and L---REDACTED_PACKAGE---/BaseEntity;
[ERROR] at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:651)
[ERROR] at org.aspectj.weaver.ResolvedType.isTopmostImplementor(ResolvedType.java:2346)
[ERROR] at org.aspectj.weaver.ResolvedTypeMunger.matches(ResolvedTypeMunger.java:133)
[ERROR] at org.aspectj.weaver.ConcreteTypeMunger.matches(ConcreteTypeMunger.java:81)
[ERROR] at org.aspectj.ajdt.internal.compiler.lookup.AjLookupEnvironment.weaveInterTypeDeclarations(AjLookupEnvironment.java:783)
[ERROR] at org.aspectj.ajdt.internal.compiler.lookup.AjLookupEnvironment.weaveInterTypeDeclarations(AjLookupEnvironment.java:646)
[ERROR] at org.aspectj.ajdt.internal.compiler.lookup.AjLookupEnvironment.doPendingWeaves(AjLookupEnvironment.java:421)
[ERROR] at org.aspectj.ajdt.internal.compiler.lookup.AjLookupEnvironment.completeTypeBindings(AjLookupEnvironment.java:201)
[ERROR] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:859)
[ERROR] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:385)
[ERROR] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:435)
[ERROR] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:417)
[ERROR] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1036)
[ERROR] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:272)
[ERROR] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:185)
[ERROR] at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:114)
[ERROR] at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
[ERROR] at org.aspectj.tools.ajc.Main.run(Main.java:371)
[ERROR] at org.aspectj.tools.ajc.Main.runMain(Main.java:248)
[ERROR] at org.codehaus.mojo.aspectj.AbstractAjcCompiler.execute(AbstractAjcCompiler.java:544)
[ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
[ERROR] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
[ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
[ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
[ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
[ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] at java.lang.reflect.Method.invoke(Method.java:498)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
[ERROR] Caused by: java.lang.IllegalStateException: 525972: Mismatch when building parameterization map. For type Porg/springframework/data/domain/Auditable<Ljava/lang/String;Ljava/lang/String;>; expecting 3: U ID T  type parameters but found 2:Ljava/lang/String; Ljava/lang/String;
[ERROR] at org.aspectj.weaver.ResolvedType.getMemberParameterizationMap(ResolvedType.java:970)
[ERROR] at org.aspectj.weaver.ReferenceType.getDeclaredInterfaces(ReferenceType.java:752)
[ERROR] at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:629)
[ERROR] at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:635)
[ERROR] at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:648)
[ERROR] ... 41 more

There is one dependency library in my project that also must be updated to support spring-data-mongodb-2.0.0, so this is not a bug in aspectj but a bug in our code.

The modification you made is still extremely useful because it allowed me to quickly locate the problem.

Thank you!
Comment 3 Andrew Clement CLA 2017-10-23 15:45:57 EDT
Thanks for digging into that and trying my debug version.  Even if there was an issue for you it shouldn't surface as an exception in AspectJ so I will think about including some form of better diagnostics.
Comment 4 Andrew Clement CLA 2017-10-23 17:40:29 EDT
I added a guard to prevent the AIOOBE and a message that includes the info I was including in those exceptions.  I can't add a testcase - I'm having trouble recreating it precisely.  Hopefully these changes will help next time the situation arises though.