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; }
///
/// Gets the name of the annotation (e.g., "Override" for @Override).
///
public string Name => Type.Name;
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;
}
}
}