예제 #1
0
 private static void AddMetaAnnotations(ClassFileWriter writer, TypeWrapper tw)
 {
     DotNetTypeWrapper.AttributeAnnotationTypeWrapperBase attributeAnnotation = tw as DotNetTypeWrapper.AttributeAnnotationTypeWrapperBase;
     if (attributeAnnotation != null)
     {
         // TODO write the annotation directly, instead of going thru the object[] encoding
         RuntimeVisibleAnnotationsAttribute annot = new RuntimeVisibleAnnotationsAttribute(writer);
         annot.Add(new object[] {
             AnnotationDefaultAttribute.TAG_ANNOTATION,
             "Ljava/lang/annotation/Retention;",
             "value",
             new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/RetentionPolicy;", "RUNTIME" }
         });
         AttributeTargets validOn = attributeAnnotation.AttributeTargets;
         List <object>    targets = new List <object>();
         targets.Add(AnnotationDefaultAttribute.TAG_ARRAY);
         if ((validOn & (AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Delegate | AttributeTargets.Assembly)) != 0)
         {
             targets.Add(new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/ElementType;", "TYPE" });
         }
         if ((validOn & AttributeTargets.Constructor) != 0)
         {
             targets.Add(new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/ElementType;", "CONSTRUCTOR" });
         }
         if ((validOn & AttributeTargets.Field) != 0)
         {
             targets.Add(new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/ElementType;", "FIELD" });
         }
         if ((validOn & (AttributeTargets.Method | AttributeTargets.ReturnValue)) != 0)
         {
             targets.Add(new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/ElementType;", "METHOD" });
         }
         if ((validOn & AttributeTargets.Parameter) != 0)
         {
             targets.Add(new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/ElementType;", "PARAMETER" });
         }
         annot.Add(new object[] {
             AnnotationDefaultAttribute.TAG_ANNOTATION,
             "Ljava/lang/annotation/Target;",
             "value",
             targets.ToArray()
         });
         if (IsRepeatableAnnotation(tw))
         {
             annot.Add(new object[] {
                 AnnotationDefaultAttribute.TAG_ANNOTATION,
                 "Ljava/lang/annotation/Repeatable;",
                 "value",
                 new object[] { AnnotationDefaultAttribute.TAG_CLASS, "L" + (tw.Name + DotNetTypeWrapper.AttributeAnnotationMultipleSuffix).Replace('.', '/') + ";" }
             });
         }
         writer.AddAttribute(annot);
     }
 }
예제 #2
0
 private static void AddMetaAnnotations(ClassFileWriter writer, TypeWrapper tw)
 {
     DotNetTypeWrapper.AttributeAnnotationTypeWrapperBase attributeAnnotation = tw as DotNetTypeWrapper.AttributeAnnotationTypeWrapperBase;
     if (attributeAnnotation != null)
     {
         // TODO write the annotation directly, instead of going thru the object[] encoding
         RuntimeVisibleAnnotationsAttribute annot = new RuntimeVisibleAnnotationsAttribute(writer);
         annot.Add(new object[] {
             AnnotationDefaultAttribute.TAG_ANNOTATION,
             "Ljava/lang/annotation/Retention;",
             "value",
             new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/RetentionPolicy;", "RUNTIME" }
         });
         AttributeTargets validOn = attributeAnnotation.AttributeTargets;
         List<object> targets = new List<object>();
         targets.Add(AnnotationDefaultAttribute.TAG_ARRAY);
         if ((validOn & (AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Delegate | AttributeTargets.Assembly)) != 0)
         {
             targets.Add(new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/ElementType;", "TYPE" });
         }
         if ((validOn & AttributeTargets.Constructor) != 0)
         {
             targets.Add(new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/ElementType;", "CONSTRUCTOR" });
         }
         if ((validOn & AttributeTargets.Field) != 0)
         {
             targets.Add(new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/ElementType;", "FIELD" });
         }
         if ((validOn & (AttributeTargets.Method | AttributeTargets.ReturnValue)) != 0)
         {
             targets.Add(new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/ElementType;", "METHOD" });
         }
         if ((validOn & AttributeTargets.Parameter) != 0)
         {
             targets.Add(new object[] { AnnotationDefaultAttribute.TAG_ENUM, "Ljava/lang/annotation/ElementType;", "PARAMETER" });
         }
         annot.Add(new object[] {
             AnnotationDefaultAttribute.TAG_ANNOTATION,
             "Ljava/lang/annotation/Target;",
             "value",
             targets.ToArray()
         });
         if (Experimental.JDK_8 && IsRepeatableAnnotation(tw))
         {
             annot.Add(new object[] {
                 AnnotationDefaultAttribute.TAG_ANNOTATION,
                 "Ljava/lang/annotation/Repeatable;",
                 "value",
                 new object[] { AnnotationDefaultAttribute.TAG_CLASS, "L" + (tw.Name + DotNetTypeWrapper.AttributeAnnotationMultipleSuffix).Replace('.', '/') + ";" }
             });
         }
         writer.AddAttribute(annot);
     }
 }