using System.Collections.Generic; using IronJava.Core.AST.Visitors; namespace IronJava.Core.AST.Nodes { /// /// Represents a Java source file (compilation unit). /// public class CompilationUnit : JavaNode { public PackageDeclaration? Package { get; } public IReadOnlyList Imports { get; } public IReadOnlyList Types { get; } public CompilationUnit( SourceRange location, PackageDeclaration? package, IReadOnlyList imports, IReadOnlyList types) : base(location) { Package = package; Imports = imports; Types = types; if (package != null) AddChild(package); AddChildren(imports); AddChildren(types); } public override T Accept(IJavaVisitor visitor) => visitor.VisitCompilationUnit(this); public override void Accept(IJavaVisitor visitor) => visitor.VisitCompilationUnit(this); } /// /// Represents a package declaration. /// public class PackageDeclaration : JavaNode { public string PackageName { get; } public IReadOnlyList Annotations { get; } public PackageDeclaration( SourceRange location, string packageName, IReadOnlyList annotations) : base(location) { PackageName = packageName; Annotations = annotations; AddChildren(annotations); } public override T Accept(IJavaVisitor visitor) => visitor.VisitPackageDeclaration(this); public override void Accept(IJavaVisitor visitor) => visitor.VisitPackageDeclaration(this); } /// /// Represents an import declaration. /// public class ImportDeclaration : JavaNode { public string ImportPath { get; } public bool IsStatic { get; } public bool IsWildcard { get; } public ImportDeclaration( SourceRange location, string importPath, bool isStatic, bool isWildcard) : base(location) { ImportPath = importPath; IsStatic = isStatic; IsWildcard = isWildcard; } public override T Accept(IJavaVisitor visitor) => visitor.VisitImportDeclaration(this); public override void Accept(IJavaVisitor visitor) => visitor.VisitImportDeclaration(this); } }