Community
Participate
Working Groups
Build ID: M20080911-1700 Steps To Reproduce: Hello all. I have recently updated the version of the AspectJ compiler in one of my projects and now, sometimes (don't know why this is presented only a few times and not always), I have the following errors while compiling it with the iajc ant task. [iajc] abort trouble in: [iajc] public class net.sourceforge.fenixedu.applicationTier.Servico.administrativeOffice.externalUnits.CreateExternalUnit extends net.sourceforge.fenixedu.applicationTier.Service: [iajc] public void <init>(): [iajc] ALOAD_0 // Lnet/sourceforge/fenixedu/applicationTier/Servico/administrativeOffice/externalUnits/CreateExternalUnit; this (line 19) [iajc] INVOKESPECIAL net.sourceforge.fenixedu.applicationTier.Service.<init> ()V [iajc] RETURN [iajc] end public void <init>() [iajc] public net.sourceforge.fenixedu.domain.organizationalStructure.Unit run(net.sourceforge.fenixedu.dataTransferObject.administrativeOffice.externalUnits.CreateExternalUnitBean) throws net.sourceforge.fenixedu.applicationTier.Servico.exceptions.FenixServiceException org.aspectj.weaver.MethodDeclarationLineNumber: 21:1073 [iajc] : [iajc] ALOAD_1 // Lnet/sourceforge/fenixedu/dataTransferObject/administrativeOffice/externalUnits/CreateExternalUnitBean; externalUnitBean (line 23) [iajc] INVOKEVIRTUAL net.sourceforge.fenixedu.dataTransferObject.administrativeOffice.externalUnits.CreateExternalUnitBean.getUnitType ()Lnet/sourceforge/fenixedu/domain/organizationalStructure/PartyTypeEnum; [iajc] GETSTATIC net.sourceforge.fenixedu.domain.organizationalStructure.PartyTypeEnum.DEPARTMENT Lnet/sourceforge/fenixedu/domain/organizationalStructure/PartyTypeEnum; [iajc] IF_ACMPNE L0 [iajc] ALOAD_1 // Lnet/sourceforge/fenixedu/dataTransferObject/administrativeOffice/externalUnits/CreateExternalUnitBean; externalUnitBean (line 25) [iajc] INVOKEVIRTUAL net.sourceforge.fenixedu.dataTransferObject.administrativeOffice.externalUnits.CreateExternalUnitBean.getUnitName ()Ljava/lang/String; [iajc] ALOAD_1 // Lnet/sourceforge/fenixedu/dataTransferObject/administrativeOffice/externalUnits/CreateExternalUnitBean; externalUnitBean [iajc] INVOKEVIRTUAL net.sourceforge.fenixedu.dataTransferObject.administrativeOffice.externalUnits.CreateExternalUnitBean.getUnitCode ()Ljava/lang/String; [iajc] ALOAD_1 // Lnet/sourceforge/fenixedu/dataTransferObject/administrativeOffice/externalUnits/CreateExternalUnitBean; externalUnitBean [iajc] INVOKEVIRTUAL net.sourceforge.fenixedu.dataTransferObject.administrativeOffice.externalUnits.CreateExternalUnitBean.getParentUnit ()Lnet/sourceforge/fenixedu/domain/organizationalStructure/Unit; [iajc] INVOKESTATIC net.sourceforge.fenixedu.domain.organizationalStructure.DepartmentUnit.createNewOfficialExternalDepartmentUnit (Ljava/lang/String;Ljava/lang/String;Lnet/sourceforge/fenixedu/domain/organizationalStructure/Unit;)Lnet/sourceforge/fenixedu/domain/organizationalStructure/DepartmentUnit; (line 24) [iajc] ARETURN [iajc] L0: NEW net.sourceforge.fenixedu.applicationTier.Servico.manager.organizationalStructureManagement.CreateUnit (line 27) [iajc] DUP [iajc] INVOKESPECIAL net.sourceforge.fenixedu.applicationTier.Servico.manager.organizationalStructureManagement.CreateUnit.<init> ()V [iajc] ALOAD_1 // Lnet/sourceforge/fenixedu/dataTransferObject/administrativeOffice/externalUnits/CreateExternalUnitBean; externalUnitBean [iajc] INVOKEVIRTUAL net.sourceforge.fenixedu.dataTransferObject.administrativeOffice.externalUnits.CreateExternalUnitBean.getParentUnit ()Lnet/sourceforge/fenixedu/domain/organizationalStructure/Unit; [iajc] NEW net.sourceforge.fenixedu.util.MultiLanguageString (line 28) [iajc] DUP [iajc] INVOKESTATIC net.sourceforge.fenixedu.util.LanguageUtils.getSystemLanguage ()Lnet/sourceforge/fenixedu/domain/Language; [iajc] ALOAD_1 // Lnet/sourceforge/fenixedu/dataTransferObject/administrativeOffice/externalUnits/CreateExternalUnitBean; externalUnitBean [iajc] INVOKEVIRTUAL net.sourceforge.fenixedu.dataTransferObject.administrativeOffice.externalUnits.CreateExternalUnitBean.getUnitName ()Ljava/lang/String; [iajc] INVOKESPECIAL net.sourceforge.fenixedu.util.MultiLanguageString.<init> (Lnet/sourceforge/fenixedu/domain/Language;Ljava/lang/String;)V [iajc] ACONST_NULL (line 29) [iajc] ALOAD_1 // Lnet/sourceforge/fenixedu/dataTransferObject/administrativeOffice/externalUnits/CreateExternalUnitBean; externalUnitBean [iajc] INVOKEVIRTUAL net.sourceforge.fenixedu.dataTransferObject.administrativeOffice.externalUnits.CreateExternalUnitBean.getUnitCode ()Ljava/lang/String; [iajc] NEW org.joda.time.YearMonthDay [iajc] DUP [iajc] INVOKESPECIAL org.joda.time.YearMonthDay.<init> ()V [iajc] ACONST_NULL [iajc] ALOAD_1 // Lnet/sourceforge/fenixedu/dataTransferObject/administrativeOffice/externalUnits/CreateExternalUnitBean; externalUnitBean [iajc] INVOKEVIRTUAL net.sourceforge.fenixedu.dataTransferObject.administrativeOffice.externalUnits.CreateExternalUnitBean.getUnitType ()Lnet/sourceforge/fenixedu/domain/organizationalStructure/PartyTypeEnum; [iajc] ACONST_NULL (line 30) [iajc] ACONST_NULL [iajc] ACONST_NULL [iajc] ACONST_NULL [iajc] ACONST_NULL [iajc] ACONST_NULL [iajc] ACONST_NULL [iajc] ACONST_NULL [iajc] INVOKEVIRTUAL net.sourceforge.fenixedu.applicationTier.Servico.manager.organizationalStructureManagement.CreateUnit.run (Lnet/sourceforge/fenixedu/domain/organizationalStructure/Unit;Lnet/sourceforge/fenixedu/util/MultiLanguageString;Ljava/lang/String;Ljava/lang/String;Lorg/joda/time/YearMonthDay;Lorg/joda/time/YearMonthDay;Lnet/sourceforge/fenixedu/domain/organizationalStructure/PartyTypeEnum;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Lnet/sourceforge/fenixedu/domain/organizationalStructure/AccountabilityType;Ljava/lang/String;Lnet/sourceforge/fenixedu/domain/organizationalStructure/UnitClassification;Ljava/lang/Boolean;Ljava/lang/Integer;)Lnet/sourceforge/fenixedu/domain/organizationalStructure/Unit; (line 27) [iajc] ARETURN [iajc] end public net.sourceforge.fenixedu.domain.organizationalStructure.Unit run(net.sourceforge.fenixedu.dataTransferObject.administrativeOffice.externalUnits.CreateExternalUnitBean) throws net.sourceforge.fenixedu.applicationTier.Servico.exceptions.FenixServiceException [iajc] end public class net.sourceforge.fenixedu.applicationTier.Servico.administrativeOffice.externalUnits.CreateExternalUnit [iajc] -- (ClassCastException) org.aspectj.apache.bcel.classfile.ConstantMethodref [iajc] org.aspectj.apache.bcel.classfile.ConstantMethodref [iajc] java.lang.ClassCastException: org.aspectj.apache.bcel.classfile.ConstantMethodref [iajc] at org.aspectj.apache.bcel.classfile.annotation.AnnotationGen.getTypeSignature(AnnotationGen.java:125) [iajc] at org.aspectj.apache.bcel.classfile.annotation.AnnotationGen.getTypeName(AnnotationGen.java:130) [iajc] at org.aspectj.weaver.bcel.AtAjAttributes.getAnnotation(AtAjAttributes.java:1634) [iajc] at org.aspectj.weaver.bcel.AtAjAttributes.handleBeforeAnnotation(AtAjAttributes.java:1001) [iajc] at org.aspectj.weaver.bcel.AtAjAttributes.readAj5MethodAttributes(AtAjAttributes.java:395) [iajc] at org.aspectj.weaver.bcel.BcelMethod.unpackAjAttributes(BcelMethod.java:189) [iajc] at org.aspectj.weaver.bcel.BcelMethod.<init>(BcelMethod.java:96) [iajc] at org.aspectj.weaver.bcel.LazyMethodGen.<init>(LazyMethodGen.java:197) [iajc] at org.aspectj.weaver.bcel.BcelClassWeaver.weaveDeclareAtMethodCtor(BcelClassWeaver.java:952) [iajc] at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:450) [iajc] at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:103) [iajc] at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1735) [iajc] at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1696) [iajc] at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1458) [iajc] at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1272) [iajc] at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.weaveQueuedEntries(AjPipeliningCompilerAdapter.java:435) [iajc] at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.queueForWeaving(AjPipeliningCompilerAdapter.java:371) [iajc] at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.afterProcessing(AjPipeliningCompilerAdapter.java:358) [iajc] at org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$after$org_aspectj_ajdt_internal_compiler_CompilerAdapter$5$6b855184(CompilerAdapter.aj:98) [iajc] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:652) [iajc] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:392) [iajc] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1001) [iajc] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:266) [iajc] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:180) [iajc] at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112) [iajc] at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60) [iajc] at org.aspectj.tools.ajc.Main.run(Main.java:355) [iajc] at org.aspectj.tools.ajc.Main.runMain(Main.java:234) [iajc] at org.aspectj.tools.ant.taskdefs.AjcTask.executeInSameVM(AjcTask.java:1211) [iajc] at org.aspectj.tools.ant.taskdefs.AjcTask.execute(AjcTask.java:1021) [iajc] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [iajc] at org.apache.tools.ant.Task.perform(Task.java:364) [iajc] at org.apache.tools.ant.Target.execute(Target.java:341) [iajc] at org.apache.tools.ant.Target.performTasks(Target.java:369) [iajc] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [iajc] at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:37) [iajc] at org.apache.tools.ant.Project.executeTargets(Project.java:1068) [iajc] at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:382) [iajc] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [iajc] at org.apache.tools.ant.Task.perform(Task.java:364) [iajc] at org.apache.tools.ant.Target.execute(Target.java:341) [iajc] at org.apache.tools.ant.Target.performTasks(Target.java:369) [iajc] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [iajc] at org.apache.tools.ant.Project.executeTarget(Project.java:1185) [iajc] [...] Any ideas of what this might be? I'll send the code with some more details on how to reproduce this to Andy Clement.
thanks to the 290meg testcase Paulo sent me, i have recreated it. Currently wondering what it is but I have a suspicion. Problematic class I'm looking at is: net.sourceforge.fenixedu.applicationTier.Servico.administrativeOffice.externalUnits.CreateExternalUnit That has some annotations: RuntimeVisibleAnnotations: length = 0xF 00 02 00 4A 00 00 00 4B 00 01 00 4C 73 00 4D So there are (00 02) annotations: 00 4A 00 00 Index 4A (74) into constant pool is: "Lnet/sourceforge/zas/metainfo/Shallow;" 00 4B 00 01 00 4C 73 00 4D Index 4B (75) into cp is: "Lnet/sourceforge/zas/metainfo/AccessControlled;" and this one has a name value pair. Name is 4C (76): "value", value is of type 's' (73) so string and the string is 4D (77) "ACADEMIC_ADMINISTRATIVE_OFFICE" Error I see is : [iajc] end public net.sourceforge.fenixedu.domain.organizationalStructure.Unit run(net.sourceforge.fenixedu.dataTransferObject.administrativeOffice.externalUnits.CreateExternalUnitBean) throws net.sourceforge.fenixedu.applicationTier.Servico.exceptions.FenixServiceException [iajc] end public class net.sourceforge.fenixedu.applicationTier.Servico.administrativeOffice.externalUnits.CreateExternalUnit [iajc] -- (ClassCastException) org.aspectj.apache.bcel.classfile.ConstantMethodref cannot be cast to org.aspectj.apache.bcel.classfile.ConstantUtf8 [iajc] org.aspectj.apache.bcel.classfile.ConstantMethodref cannot be cast to org.aspectj.apache.bcel.classfile.ConstantUtf8 [iajc] java.lang.ClassCastException: org.aspectj.apache.bcel.classfile.ConstantMethodref cannot be cast to org.aspectj.apache.bcel.classfile.ConstantUtf8 The annotation in there looks well formed, so wonder what is triggering the problem?
After looking at the class more carefully, I believe this may be related with the bug 169699. The class in question is annotated, as @Shallow @AccessControlled(value = "ACADEMIC_ADMINISTRATIVE_OFFICE") public class CreateExternalUnit extends Service { ... public void run(...) { ... } } In this particular class, non private methods should get annotations @Shallow, @AccessControlled and @AccessControlledInherited injected automatically. I don't know how or why but since the annotations injection has an unknown behavior, because of the unpredictable injection order, couldn't these two bugs be related somehow? The aspect that injects the annotations is defined as: aspect X { ... @method : !@NotAccessControlled !private * (@AccessControlled *..*+).*(..) : @AccessControlledInherited; declare @method : !@AccessControlled !@NotAccessControlled !private * (@AccessControlled *..*+).*(..) : @AccessControlled; declare @method : @AccessControlledInherited * (@Shallow *..*+).*(..) : @Shallow; ... }
first problem is fixed. As I initially imagined (given the complex declare @methods Paulo is using) the problem would be with copying the annotations onto the target. Due to the way in which they are processed there is a first loop that 'has a quick go' and if there are some that may later apply based on that, a second loop processes them. The second loop failed to ensure that when the annotation was copied across that the constant pool entry for the type name was copied (so the annotation used the same cp index as it did in the original class). However, getting past that juts reveals (for me) another problem: java.lang.StackOverflowError at org.aspectj.weaver.TypeFactory.createTypeFromSignature(TypeFactory.java:94) at org.aspectj.weaver.UnresolvedType.forSignature(UnresolvedType.java:411) at org.aspectj.weaver.UnresolvedType.getRawType(UnresolvedType.java:567) at org.aspectj.weaver.ReferenceType.getRawType(ReferenceType.java:733) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:389) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:363) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:389) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:363) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:389) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:363) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:389) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:363) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:389) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:363) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:389) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:363) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:389) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:363) at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:389)
the problem i just fixed for methods probably also exists for fields.
regression tests added for methods and fields - fields seem to work already (woo!) so just the stackoverflow to look at now
collecting diagnostics for the stackoverflow is a nightmare, but here we go. It seems the problematic type is "Lnet/sourceforge/zas/aop/aspectj/Enforcer;" and the problem is that it is considered generic but when we ask for the raw type, we get the generic type back again. Enforcer is a generic aspect. this is extremely hard to work on when i can't actively use the debugger.
managed to extract the compile string used from the build script, but running in eclipse it just works. Fixes for declare annotation are in, i'll leave this for now to see if Paulo hits the problem I see when he runs with the fixes.
What do you mean with "Fixes for declare annotation are in"? Does that mean that, now, the order of annotations injection has a predictable behavior, when declared in the same file?
> What do you mean with "Fixes for declare annotation are in"? Does that mean > that, now, the order of annotations injection has a predictable behavior, when > declared in the same file? I mean the fix for the exception that this bug covers: [iajc] -- (ClassCastException) org.aspectj.apache.bcel.classfile.ConstantMethodref [iajc] org.aspectj.apache.bcel.classfile.ConstantMethodref [iajc] java.lang.ClassCastException: is committed. The order of applicability is still undefined and when that changes I'll update bug 169699.
presumed fixed (ie. this exception - the reason why the bug was raised) [iajc] java.lang.ClassCastException: org.aspectj.apache.bcel.classfile.ConstantMethodref [iajc] at org.aspectj.apache.bcel.classfile.annotation.AnnotationGen.getTypeSignature(AnnotationGen.java:125) please reopen if still a problem.