Andy,

It seems to be only happening when using the Maven AspectJ plugin.  With
Ant (IAJC), the bridge method is marked as synthetic.

So I'll explore that avenue....

On Fri, May 8, 2015 at 4:19 PM, Tim Webster <[email protected]> wrote:

> Hi Andy,
>
> Here is the output of javap -verbose.
>
> I'll see if I can reproduce it on something other than our codebase that I
> can share...
>
> Classfile /D:/sonar/for_sonarsource/DocumentTypeId.class
>   Last modified 08-May-2015; size 5512 bytes
>   MD5 checksum c84da5d4a8a1f14b807d5a97bf38f0d8
>   Compiled from "DocumentTypeId.java"
> public class aquila.administrator.topic.domain.DocumentTypeId extends
> aquila.administrator.topic.domain.TopicId
>   SourceFile: "DocumentTypeId.java"
>   RuntimeVisibleAnnotations:
>     0: #98()
>     org.aspectj.weaver.WeaverVersion: length = 0xC
>      00 07 00 00 00 00 01 49 3E 40 B7 48
>     org.aspectj.weaver.WeaverState: length = 0x434
>      53 00 00 00 00 01 00 39 4C 61 71 75 69 6C 61 2F
>      61 64 6D 69 6E 69 73 74 72 61 74 6F 72 2F 63 6F
>      6D 6D 6F 6E 2F 61 73 70 65 63 74 73 2F 69 6D 70
>      6C 2F 4A 61 76 61 42 65 61 6E 41 73 70 65 63 74
>      3B 00 00 03 EF 00 63 00 00 05 F5 00 21 00 01 00
>      03 00 00 00 03 00 1A 00 05 00 06 00 01 00 07 00
>      00 00 02 00 08 00 04 00 0A 00 0B 00 00 00 19 00
>      0C 00 0B 00 01 00 07 00 00 00 02 00 0D 00 08 00
>      01 00 0E 00 0F 00 02 00 10 00 00 00 08 00 00 00
>      21 00 00 03 22 00 11 00 00 00 33 00 01 00 01 00
>      00 00 05 2A B7 00 12 B1 00 00 00 02 00 14 00 00
>      00 0A 00 02 00 00 00 22 00 04 00 23 00 15 00 00
>      00 0C 00 01 00 00 00 05 00 16 00 17 00 00 00 01
>      00 0E 00 18 00 02 00 10 00 00 00 08 00 00 00 29
>      00 00 03 FA 00 11 00 00 00 5C 00 03 00 04 00 00
>      00 0C 2A 2B 2C B7 00 19 2A 2D B5 00 1C B1 00 00
>      00 02 00 14 00 00 00 0E 00 03 00 00 00 2A 00 06
>      00 2B 00 0B 00 2C 00 15 00 00 00 2A 00 04 00 00
>      00 0C 00 16 00 17 00 00 00 00 00 0C 00 1E 00 0B
>      00 01 00 00 00 0C 00 1F 00 0B 00 02 00 00 00 0C
>      00 0A 00 0B 00 03 00 01 00 20 00 21 00 02 00 10
>      00 00 00 08 00 00 00 32 00 00 05 21 00 11 00 00
>      00 2F 00 01 00 01 00 00 00 05 2A B4 00 1C B0 00
>      00 00 02 00 14 00 00 00 06 00 01 00 00 00 33 00
>      15 00 00 00 0C 00 01 00 00 00 05 00 16 00 17 00
>      00 00 01 00 22 00 23 00 02 00 10 00 00 00 08 00
>      00 00 3A 00 00 05 CE 00 11 00 00 00 3E 00 02 00
>      02 00 00 00 06 2A 2B B5 00 1C B1 00 00 00 02 00
>      14 00 00 00 0A 00 02 00 00 00 3B 00 05 00 3C 00
>      15 00 00 00 16 00 02 00 00 00 06 00 16 00 17 00
>      00 00 00 00 06 00 0A 00 0B 00 01 00 01 00 24 00
>      25 00 02 00 10 00 00 00 08 00 00 00 44 00 00 06
>      D3 00 11 00 00 00 92 00 02 00 02 00 00 00 32 2A
>      2B A6 00 05 04 AC 2B C1 00 01 9A 00 05 03 AC 2A
>      B4 00 1C C7 00 05 03 AC 2A B4 00 1C 2B C0 00 01
>      B4 00 1C B6 00 26 9A 00 05 03 AC 2A 2B B7 00 2A
>      AC 00 00 00 03 00 14 00 00 00 26 00 09 00 00 00
>      45 00 05 00 46 00 07 00 48 00 0E 00 49 00 10 00
>      4B 00 17 00 4C 00 19 00 4E 00 2A 00 4F 00 2C 00
>      51 00 15 00 00 00 16 00 02 00 00 00 32 00 16 00
>      17 00 00 00 00 00 32 00 2B 00 2C 00 01 00 2D 00
>      00 00 06 00 04 07 08 08 12 00 01 00 2E 00 2F 00
>      02 00 10 00 00 00 08 00 00 00 59 00 00 08 ED 00
>      11 00 00 00 73 00 03 00 02 00 00 00 2F BB 00 30
>      59 2A B6 00 32 B8 00 35 B7 00 39 12 3B B6 00 3D
>      2A B6 00 41 B6 00 3D 12 3B B6 00 3D 2A B6 00 44
>      B6 00 3D B6 00 46 4C 2B B6 00 49 AC 00 00 00 02
>      00 14 00 00 00 16 00 05 00 00 00 5B 00 0E 00 5C
>      00 1A 00 5D 00 26 00 5B 00 2A 00 5F 00 15 00 00
>      00 16 00 02 00 00 00 2F 00 16 00 17 00 00 00 2A
>      00 05 00 4B 00 0B 00 01 00 02 00 4C 00 4D 00 02
>      00 10 00 00 00 08 00 00 00 6F 00 00 0D 42 00 11
>      00 00 00 40 00 02 00 02 00 00 00 0C 2A B4 00 1C
>      2B B6 00 44 B8 00 4E AC 00 00 00 02 00 14 00 00
>      00 06 00 01 00 00 00 70 00 15 00 00 00 16 00 02
>      00 00 00 0C 00 16 00 17 00 00 00 00 00 0C 00 54
>      00 17 00 01 00 01 00 55 00 56 00 02 00 10 00 00
>      00 08 00 00 00 78 00 00 0E 69 00 11 00 00 00 7E
>      00 02 00 04 00 00 00 17 2B C0 00 01 4E 2A 2B B7
>      00 57 3D 1C 9A 00 09 2A 2D B7 00 59 3D 1C AC 00
>      00 00 03 00 14 00 00 00 16 00 05 00 00 00 7A 00
>      05 00 7C 00 0B 00 7D 00 0F 00 7E 00 15 00 81 00
>      15 00 00 00 2A 00 04 00 00 00 17 00 16 00 17 00
>      00 00 00 00 17 00 5B 00 5C 00 01 00 0B 00 0C 00
>      5D 00 5E 00 02 00 05 00 12 00 54 00 17 00 03 00
>      2D 00 00 00 09 00 01 FD 00 15 01 07 00 01 00 02
>      00 5F 00 00 00 02 00 60 00 61 00 00 00 06 00 01
>      00 62 00 00
>   minor version: 0
>   major version: 51
>   flags: ACC_PUBLIC, ACC_SUPER
>
> Constant pool:
>     #1 = Class              #2            //
>  aquila/administrator/topic/domain/DocumentTypeId
>     #2 = Utf8
> aquila/administrator/topic/domain/DocumentTypeId
>     #3 = Class              #4            //
>  aquila/administrator/topic/domain/TopicId
>     #4 = Utf8               aquila/administrator/topic/domain/TopicId
>     #5 = Utf8               serialVersionUID
>     #6 = Utf8               J
>     #7 = Utf8               ConstantValue
>     #8 = Long               1l
>    #10 = Utf8               documentType
>    #11 = Utf8               Ljava/lang/String;
>    #12 = Utf8               PROPERTYNAME_DOCUMENTTYPE
>    #13 = String             #10           //  documentType
>    #14 = Utf8               <init>
>    #15 = Utf8               ()V
>    #16 = Utf8               org.aspectj.weaver.MethodDeclarationLineNumber
>    #17 = Utf8               Code
>    #18 = Methodref          #3.#19        //
>  aquila/administrator/topic/domain/TopicId."<init>":()V
>    #19 = NameAndType        #14:#15       //  "<init>":()V
>    #20 = Utf8               LineNumberTable
>    #21 = Utf8               LocalVariableTable
>    #22 = Utf8               this
>    #23 = Utf8
> Laquila/administrator/topic/domain/DocumentTypeId;
>    #24 = Utf8
> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
>    #25 = Methodref          #3.#26        //
>  
> aquila/administrator/topic/domain/TopicId."<init>":(Ljava/lang/String;Ljava/lang/String;)V
>    #26 = NameAndType        #14:#27       //
>  "<init>":(Ljava/lang/String;Ljava/lang/String;)V
>    #27 = Utf8               (Ljava/lang/String;Ljava/lang/String;)V
>    #28 = Fieldref           #1.#29        //
>  
> aquila/administrator/topic/domain/DocumentTypeId.documentType:Ljava/lang/String;
>    #29 = NameAndType        #10:#11       //
>  documentType:Ljava/lang/String;
>    #30 = Utf8               businessGroup
>    #31 = Utf8               topicCode
>    #32 = Utf8               getDocumentType
>    #33 = Utf8               ()Ljava/lang/String;
>    #34 = Utf8               setDocumentType
>    #35 = Utf8               (Ljava/lang/String;)V
>    #36 = Utf8               equals
>    #37 = Utf8               (Ljava/lang/Object;)Z
>    #38 = Methodref          #39.#41       //
>  java/lang/String.equals:(Ljava/lang/Object;)Z
>    #39 = Class              #40           //  java/lang/String
>    #40 = Utf8               java/lang/String
>    #41 = NameAndType        #36:#37       //  equals:(Ljava/lang/Object;)Z
>    #42 = Methodref          #3.#41        //
>  aquila/administrator/topic/domain/TopicId.equals:(Ljava/lang/Object;)Z
>    #43 = Utf8               obj
>    #44 = Utf8               Ljava/lang/Object;
>    #45 = Utf8               StackMapTable
>    #46 = Utf8               hashCode
>    #47 = Utf8               ()I
>    #48 = Class              #49           //  java/lang/StringBuilder
>    #49 = Utf8               java/lang/StringBuilder
>    #50 = Methodref          #1.#51        //
>  
> aquila/administrator/topic/domain/DocumentTypeId.getBusinessGroup:()Ljava/lang/String;
>    #51 = NameAndType        #52:#33       //
>  getBusinessGroup:()Ljava/lang/String;
>    #52 = Utf8               getBusinessGroup
>    #53 = Methodref          #39.#54       //
>  java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
>    #54 = NameAndType        #55:#56       //
>  valueOf:(Ljava/lang/Object;)Ljava/lang/String;
>    #55 = Utf8               valueOf
>    #56 = Utf8               (Ljava/lang/Object;)Ljava/lang/String;
>    #57 = Methodref          #48.#58       //
>  java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
>    #58 = NameAndType        #14:#35       //
>  "<init>":(Ljava/lang/String;)V
>    #59 = String             #60           //  *
>    #60 = Utf8               *
>    #61 = Methodref          #48.#62       //
>  java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
>    #62 = NameAndType        #63:#64       //
>  append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
>    #63 = Utf8               append
>    #64 = Utf8               (Ljava/lang/String;)Ljava/lang/StringBuilder;
>    #65 = Methodref          #1.#66        //
>  
> aquila/administrator/topic/domain/DocumentTypeId.getTopicCode:()Ljava/lang/String;
>    #66 = NameAndType        #67:#33       //
>  getTopicCode:()Ljava/lang/String;
>    #67 = Utf8               getTopicCode
>    #68 = Methodref          #1.#69        //
>  
> aquila/administrator/topic/domain/DocumentTypeId.getDocumentType:()Ljava/lang/String;
>    #69 = NameAndType        #32:#33       //
>  getDocumentType:()Ljava/lang/String;
>    #70 = Methodref          #48.#71       //
>  java/lang/StringBuilder.toString:()Ljava/lang/String;
>    #71 = NameAndType        #72:#33       //  toString:()Ljava/lang/String;
>    #72 = Utf8               toString
>    #73 = Methodref          #39.#74       //  java/lang/String.hashCode:()I
>    #74 = NameAndType        #46:#47       //  hashCode:()I
>    #75 = Utf8               hashString
>    #76 = Utf8               doCompareTo
>    #77 = Utf8
> (Laquila/administrator/topic/domain/DocumentTypeId;)I
>    #78 = Methodref          #79.#81       //
>  
> aquila/administrator/common/utils/ObjectUtilities.doCompareObject:(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
>    #79 = Class              #80           //
>  aquila/administrator/common/utils/ObjectUtilities
>    #80 = Utf8
> aquila/administrator/common/utils/ObjectUtilities
>    #81 = NameAndType        #82:#83       //
>  doCompareObject:(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
>    #82 = Utf8               doCompareObject
>    #83 = Utf8               (Ljava/lang/Comparable;Ljava/lang/Comparable;)I
>    #84 = Utf8               documentTypeId
>    #85 = Utf8               compareTo
>    #86 = Utf8               (Laquila/administrator/topic/domain/TopicId;)I
>    #87 = Methodref          #3.#88        //
>  
> aquila/administrator/topic/domain/TopicId.compareTo:(Laquila/administrator/topic/domain/TopicId;)I
>    #88 = NameAndType        #85:#86       //
>  compareTo:(Laquila/administrator/topic/domain/TopicId;)I
>    #89 = Methodref          #1.#90        //
>  
> aquila/administrator/topic/domain/DocumentTypeId.doCompareTo:(Laquila/administrator/topic/domain/DocumentTypeId;)I
>    #90 = NameAndType        #76:#77       //
>  doCompareTo:(Laquila/administrator/topic/domain/DocumentTypeId;)I
>    #91 = Utf8               topicId
>    #92 = Utf8               Laquila/administrator/topic/domain/TopicId;
>    #93 = Utf8               result
>    #94 = Utf8               I
>    #95 = Utf8               SourceFile
>    #96 = Utf8               DocumentTypeId.java
>    #97 = Utf8               RuntimeVisibleAnnotations
>    #98 = Utf8
> Laquila/administrator/common/aspects/Observable;
>    #99 = Utf8               Synthetic
>   #100 = Utf8               ajc$tjp_0
>   #101 = Utf8               Lorg/aspectj/lang/JoinPoint$StaticPart;
>   #102 = NameAndType        #100:#101     //
>  ajc$tjp_0:Lorg/aspectj/lang/JoinPoint$StaticPart;
>   #103 = Fieldref           #1.#102       //
>  
> aquila/administrator/topic/domain/DocumentTypeId.ajc$tjp_0:Lorg/aspectj/lang/JoinPoint$StaticPart;
>   #104 = Utf8               makeJP
>   #105 = Utf8
> (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
>   #106 = NameAndType        #104:#105     //
>  
> makeJP:(Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
>   #107 = Utf8               org/aspectj/runtime/reflect/Factory
>   #108 = Class              #107          //
>  org/aspectj/runtime/reflect/Factory
>   #109 = Methodref          #108.#106     //
>  
> org/aspectj/runtime/reflect/Factory.makeJP:(Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
>   #110 = Utf8               setDocumentType_aroundBody0
>   #111 = Utf8
> (Laquila/administrator/topic/domain/DocumentTypeId;Ljava/lang/String;Lorg/aspectj/lang/JoinPoint;)V
>   #112 = Utf8               ajc$this
>   #113 = Utf8               java/lang/Object
>   #114 = Class              #113          //  java/lang/Object
>   #115 = Utf8
> aquila/administrator/topic/domain/DocumentTypeId$AjcClosure1
>   #116 = Class              #115          //
>  aquila/administrator/topic/domain/DocumentTypeId$AjcClosure1
>   #117 = Utf8               ([Ljava/lang/Object;)V
>   #118 = NameAndType        #14:#117      //
>  "<init>":([Ljava/lang/Object;)V
>   #119 = Methodref          #116.#118     //
>  
> aquila/administrator/topic/domain/DocumentTypeId$AjcClosure1."<init>":([Ljava/lang/Object;)V
>   #120 = Integer            69649
>   #121 = Utf8               linkClosureAndJoinPoint
>   #122 = Utf8               (I)Lorg/aspectj/lang/ProceedingJoinPoint;
>   #123 = NameAndType        #121:#122     //
>  linkClosureAndJoinPoint:(I)Lorg/aspectj/lang/ProceedingJoinPoint;
>   #124 = Utf8               org/aspectj/runtime/internal/AroundClosure
>   #125 = Class              #124          //
>  org/aspectj/runtime/internal/AroundClosure
>   #126 = Methodref          #125.#123     //
>  
> org/aspectj/runtime/internal/AroundClosure.linkClosureAndJoinPoint:(I)Lorg/aspectj/lang/ProceedingJoinPoint;
>   #127 = Utf8               aspectOf
>   #128 = Utf8
> ()Laquila/administrator/common/aspects/impl/JavaBeanAspect;
>   #129 = NameAndType        #127:#128     //
>  aspectOf:()Laquila/administrator/common/aspects/impl/JavaBeanAspect;
>   #130 = Utf8
> aquila/administrator/common/aspects/impl/JavaBeanAspect
>   #131 = Class              #130          //
>  aquila/administrator/common/aspects/impl/JavaBeanAspect
>   #132 = Methodref          #131.#129     //
>  
> aquila/administrator/common/aspects/impl/JavaBeanAspect.aspectOf:()Laquila/administrator/common/aspects/impl/JavaBeanAspect;
>   #133 = Utf8               setterCalled
>   #134 = Utf8
> (Lorg/aspectj/lang/ProceedingJoinPoint;Laquila/administrator/common/aspects/JavaBean;)V
>   #135 = NameAndType        #133:#134     //
>  
> setterCalled:(Lorg/aspectj/lang/ProceedingJoinPoint;Laquila/administrator/common/aspects/JavaBean;)V
>   #136 = Methodref          #131.#135     //
>  
> aquila/administrator/common/aspects/impl/JavaBeanAspect.setterCalled:(Lorg/aspectj/lang/ProceedingJoinPoint;Laquila/administrator/common/aspects/JavaBean;)V
>   #137 = Methodref          #1.#88        //
>  
> aquila/administrator/topic/domain/DocumentTypeId.compareTo:(Laquila/administrator/topic/domain/TopicId;)I
>   #138 = Utf8               org.aspectj.weaver.WeaverVersion
>   #139 = Utf8               org.aspectj.weaver.WeaverState
>   #140 = String             #96           //  DocumentTypeId.java
>   #141 = Utf8               (Ljava/lang/String;Ljava/lang/Class;)V
>   #142 = NameAndType        #14:#141      //
>  "<init>":(Ljava/lang/String;Ljava/lang/Class;)V
>   #143 = Methodref          #108.#142     //
>  
> org/aspectj/runtime/reflect/Factory."<init>":(Ljava/lang/String;Ljava/lang/Class;)V
>   #144 = Utf8               method-execution
>   #145 = String             #144          //  method-execution
>   #146 = Utf8               1
>   #147 = String             #146          //  1
>   #148 = String             #34           //  setDocumentType
>   #149 = Utf8
> aquila.administrator.topic.domain.DocumentTypeId
>   #150 = String             #149          //
>  aquila.administrator.topic.domain.DocumentTypeId
>   #151 = Utf8               java.lang.String
>   #152 = String             #151          //  java.lang.String
>   #153 = Utf8
>   #154 = String             #153          //
>   #155 = Utf8               void
>   #156 = String             #155          //  void
>   #157 = Utf8               makeMethodSig
>   #158 = Utf8
> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;
>   #159 = NameAndType        #157:#158     //
>  
> makeMethodSig:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;
>   #160 = Methodref          #108.#159     //
>  
> org/aspectj/runtime/reflect/Factory.makeMethodSig:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;
>   #161 = Utf8               makeSJP
>   #162 = Utf8
> (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
>   #163 = NameAndType        #161:#162     //
>  
> makeSJP:(Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
>   #164 = Methodref          #108.#163     //
>  
> org/aspectj/runtime/reflect/Factory.makeSJP:(Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
>   #165 = Utf8               ajc$preClinit
>   #166 = NameAndType        #165:#15      //  ajc$preClinit:()V
>   #167 = Methodref          #1.#166       //
>  aquila/administrator/topic/domain/DocumentTypeId.ajc$preClinit:()V
>   #168 = Utf8               <clinit>
>   #169 = Utf8               (Ljava/lang/Object;)I
> {
>   protected java.lang.String documentType;
>     flags: ACC_PROTECTED
>
>
>   public static final java.lang.String PROPERTYNAME_DOCUMENTTYPE;
>     flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL
>
>     ConstantValue: String documentType
>
>   public aquila.administrator.topic.domain.DocumentTypeId();
>     flags: ACC_PUBLIC
>
>     Code:
>       stack=1, locals=1, args_size=1
>          0: aload_0
>          1: invokespecial #18                 // Method
> aquila/administrator/topic/domain/TopicId."<init>":()V
>          4: return
>       LocalVariableTable:
>         Start  Length  Slot  Name   Signature
>                0       5     0  this
> Laquila/administrator/topic/domain/DocumentTypeId;
>       LineNumberTable:
>         line 34: 0
>         line 35: 4
>       org.aspectj.weaver.MethodDeclarationLineNumber: length = 0x8
>        00 00 00 21 00 00 03 22
>
>   public
> aquila.administrator.topic.domain.DocumentTypeId(java.lang.String,
> java.lang.String, java.lang.String);
>     flags: ACC_PUBLIC
>
>     Code:
>       stack=3, locals=4, args_size=4
>          0: aload_0
>          1: aload_1
>          2: aload_2
>          3: invokespecial #25                 // Method
> aquila/administrator/topic/domain/TopicId."<init>":(Ljava/lang/String;Ljava/lang/String;)V
>          6: aload_0
>          7: aload_3
>          8: putfield      #28                 // Field
> documentType:Ljava/lang/String;
>         11: return
>       LocalVariableTable:
>         Start  Length  Slot  Name   Signature
>                0      12     0  this
> Laquila/administrator/topic/domain/DocumentTypeId;
>                0      12     1 businessGroup   Ljava/lang/String;
>                0      12     2 topicCode   Ljava/lang/String;
>                0      12     3 documentType   Ljava/lang/String;
>       LineNumberTable:
>         line 42: 0
>         line 43: 6
>         line 44: 11
>       org.aspectj.weaver.MethodDeclarationLineNumber: length = 0x8
>        00 00 00 29 00 00 03 FA
>
>   public java.lang.String getDocumentType();
>     flags: ACC_PUBLIC
>
>     Code:
>       stack=1, locals=1, args_size=1
>          0: aload_0
>          1: getfield      #28                 // Field
> documentType:Ljava/lang/String;
>          4: areturn
>       LocalVariableTable:
>         Start  Length  Slot  Name   Signature
>                0       5     0  this
> Laquila/administrator/topic/domain/DocumentTypeId;
>       LineNumberTable:
>         line 51: 0
>       org.aspectj.weaver.MethodDeclarationLineNumber: length = 0x8
>        00 00 00 32 00 00 05 21
>
>   public void setDocumentType(java.lang.String);
>     flags: ACC_PUBLIC
>
>     Code:
>       stack=4, locals=5, args_size=2
>          0: aload_1
>          1: astore_2
>          2: getstatic     #103                // Field
> ajc$tjp_0:Lorg/aspectj/lang/JoinPoint$StaticPart;
>          5: aload_0
>          6: aload_0
>          7: aload_2
>          8: invokestatic  #109                // Method
> org/aspectj/runtime/reflect/Factory.makeJP:(Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
>         11: astore_3
>         12: invokestatic  #132                // Method
> aquila/administrator/common/aspects/impl/JavaBeanAspect.aspectOf:()Laquila/administrator/common/aspects/impl/JavaBeanAspect;
>         15: iconst_3
>         16: anewarray     #114                // class java/lang/Object
>         19: astore        4
>         21: aload         4
>         23: iconst_0
>         24: aload_0
>         25: aastore
>         26: aload         4
>         28: iconst_1
>         29: aload_2
>         30: aastore
>         31: aload         4
>         33: iconst_2
>         34: aload_3
>         35: aastore
>         36: new           #116                // class
> aquila/administrator/topic/domain/DocumentTypeId$AjcClosure1
>         39: dup
>         40: aload         4
>         42: invokespecial #119                // Method
> aquila/administrator/topic/domain/DocumentTypeId$AjcClosure1."<init>":([Ljava/lang/Object;)V
>         45: ldc           #120                // int 69649
>         47: invokevirtual #126                // Method
> org/aspectj/runtime/internal/AroundClosure.linkClosureAndJoinPoint:(I)Lorg/aspectj/lang/ProceedingJoinPoint;
>         50: aload_0
>         51: invokevirtual #136                // Method
> aquila/administrator/common/aspects/impl/JavaBeanAspect.setterCalled:(Lorg/aspectj/lang/ProceedingJoinPoint;Laquila/administrator/common/aspects/JavaBean;)V
>         54: return
>       LocalVariableTable:
>         Start  Length  Slot  Name   Signature
>                0      55     0  this
> Laquila/administrator/topic/domain/DocumentTypeId;
>                0      55     1 documentType   Ljava/lang/String;
>       LineNumberTable:
>         line 58: 12
>       org.aspectj.weaver.MethodDeclarationLineNumber: length = 0x8
>        00 00 00 3A 00 00 05 CE
>
>   public boolean equals(java.lang.Object);
>     flags: ACC_PUBLIC
>
>     Code:
>       stack=2, locals=2, args_size=2
>          0: aload_0
>          1: aload_1
>          2: if_acmpne     7
>          5: iconst_1
>          6: ireturn
>          7: aload_1
>          8: instanceof    #1                  // class
> aquila/administrator/topic/domain/DocumentTypeId
>         11: ifne          16
>         14: iconst_0
>         15: ireturn
>         16: aload_0
>         17: getfield      #28                 // Field
> documentType:Ljava/lang/String;
>         20: ifnonnull     25
>         23: iconst_0
>         24: ireturn
>         25: aload_0
>         26: getfield      #28                 // Field
> documentType:Ljava/lang/String;
>         29: aload_1
>         30: checkcast     #1                  // class
> aquila/administrator/topic/domain/DocumentTypeId
>         33: getfield      #28                 // Field
> documentType:Ljava/lang/String;
>         36: invokevirtual #38                 // Method
> java/lang/String.equals:(Ljava/lang/Object;)Z
>         39: ifne          44
>         42: iconst_0
>         43: ireturn
>         44: aload_0
>         45: aload_1
>         46: invokespecial #42                 // Method
> aquila/administrator/topic/domain/TopicId.equals:(Ljava/lang/Object;)Z
>         49: ireturn
>       LocalVariableTable:
>         Start  Length  Slot  Name   Signature
>                0      50     0  this
> Laquila/administrator/topic/domain/DocumentTypeId;
>                0      50     1   obj   Ljava/lang/Object;
>       LineNumberTable:
>         line 69: 0
>         line 70: 5
>         line 72: 7
>         line 73: 14
>         line 75: 16
>         line 76: 23
>         line 78: 25
>         line 79: 42
>         line 81: 44
>       StackMapTable: number_of_entries = 4
>            frame_type = 7 /* same */
>            frame_type = 8 /* same */
>            frame_type = 8 /* same */
>            frame_type = 18 /* same */
>
>       org.aspectj.weaver.MethodDeclarationLineNumber: length = 0x8
>        00 00 00 44 00 00 06 D3
>
>   public int hashCode();
>     flags: ACC_PUBLIC
>
>     Code:
>       stack=3, locals=2, args_size=1
>          0: new           #48                 // class
> java/lang/StringBuilder
>          3: dup
>          4: aload_0
>          5: invokevirtual #50                 // Method
> getBusinessGroup:()Ljava/lang/String;
>          8: invokestatic  #53                 // Method
> java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
>         11: invokespecial #57                 // Method
> java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
>         14: ldc           #59                 // String *
>         16: invokevirtual #61                 // Method
> java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
>         19: aload_0
>         20: invokevirtual #65                 // Method
> getTopicCode:()Ljava/lang/String;
>         23: invokevirtual #61                 // Method
> java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
>         26: ldc           #59                 // String *
>         28: invokevirtual #61                 // Method
> java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
>         31: aload_0
>         32: invokevirtual #68                 // Method
> getDocumentType:()Ljava/lang/String;
>         35: invokevirtual #61                 // Method
> java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
>         38: invokevirtual #70                 // Method
> java/lang/StringBuilder.toString:()Ljava/lang/String;
>         41: astore_1
>         42: aload_1
>         43: invokevirtual #73                 // Method
> java/lang/String.hashCode:()I
>         46: ireturn
>       LocalVariableTable:
>         Start  Length  Slot  Name   Signature
>                0      47     0  this
> Laquila/administrator/topic/domain/DocumentTypeId;
>               42       5     1 hashString   Ljava/lang/String;
>       LineNumberTable:
>         line 91: 0
>         line 92: 14
>         line 93: 26
>         line 91: 38
>         line 95: 42
>       org.aspectj.weaver.MethodDeclarationLineNumber: length = 0x8
>        00 00 00 59 00 00 08 ED
>
>   public int compareTo(aquila.administrator.topic.domain.TopicId);
>     flags: ACC_PUBLIC
>
>     Code:
>       stack=2, locals=4, args_size=2
>          0: aload_1
>          1: checkcast     #1                  // class
> aquila/administrator/topic/domain/DocumentTypeId
>          4: astore_3
>          5: aload_0
>          6: aload_1
>          7: invokespecial #87                 // Method
> aquila/administrator/topic/domain/TopicId.compareTo:(Laquila/administrator/topic/domain/TopicId;)I
>         10: istore_2
>         11: iload_2
>         12: ifne          21
>         15: aload_0
>         16: aload_3
>         17: invokespecial #89                 // Method
> doCompareTo:(Laquila/administrator/topic/domain/DocumentTypeId;)I
>         20: istore_2
>         21: iload_2
>         22: ireturn
>       LocalVariableTable:
>         Start  Length  Slot  Name   Signature
>                0      23     0  this
> Laquila/administrator/topic/domain/DocumentTypeId;
>                0      23     1 topicId
> Laquila/administrator/topic/domain/TopicId;
>               11      12     2 result   I
>                5      18     3 documentTypeId
> Laquila/administrator/topic/domain/DocumentTypeId;
>       LineNumberTable:
>         line 122: 0
>         line 124: 5
>         line 125: 11
>         line 126: 15
>         line 129: 21
>       StackMapTable: number_of_entries = 1
>            frame_type = 253 /* append */
>              offset_delta = 21
>         locals = [ int, class
> aquila/administrator/topic/domain/DocumentTypeId ]
>
>       org.aspectj.weaver.MethodDeclarationLineNumber: length = 0x8
>        00 00 00 78 00 00 0E 69
>
>   static {};
>     flags: ACC_STATIC
>
>     Code:
>       stack=0, locals=0, args_size=0
>          0: invokestatic  #167                // Method ajc$preClinit:()V
>          3: return
>       LineNumberTable:
>         line 1: 0
>
>   static final void
> setDocumentType_aroundBody0(aquila.administrator.topic.domain.DocumentTypeId,
> java.lang.String, org.aspectj.lang.JoinPoint);
>     flags: ACC_STATIC, ACC_FINAL
>
>     Code:
>       stack=2, locals=3, args_size=3
>          0: aload_0
>          1: aload_1
>          2: putfield      #28                 // Field
> documentType:Ljava/lang/String;
>          5: return
>       LocalVariableTable:
>         Start  Length  Slot  Name   Signature
>                0       6     0 ajc$this
> Laquila/administrator/topic/domain/DocumentTypeId;
>                0       6     1 documentType   Ljava/lang/String;
>       LineNumberTable:
>         line 59: 0
>         line 60: 5
>     Synthetic: true
>
>   public int compareTo(java.lang.Object);
>     flags: ACC_PUBLIC, ACC_BRIDGE, 0x200
>
>     Code:
>       stack=2, locals=2, args_size=2
>          0: aload_0
>          1: aload_1
>          2: checkcast     #3                  // class
> aquila/administrator/topic/domain/TopicId
>          5: invokevirtual #137                // Method
> compareTo:(Laquila/administrator/topic/domain/TopicId;)I
>          8: ireturn
>       LocalVariableTable:
>         Start  Length  Slot  Name   Signature
>                0       9     0  this
> Laquila/administrator/topic/domain/DocumentTypeId;
>       LineNumberTable:
>         line 1: 0
> }
>
>
> On Fri, May 8, 2015 at 4:07 PM, Andy Clement <[email protected]>
> wrote:
>
>> Modifiers are played with in a number of places, if you can create a bit
>> of sample code that shows the problem I’m happy to look into it. I tried to
>> create the problem but couldn’t.
>>
>> What does the javap -verbose output look like for the woven result
>> (rather than the decompiler you are using).
>>
>> cheers,
>> Andy
>>
>> On May 8, 2015, at 6:27 AM, Tim Webster <[email protected]> wrote:
>>
>>
>> Hi,
>>
>> In our woven aspectJ code, it seems that bridge methods are being
>> incorrectly marked as interfaces.
>>
>> for example, in the following (decompiled) class here is the non-woven
>> compareTo() method:
>>
>>     public int compareTo(TopicId topicId)
>>     {
>>         DocumentTypeId documentTypeId = (DocumentTypeId)topicId;
>>         int result = super.compareTo(topicId);
>>         if(0 == result)
>>             result = doCompareTo(documentTypeId);
>>         return result;
>>     }
>>
>>     public volatile int compareTo(Object x0)
>>     {
>>         return compareTo((TopicId)x0);
>>     }
>>
>>
>>
>> *And here is the woven version:*
>>
>>
>>     public int compareTo(TopicId topicId)
>>     {
>>         DocumentTypeId documentTypeId = (DocumentTypeId)topicId;
>>         int result = super.compareTo(topicId);
>>         if(result == 0)
>>             result = doCompareTo(documentTypeId);
>>         return result;
>>     }
>>
>>    public volatile *interface* int compareTo(Object obj)
>>     {
>>         return compareTo((TopicId)obj);
>>     }
>>
>>
>> This is causing some static analysis tools to fail, so it's a problem.
>>
>> Does anyone have any idea where I can start with investigating why this
>> would be happening?
>>
>> Thanks,
>>
>>
>>
>>
>>
>> _______________________________________________
>> aspectj-users mailing list
>> [email protected]
>> To change your delivery options, retrieve your password, or unsubscribe
>> from this list, visit
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
>>
>> _______________________________________________
>> aspectj-users mailing list
>> [email protected]
>> To change your delivery options, retrieve your password, or unsubscribe
>> from this list, visit
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>
>
_______________________________________________
aspectj-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to