Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions IronJava.Core/AST/Builders/AstBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ private PrimitiveTypeKind ParsePrimitiveTypeKind(string typeName)

return new ClassDeclaration(
location, name, modifiers, annotations, typeParameters,
superClass, interfaces, members, javaDoc
superClass, interfaces, members, new List<TypeDeclaration>(), javaDoc, false
);
}

Expand All @@ -218,7 +218,7 @@ private PrimitiveTypeKind ParsePrimitiveTypeKind(string typeName)

return new InterfaceDeclaration(
location, name, modifiers, annotations, typeParameters,
extendedInterfaces, members, javaDoc
extendedInterfaces, members, new List<TypeDeclaration>(), javaDoc
);
}

Expand All @@ -236,7 +236,7 @@ private PrimitiveTypeKind ParsePrimitiveTypeKind(string typeName)

return new EnumDeclaration(
location, name, modifiers, annotations,
interfaces, constants, members, javaDoc
interfaces, constants, members, new List<TypeDeclaration>(), javaDoc
);
}

Expand All @@ -250,7 +250,7 @@ private PrimitiveTypeKind ParsePrimitiveTypeKind(string typeName)
var javaDoc = ExtractJavaDoc(context);

return new AnnotationDeclaration(
location, name, modifiers, annotations, members, javaDoc
location, name, modifiers, annotations, members, new List<TypeDeclaration>(), javaDoc
);
}

Expand Down Expand Up @@ -1125,7 +1125,9 @@ private List<EnumConstant> BuildEnumConstants(Java9Parser.EnumConstantListContex
null,
new List<TypeReference>(),
members,
null
new List<TypeDeclaration>(),
null,
false
);
}

Expand Down Expand Up @@ -2108,7 +2110,9 @@ private string UnescapeStringLiteral(string literal)
type,
new List<TypeReference>(),
members,
null
new List<TypeDeclaration>(),
null,
false
);
}

Expand Down Expand Up @@ -2829,7 +2833,9 @@ private BlockStatement BuildBlockFromStatements(Java9Parser.BlockStatementsConte
type,
new List<TypeReference>(),
members,
null
new List<TypeDeclaration>(),
null,
false
);
}

Expand Down
5 changes: 5 additions & 0 deletions IronJava.Core/AST/Nodes/Annotations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ public class Annotation : JavaNode
{
public TypeReference Type { get; }
public IReadOnlyList<AnnotationArgument> Arguments { get; }

/// <summary>
/// Gets the name of the annotation (e.g., "Override" for @Override).
/// </summary>
public string Name => Type.Name;

public Annotation(
SourceRange location,
Expand Down
12 changes: 12 additions & 0 deletions IronJava.Core/AST/Nodes/CompilationUnit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ public class PackageDeclaration : JavaNode
{
public string PackageName { get; }
public IReadOnlyList<Annotation> Annotations { get; }

/// <summary>
/// Gets the package name. Alias for PackageName for consistency.
/// </summary>
public string Name => PackageName;

public PackageDeclaration(
SourceRange location,
Expand All @@ -61,6 +66,13 @@ public class ImportDeclaration : JavaNode
public string ImportPath { get; }
public bool IsStatic { get; }
public bool IsWildcard { get; }

/// <summary>
/// Gets the name of the imported type or package.
/// For "import java.util.List", returns "java.util.List"
/// For "import java.util.*", returns "java.util.*"
/// </summary>
public string Name => ImportPath;

public ImportDeclaration(
SourceRange location,
Expand Down
30 changes: 30 additions & 0 deletions IronJava.Core/AST/Nodes/TypeDeclarations.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using MarketAlly.IronJava.Core.AST.Visitors;

namespace MarketAlly.IronJava.Core.AST.Nodes
Expand All @@ -13,6 +14,11 @@ public abstract class TypeDeclaration : JavaNode
public IReadOnlyList<Annotation> Annotations { get; }
public IReadOnlyList<TypeParameter> TypeParameters { get; }
public JavaDoc? JavaDoc { get; }

/// <summary>
/// Gets the body/members of this type declaration.
/// </summary>
public abstract IEnumerable<JavaNode> Body { get; }

protected TypeDeclaration(
SourceRange location,
Expand Down Expand Up @@ -42,6 +48,7 @@ public class ClassDeclaration : TypeDeclaration
public TypeReference? SuperClass { get; }
public IReadOnlyList<TypeReference> Interfaces { get; }
public IReadOnlyList<MemberDeclaration> Members { get; }
public IReadOnlyList<TypeDeclaration> NestedTypes { get; }
public bool IsRecord { get; }

public ClassDeclaration(
Expand All @@ -53,20 +60,25 @@ public ClassDeclaration(
TypeReference? superClass,
IReadOnlyList<TypeReference> interfaces,
IReadOnlyList<MemberDeclaration> members,
IReadOnlyList<TypeDeclaration> nestedTypes,
JavaDoc? javaDoc,
bool isRecord = false)
: base(location, name, modifiers, annotations, typeParameters, javaDoc)
{
SuperClass = superClass;
Interfaces = interfaces;
Members = members;
NestedTypes = nestedTypes;
IsRecord = isRecord;

if (superClass != null) AddChild(superClass);
AddChildren(interfaces);
AddChildren(members);
AddChildren(nestedTypes);
}

public override IEnumerable<JavaNode> Body => Members.Cast<JavaNode>().Concat(NestedTypes);

public override T Accept<T>(IJavaVisitor<T> visitor) => visitor.VisitClassDeclaration(this);
public override void Accept(IJavaVisitor visitor) => visitor.VisitClassDeclaration(this);
}
Expand All @@ -78,6 +90,7 @@ public class InterfaceDeclaration : TypeDeclaration
{
public IReadOnlyList<TypeReference> ExtendedInterfaces { get; }
public IReadOnlyList<MemberDeclaration> Members { get; }
public IReadOnlyList<TypeDeclaration> NestedTypes { get; }

public InterfaceDeclaration(
SourceRange location,
Expand All @@ -87,16 +100,21 @@ public InterfaceDeclaration(
IReadOnlyList<TypeParameter> typeParameters,
IReadOnlyList<TypeReference> extendedInterfaces,
IReadOnlyList<MemberDeclaration> members,
IReadOnlyList<TypeDeclaration> nestedTypes,
JavaDoc? javaDoc)
: base(location, name, modifiers, annotations, typeParameters, javaDoc)
{
ExtendedInterfaces = extendedInterfaces;
Members = members;
NestedTypes = nestedTypes;

AddChildren(extendedInterfaces);
AddChildren(members);
AddChildren(nestedTypes);
}

public override IEnumerable<JavaNode> Body => Members.Cast<JavaNode>().Concat(NestedTypes);

public override T Accept<T>(IJavaVisitor<T> visitor) => visitor.VisitInterfaceDeclaration(this);
public override void Accept(IJavaVisitor visitor) => visitor.VisitInterfaceDeclaration(this);
}
Expand All @@ -109,6 +127,7 @@ public class EnumDeclaration : TypeDeclaration
public IReadOnlyList<TypeReference> Interfaces { get; }
public IReadOnlyList<EnumConstant> Constants { get; }
public IReadOnlyList<MemberDeclaration> Members { get; }
public IReadOnlyList<TypeDeclaration> NestedTypes { get; }

public EnumDeclaration(
SourceRange location,
Expand All @@ -118,18 +137,23 @@ public EnumDeclaration(
IReadOnlyList<TypeReference> interfaces,
IReadOnlyList<EnumConstant> constants,
IReadOnlyList<MemberDeclaration> members,
IReadOnlyList<TypeDeclaration> nestedTypes,
JavaDoc? javaDoc)
: base(location, name, modifiers, annotations, new List<TypeParameter>(), javaDoc)
{
Interfaces = interfaces;
Constants = constants;
Members = members;
NestedTypes = nestedTypes;

AddChildren(interfaces);
AddChildren(constants);
AddChildren(members);
AddChildren(nestedTypes);
}

public override IEnumerable<JavaNode> Body => Constants.Cast<JavaNode>().Concat(Members).Concat(NestedTypes);

public override T Accept<T>(IJavaVisitor<T> visitor) => visitor.VisitEnumDeclaration(this);
public override void Accept(IJavaVisitor visitor) => visitor.VisitEnumDeclaration(this);
}
Expand All @@ -140,20 +164,26 @@ public EnumDeclaration(
public class AnnotationDeclaration : TypeDeclaration
{
public IReadOnlyList<AnnotationMember> Members { get; }
public IReadOnlyList<TypeDeclaration> NestedTypes { get; }

public AnnotationDeclaration(
SourceRange location,
string name,
Modifiers modifiers,
IReadOnlyList<Annotation> annotations,
IReadOnlyList<AnnotationMember> members,
IReadOnlyList<TypeDeclaration> nestedTypes,
JavaDoc? javaDoc)
: base(location, name, modifiers, annotations, new List<TypeParameter>(), javaDoc)
{
Members = members;
NestedTypes = nestedTypes;
AddChildren(members);
AddChildren(nestedTypes);
}

public override IEnumerable<JavaNode> Body => Members.Cast<JavaNode>().Concat(NestedTypes);

public override T Accept<T>(IJavaVisitor<T> visitor) => visitor.VisitAnnotationDeclaration(this);
public override void Accept(IJavaVisitor visitor) => visitor.VisitAnnotationDeclaration(this);
}
Expand Down
24 changes: 22 additions & 2 deletions IronJava.Core/AST/Nodes/Types.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,16 @@ namespace MarketAlly.IronJava.Core.AST.Nodes
public abstract class TypeReference : JavaNode
{
protected TypeReference(SourceRange location) : base(location) { }

/// <summary>
/// Gets the simple name of the type.
/// </summary>
public abstract string Name { get; }

/// <summary>
/// Gets the fully qualified name of the type.
/// </summary>
public virtual string QualifiedName => Name;
}

/// <summary>
Expand All @@ -17,6 +27,8 @@ protected TypeReference(SourceRange location) : base(location) { }
public class PrimitiveType : TypeReference
{
public PrimitiveTypeKind Kind { get; }

public override string Name => Kind.ToString().ToLower();

public PrimitiveType(SourceRange location, PrimitiveTypeKind kind) : base(location)
{
Expand Down Expand Up @@ -45,7 +57,9 @@ public enum PrimitiveTypeKind
/// </summary>
public class ClassOrInterfaceType : TypeReference
{
public string Name { get; }
private readonly string _name;

public override string Name => _name;
public ClassOrInterfaceType? Scope { get; }
public IReadOnlyList<TypeArgument> TypeArguments { get; }
public IReadOnlyList<Annotation> Annotations { get; }
Expand All @@ -57,7 +71,7 @@ public ClassOrInterfaceType(
IReadOnlyList<TypeArgument> typeArguments,
IReadOnlyList<Annotation> annotations) : base(location)
{
Name = name;
_name = name;
Scope = scope;
TypeArguments = typeArguments;
Annotations = annotations;
Expand All @@ -68,6 +82,8 @@ public ClassOrInterfaceType(
}

public string FullName => Scope != null ? $"{Scope.FullName}.{Name}" : Name;

public override string QualifiedName => FullName;

public override T Accept<T>(IJavaVisitor<T> visitor) => visitor.VisitClassOrInterfaceType(this);
public override void Accept(IJavaVisitor visitor) => visitor.VisitClassOrInterfaceType(this);
Expand All @@ -80,6 +96,10 @@ public class ArrayType : TypeReference
{
public TypeReference ElementType { get; }
public int Dimensions { get; }

public override string Name => ElementType.Name + new string('[', Dimensions) + new string(']', Dimensions);

public override string QualifiedName => ElementType.QualifiedName + new string('[', Dimensions) + new string(']', Dimensions);

public ArrayType(
SourceRange location,
Expand Down
3 changes: 3 additions & 0 deletions IronJava.Core/AST/Transformation/AstTransformer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ public IdentifierRenamer(string oldName, string newName)
node.SuperClass,
node.Interfaces,
transformedMembers,
node.NestedTypes,
node.JavaDoc,
node.IsRecord
);
Expand Down Expand Up @@ -201,6 +202,7 @@ public static ModifierTransformer RemoveModifier(Modifiers modifier)
node.SuperClass,
node.Interfaces,
transformedMembers,
node.NestedTypes,
node.JavaDoc,
node.IsRecord
);
Expand Down Expand Up @@ -336,6 +338,7 @@ public NodeRemover(Func<JavaNode, bool> shouldRemove)
node.SuperClass,
node.Interfaces,
transformedMembers,
node.NestedTypes,
node.JavaDoc,
node.IsRecord
);
Expand Down
Loading
Loading