using System.Collections.Generic; using MarketAlly.IronJava.Core.AST.Visitors; namespace MarketAlly.IronJava.Core.AST.Nodes { /// /// Represents a Java annotation usage. /// public class Annotation : JavaNode { public TypeReference Type { get; } public IReadOnlyList Arguments { get; } public Annotation( SourceRange location, TypeReference type, IReadOnlyList arguments) : base(location) { Type = type; Arguments = arguments; AddChild(type); AddChildren(arguments); } public override T Accept(IJavaVisitor visitor) => visitor.VisitAnnotation(this); public override void Accept(IJavaVisitor visitor) => visitor.VisitAnnotation(this); } /// /// Base class for annotation arguments. /// public abstract class AnnotationArgument : JavaNode { public string? Name { get; } protected AnnotationArgument(SourceRange location, string? name) : base(location) { Name = name; } } /// /// Represents a simple annotation argument (name = value). /// public class AnnotationValueArgument : AnnotationArgument { public Expression Value { get; } public AnnotationValueArgument( SourceRange location, string? name, Expression value) : base(location, name) { Value = value; AddChild(value); } public override T Accept(IJavaVisitor visitor) => visitor.VisitAnnotationValueArgument(this); public override void Accept(IJavaVisitor visitor) => visitor.VisitAnnotationValueArgument(this); } /// /// Represents an array annotation argument. /// public class AnnotationArrayArgument : AnnotationArgument { public IReadOnlyList Values { get; } public AnnotationArrayArgument( SourceRange location, string? name, IReadOnlyList values) : base(location, name) { Values = values; AddChildren(values); } public override T Accept(IJavaVisitor visitor) => visitor.VisitAnnotationArrayArgument(this); public override void Accept(IJavaVisitor visitor) => visitor.VisitAnnotationArrayArgument(this); } /// /// Represents JavaDoc documentation. /// public class JavaDoc : JavaNode { public string Content { get; } public IReadOnlyList Tags { get; } public JavaDoc( SourceRange location, string content, IReadOnlyList tags) : base(location) { Content = content; Tags = tags; } public override T Accept(IJavaVisitor visitor) => visitor.VisitJavaDoc(this); public override void Accept(IJavaVisitor visitor) => visitor.VisitJavaDoc(this); } /// /// Represents a JavaDoc tag (@param, @return, etc.). /// public class JavaDocTag { public string Name { get; } public string? Parameter { get; } public string Description { get; } public JavaDocTag(string name, string? parameter, string description) { Name = name; Parameter = parameter; Description = description; } } }