mirror of
https://github.com/apple/pkl.git
synced 2026-07-09 14:42:50 +02:00
pkl-parser: Represent "no children" as an empty list instead of null (#1513)
Motivation: Facilitate the use of the NullAway checker as part of moving to JSpecify. Changes: - represent "no children" as `List.of()` instead of null - remove obsolete `children != null` assertions - NullAway intentionally ignores such assertions - remove "no children" special-casing where no longer necessary Result: - cleaner code with similar performance - removed a barrier to using the NullAway checker
This commit is contained in:
@@ -219,9 +219,6 @@ public class PowerAssertions {
|
|||||||
return parserNode;
|
return parserNode;
|
||||||
}
|
}
|
||||||
var children = parserNode.children();
|
var children = parserNode.children();
|
||||||
if (children == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
for (var child : children) {
|
for (var child : children) {
|
||||||
var found = findParserNode(node, child, offset);
|
var found = findParserNode(node, child, offset);
|
||||||
if (found != null) {
|
if (found != null) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -465,7 +465,6 @@ public abstract class BaseParserVisitor<T> implements ParserVisitor<T> {
|
|||||||
private T visitChildren(Node node) {
|
private T visitChildren(Node node) {
|
||||||
T result = defaultValue();
|
T result = defaultValue();
|
||||||
var children = node.children();
|
var children = node.children();
|
||||||
if (children == null) return result;
|
|
||||||
for (var child : children) {
|
for (var child : children) {
|
||||||
if (child != null) {
|
if (child != null) {
|
||||||
result = aggregateResult(result, child.accept(this));
|
result = aggregateResult(result, child.accept(this));
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -23,22 +23,20 @@ import org.pkl.parser.util.Nullable;
|
|||||||
|
|
||||||
public abstract class AbstractNode implements Node {
|
public abstract class AbstractNode implements Node {
|
||||||
protected final Span span;
|
protected final Span span;
|
||||||
protected final @Nullable List<? extends @Nullable Node> children;
|
protected final List<? extends @Nullable Node> children;
|
||||||
protected @Nullable Node parent;
|
protected @Nullable Node parent;
|
||||||
|
|
||||||
public AbstractNode(Span span, @Nullable List<? extends @Nullable Node> children) {
|
public AbstractNode(Span span, List<? extends @Nullable Node> children) {
|
||||||
this.span = span;
|
this.span = span;
|
||||||
if (children != null) {
|
if (children.isEmpty()) {
|
||||||
this.children = Collections.unmodifiableList(children);
|
// optimization: always store an unwrapped List.of()
|
||||||
|
this.children = List.of();
|
||||||
} else {
|
} else {
|
||||||
this.children = null;
|
this.children = Collections.unmodifiableList(children);
|
||||||
}
|
}
|
||||||
|
for (var node : children) {
|
||||||
if (children != null) {
|
if (node != null) {
|
||||||
for (var node : children) {
|
node.setParent(this);
|
||||||
if (node != null) {
|
|
||||||
node.setParent(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,7 +57,7 @@ public abstract class AbstractNode implements Node {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable List<? extends @Nullable Node> children() {
|
public List<? extends @Nullable Node> children() {
|
||||||
return children;
|
return children;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,14 +31,12 @@ public final class Annotation extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Type getType() {
|
public Type getType() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Type) children.get(0);
|
var ret = (Type) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable ObjectBody getBody() {
|
public @Nullable ObjectBody getBody() {
|
||||||
assert children != null;
|
|
||||||
return (ObjectBody) children.get(1);
|
return (ObjectBody) children.get(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ public final class ArgumentList extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Expr> getArguments() {
|
public List<Expr> getArguments() {
|
||||||
assert children != null;
|
|
||||||
return (List<Expr>) children;
|
return (List<Expr>) children;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,55 +36,46 @@ public final class Class extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable DocComment getDocComment() {
|
public @Nullable DocComment getDocComment() {
|
||||||
assert children != null;
|
|
||||||
return (DocComment) children.get(0);
|
return (DocComment) children.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Annotation> getAnnotations() {
|
public List<Annotation> getAnnotations() {
|
||||||
assert children != null;
|
|
||||||
return (List<Annotation>) children.subList(1, modifiersOffset);
|
return (List<Annotation>) children.subList(1, modifiersOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Modifier> getModifiers() {
|
public List<Modifier> getModifiers() {
|
||||||
assert children != null;
|
|
||||||
return (List<Modifier>) children.subList(modifiersOffset, keywordOffset);
|
return (List<Modifier>) children.subList(modifiersOffset, keywordOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Keyword getClassKeyword() {
|
public Keyword getClassKeyword() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Keyword) children.get(keywordOffset);
|
var ret = (Keyword) children.get(keywordOffset);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Identifier getName() {
|
public Identifier getName() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Identifier) children.get(keywordOffset + 1);
|
var ret = (Identifier) children.get(keywordOffset + 1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable TypeParameterList getTypeParameterList() {
|
public @Nullable TypeParameterList getTypeParameterList() {
|
||||||
assert children != null;
|
|
||||||
return (TypeParameterList) children.get(keywordOffset + 2);
|
return (TypeParameterList) children.get(keywordOffset + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable Type getSuperClass() {
|
public @Nullable Type getSuperClass() {
|
||||||
assert children != null;
|
|
||||||
return (Type) children.get(keywordOffset + 3);
|
return (Type) children.get(keywordOffset + 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable ClassBody getBody() {
|
public @Nullable ClassBody getBody() {
|
||||||
assert children != null;
|
|
||||||
return (ClassBody) children.get(keywordOffset + 4);
|
return (ClassBody) children.get(keywordOffset + 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("DuplicatedCode")
|
@SuppressWarnings("DuplicatedCode")
|
||||||
public Span getHeaderSpan() {
|
public Span getHeaderSpan() {
|
||||||
Span start = null;
|
Span start = null;
|
||||||
assert children != null;
|
|
||||||
for (var i = modifiersOffset; i < children.size(); i++) {
|
for (var i = modifiersOffset; i < children.size(); i++) {
|
||||||
var child = children.get(i);
|
var child = children.get(i);
|
||||||
if (child != null) {
|
if (child != null) {
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ public final class ClassBody extends AbstractNode {
|
|||||||
|
|
||||||
public List<ClassProperty> getProperties() {
|
public List<ClassProperty> getProperties() {
|
||||||
var props = new ArrayList<ClassProperty>();
|
var props = new ArrayList<ClassProperty>();
|
||||||
assert children != null;
|
|
||||||
for (var child : children) {
|
for (var child : children) {
|
||||||
if (child instanceof ClassProperty prop) {
|
if (child instanceof ClassProperty prop) {
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
@@ -45,7 +44,6 @@ public final class ClassBody extends AbstractNode {
|
|||||||
|
|
||||||
public List<ClassMethod> getMethods() {
|
public List<ClassMethod> getMethods() {
|
||||||
var methods = new ArrayList<ClassMethod>();
|
var methods = new ArrayList<ClassMethod>();
|
||||||
assert children != null;
|
|
||||||
for (var child : children) {
|
for (var child : children) {
|
||||||
if (child instanceof ClassMethod method) {
|
if (child instanceof ClassMethod method) {
|
||||||
methods.add(method);
|
methods.add(method);
|
||||||
|
|||||||
@@ -39,48 +39,40 @@ public final class ClassMethod extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable DocComment getDocComment() {
|
public @Nullable DocComment getDocComment() {
|
||||||
assert children != null;
|
|
||||||
return (DocComment) children.get(0);
|
return (DocComment) children.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Annotation> getAnnotations() {
|
public List<Annotation> getAnnotations() {
|
||||||
assert children != null;
|
|
||||||
return (List<Annotation>) children.subList(1, modifiersOffset);
|
return (List<Annotation>) children.subList(1, modifiersOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Modifier> getModifiers() {
|
public List<Modifier> getModifiers() {
|
||||||
assert children != null;
|
|
||||||
return (List<Modifier>) children.subList(modifiersOffset, nameOffset);
|
return (List<Modifier>) children.subList(modifiersOffset, nameOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Identifier getName() {
|
public Identifier getName() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Identifier) children.get(nameOffset);
|
var ret = (Identifier) children.get(nameOffset);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable TypeParameterList getTypeParameterList() {
|
public @Nullable TypeParameterList getTypeParameterList() {
|
||||||
assert children != null;
|
|
||||||
return (TypeParameterList) children.get(nameOffset + 1);
|
return (TypeParameterList) children.get(nameOffset + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParameterList getParameterList() {
|
public ParameterList getParameterList() {
|
||||||
assert children != null;
|
|
||||||
var ret = (ParameterList) children.get(nameOffset + 2);
|
var ret = (ParameterList) children.get(nameOffset + 2);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable TypeAnnotation getTypeAnnotation() {
|
public @Nullable TypeAnnotation getTypeAnnotation() {
|
||||||
assert children != null;
|
|
||||||
return (TypeAnnotation) children.get(nameOffset + 3);
|
return (TypeAnnotation) children.get(nameOffset + 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable Expr getExpr() {
|
public @Nullable Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
return (Expr) children.get(nameOffset + 4);
|
return (Expr) children.get(nameOffset + 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,42 +36,35 @@ public final class ClassProperty extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable DocComment getDocComment() {
|
public @Nullable DocComment getDocComment() {
|
||||||
assert children != null;
|
|
||||||
return (DocComment) children.get(0);
|
return (DocComment) children.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Annotation> getAnnotations() {
|
public List<Annotation> getAnnotations() {
|
||||||
assert children != null;
|
|
||||||
return (List<Annotation>) children.subList(1, modifiersOffset);
|
return (List<Annotation>) children.subList(1, modifiersOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Modifier> getModifiers() {
|
public List<Modifier> getModifiers() {
|
||||||
assert children != null;
|
|
||||||
return (List<Modifier>) children.subList(modifiersOffset, nameOffset);
|
return (List<Modifier>) children.subList(modifiersOffset, nameOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Identifier getName() {
|
public Identifier getName() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Identifier) children.get(nameOffset);
|
var ret = (Identifier) children.get(nameOffset);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable TypeAnnotation getTypeAnnotation() {
|
public @Nullable TypeAnnotation getTypeAnnotation() {
|
||||||
assert children != null;
|
|
||||||
return (TypeAnnotation) children.get(nameOffset + 1);
|
return (TypeAnnotation) children.get(nameOffset + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable Expr getExpr() {
|
public @Nullable Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
return (Expr) children.get(nameOffset + 2);
|
return (Expr) children.get(nameOffset + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<ObjectBody> getBodyList() {
|
public List<ObjectBody> getBodyList() {
|
||||||
assert children != null;
|
|
||||||
return (List<ObjectBody>) children.subList(nameOffset + 3, children.size());
|
return (List<ObjectBody>) children.subList(nameOffset + 3, children.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public final class DocComment extends AbstractNode {
|
|||||||
private final List<Span> spans;
|
private final List<Span> spans;
|
||||||
|
|
||||||
public DocComment(List<Span> spans) {
|
public DocComment(List<Span> spans) {
|
||||||
super(spans.get(0).endWith(spans.get(spans.size() - 1)), null);
|
super(spans.get(0).endWith(spans.get(spans.size() - 1)), List.of());
|
||||||
this.spans = spans;
|
this.spans = spans;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,13 +25,13 @@ import org.pkl.parser.util.Nullable;
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public abstract sealed class Expr extends AbstractNode {
|
public abstract sealed class Expr extends AbstractNode {
|
||||||
|
|
||||||
public Expr(Span span, @Nullable List<? extends @Nullable Node> children) {
|
public Expr(Span span, List<? extends @Nullable Node> children) {
|
||||||
super(span, children);
|
super(span, children);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class ThisExpr extends Expr {
|
public static final class ThisExpr extends Expr {
|
||||||
public ThisExpr(Span span) {
|
public ThisExpr(Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -42,7 +42,7 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
|
|
||||||
public static final class OuterExpr extends Expr {
|
public static final class OuterExpr extends Expr {
|
||||||
public OuterExpr(Span span) {
|
public OuterExpr(Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -53,7 +53,7 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
|
|
||||||
public static final class ModuleExpr extends Expr {
|
public static final class ModuleExpr extends Expr {
|
||||||
public ModuleExpr(Span span) {
|
public ModuleExpr(Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -64,7 +64,7 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
|
|
||||||
public static final class NullLiteralExpr extends Expr {
|
public static final class NullLiteralExpr extends Expr {
|
||||||
public NullLiteralExpr(Span span) {
|
public NullLiteralExpr(Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -77,7 +77,7 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
private final boolean b;
|
private final boolean b;
|
||||||
|
|
||||||
public BoolLiteralExpr(boolean b, Span span) {
|
public BoolLiteralExpr(boolean b, Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
this.b = b;
|
this.b = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
private final String number;
|
private final String number;
|
||||||
|
|
||||||
public IntLiteralExpr(String number, Span span) {
|
public IntLiteralExpr(String number, Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
this.number = number;
|
this.number = number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
private final String number;
|
private final String number;
|
||||||
|
|
||||||
public FloatLiteralExpr(String number, Span span) {
|
public FloatLiteralExpr(String number, Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
this.number = number;
|
this.number = number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,7 +137,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
|
|
||||||
public final boolean hasInterpolation() {
|
public final boolean hasInterpolation() {
|
||||||
var children = children();
|
var children = children();
|
||||||
assert children != null;
|
|
||||||
return children.size() > 1;
|
return children.size() > 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -160,7 +159,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<StringPart> getParts() {
|
public List<StringPart> getParts() {
|
||||||
assert children != null;
|
|
||||||
return (List<StringPart>) children;
|
return (List<StringPart>) children;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,7 +189,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<StringPart> getParts() {
|
public List<StringPart> getParts() {
|
||||||
assert children != null;
|
|
||||||
return (List<StringPart>) children;
|
return (List<StringPart>) children;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,7 +212,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -233,7 +229,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -254,7 +249,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public StringConstant getImportStr() {
|
public StringConstant getImportStr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (StringConstant) children.get(0);
|
var ret = (StringConstant) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -279,7 +273,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -308,14 +301,12 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Identifier getIdentifier() {
|
public Identifier getIdentifier() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Identifier) children.get(0);
|
var ret = (Identifier) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable ArgumentList getArgumentList() {
|
public @Nullable ArgumentList getArgumentList() {
|
||||||
assert children != null;
|
|
||||||
return (ArgumentList) children.get(1);
|
return (ArgumentList) children.get(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -339,14 +330,12 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Identifier getIdentifier() {
|
public Identifier getIdentifier() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Identifier) children.get(1);
|
var ret = (Identifier) children.get(1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -357,7 +346,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable ArgumentList getArgumentList() {
|
public @Nullable ArgumentList getArgumentList() {
|
||||||
assert children != null;
|
|
||||||
return (ArgumentList) children.get(2);
|
return (ArgumentList) children.get(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -373,14 +361,12 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Identifier getIdentifier() {
|
public Identifier getIdentifier() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Identifier) children.get(0);
|
var ret = (Identifier) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable ArgumentList getArgumentList() {
|
public @Nullable ArgumentList getArgumentList() {
|
||||||
assert children != null;
|
|
||||||
return (ArgumentList) children.get(1);
|
return (ArgumentList) children.get(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -396,7 +382,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getArg() {
|
public Expr getArg() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -414,14 +399,12 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expr getArg() {
|
public Expr getArg() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(1);
|
var ret = (Expr) children.get(1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -439,21 +422,18 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getCond() {
|
public Expr getCond() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expr getThen() {
|
public Expr getThen() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(1);
|
var ret = (Expr) children.get(1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expr getEls() {
|
public Expr getEls() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(2);
|
var ret = (Expr) children.get(2);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -471,21 +451,18 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Parameter getParameter() {
|
public Parameter getParameter() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Parameter) children.get(0);
|
var ret = (Parameter) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expr getBindingExpr() {
|
public Expr getBindingExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(1);
|
var ret = (Expr) children.get(1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(2);
|
var ret = (Expr) children.get(2);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -503,14 +480,12 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ParameterList getParameterList() {
|
public ParameterList getParameterList() {
|
||||||
assert children != null;
|
|
||||||
var ret = (ParameterList) children.get(0);
|
var ret = (ParameterList) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(1);
|
var ret = (Expr) children.get(1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -528,7 +503,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -546,12 +520,10 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable Type getType() {
|
public @Nullable Type getType() {
|
||||||
assert children != null;
|
|
||||||
return (Type) children.get(0);
|
return (Type) children.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ObjectBody getBody() {
|
public ObjectBody getBody() {
|
||||||
assert children != null;
|
|
||||||
var ret = (ObjectBody) children.get(1);
|
var ret = (ObjectBody) children.get(1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -573,14 +545,12 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ObjectBody getBody() {
|
public ObjectBody getBody() {
|
||||||
assert children != null;
|
|
||||||
var ret = (ObjectBody) children.get(1);
|
var ret = (ObjectBody) children.get(1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -598,7 +568,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -616,7 +585,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -634,7 +602,6 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -655,14 +622,12 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getLeft() {
|
public Expr getLeft() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expr getRight() {
|
public Expr getRight() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(1);
|
var ret = (Expr) children.get(1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -709,14 +674,12 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Type getType() {
|
public Type getType() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Type) children.get(1);
|
var ret = (Type) children.get(1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -734,14 +697,12 @@ public abstract sealed class Expr extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Type getType() {
|
public Type getType() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Type) children.get(1);
|
var ret = (Type) children.get(1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ public final class ExtendsOrAmendsClause extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public StringConstant getUrl() {
|
public StringConstant getUrl() {
|
||||||
assert children != null;
|
|
||||||
var ret = (StringConstant) children.get(0);
|
var ret = (StringConstant) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.pkl.parser.syntax;
|
package org.pkl.parser.syntax;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import org.pkl.parser.ParserVisitor;
|
import org.pkl.parser.ParserVisitor;
|
||||||
import org.pkl.parser.Span;
|
import org.pkl.parser.Span;
|
||||||
@@ -23,7 +24,7 @@ public final class Identifier extends AbstractNode {
|
|||||||
private final String value;
|
private final String value;
|
||||||
|
|
||||||
public Identifier(String value, Span span) {
|
public Identifier(String value, Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ public final class ImportClause extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public StringConstant getImportStr() {
|
public StringConstant getImportStr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (StringConstant) children.get(0);
|
var ret = (StringConstant) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -47,7 +46,6 @@ public final class ImportClause extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable Identifier getAlias() {
|
public @Nullable Identifier getAlias() {
|
||||||
assert children != null;
|
|
||||||
return (Identifier) children.get(1);
|
return (Identifier) children.get(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,13 +15,14 @@
|
|||||||
*/
|
*/
|
||||||
package org.pkl.parser.syntax;
|
package org.pkl.parser.syntax;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import org.pkl.parser.ParserVisitor;
|
import org.pkl.parser.ParserVisitor;
|
||||||
import org.pkl.parser.Span;
|
import org.pkl.parser.Span;
|
||||||
|
|
||||||
public final class Keyword extends AbstractNode {
|
public final class Keyword extends AbstractNode {
|
||||||
|
|
||||||
public Keyword(Span span) {
|
public Keyword(Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.pkl.parser.syntax;
|
package org.pkl.parser.syntax;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import org.pkl.parser.ParserVisitor;
|
import org.pkl.parser.ParserVisitor;
|
||||||
import org.pkl.parser.Span;
|
import org.pkl.parser.Span;
|
||||||
@@ -23,7 +24,7 @@ public final class Modifier extends AbstractNode {
|
|||||||
private final ModifierValue value;
|
private final ModifierValue value;
|
||||||
|
|
||||||
public Modifier(ModifierValue value, Span span) {
|
public Modifier(ModifierValue value, Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -32,13 +32,11 @@ public final class Module extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable ModuleDecl getDecl() {
|
public @Nullable ModuleDecl getDecl() {
|
||||||
assert children != null;
|
|
||||||
// children can be empty when there was a parse error
|
// children can be empty when there was a parse error
|
||||||
return children.isEmpty() ? null : (ModuleDecl) children.get(0);
|
return children.isEmpty() ? null : (ModuleDecl) children.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ImportClause> getImports() {
|
public List<ImportClause> getImports() {
|
||||||
assert children != null;
|
|
||||||
if (children.size() < 2) return List.of();
|
if (children.size() < 2) return List.of();
|
||||||
var res = new ArrayList<ImportClause>();
|
var res = new ArrayList<ImportClause>();
|
||||||
for (int i = 1; i < children.size(); i++) {
|
for (int i = 1; i < children.size(); i++) {
|
||||||
@@ -55,7 +53,6 @@ public final class Module extends AbstractNode {
|
|||||||
|
|
||||||
public List<org.pkl.parser.syntax.Class> getClasses() {
|
public List<org.pkl.parser.syntax.Class> getClasses() {
|
||||||
var res = new ArrayList<org.pkl.parser.syntax.Class>();
|
var res = new ArrayList<org.pkl.parser.syntax.Class>();
|
||||||
assert children != null;
|
|
||||||
for (var child : children) {
|
for (var child : children) {
|
||||||
if (child instanceof Class clazz) {
|
if (child instanceof Class clazz) {
|
||||||
res.add(clazz);
|
res.add(clazz);
|
||||||
@@ -66,7 +63,6 @@ public final class Module extends AbstractNode {
|
|||||||
|
|
||||||
public List<TypeAlias> getTypeAliases() {
|
public List<TypeAlias> getTypeAliases() {
|
||||||
var res = new ArrayList<TypeAlias>();
|
var res = new ArrayList<TypeAlias>();
|
||||||
assert children != null;
|
|
||||||
for (var child : children) {
|
for (var child : children) {
|
||||||
if (child instanceof TypeAlias typeAlias) {
|
if (child instanceof TypeAlias typeAlias) {
|
||||||
res.add(typeAlias);
|
res.add(typeAlias);
|
||||||
@@ -77,7 +73,6 @@ public final class Module extends AbstractNode {
|
|||||||
|
|
||||||
public List<ClassProperty> getProperties() {
|
public List<ClassProperty> getProperties() {
|
||||||
var res = new ArrayList<ClassProperty>();
|
var res = new ArrayList<ClassProperty>();
|
||||||
assert children != null;
|
|
||||||
for (var child : children) {
|
for (var child : children) {
|
||||||
if (child instanceof ClassProperty classProperty) {
|
if (child instanceof ClassProperty classProperty) {
|
||||||
res.add(classProperty);
|
res.add(classProperty);
|
||||||
@@ -88,7 +83,6 @@ public final class Module extends AbstractNode {
|
|||||||
|
|
||||||
public List<ClassMethod> getMethods() {
|
public List<ClassMethod> getMethods() {
|
||||||
var res = new ArrayList<ClassMethod>();
|
var res = new ArrayList<ClassMethod>();
|
||||||
assert children != null;
|
|
||||||
for (var child : children) {
|
for (var child : children) {
|
||||||
if (child instanceof ClassMethod classMethod) {
|
if (child instanceof ClassMethod classMethod) {
|
||||||
res.add(classMethod);
|
res.add(classMethod);
|
||||||
|
|||||||
@@ -36,41 +36,34 @@ public final class ModuleDecl extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable DocComment getDocComment() {
|
public @Nullable DocComment getDocComment() {
|
||||||
assert children != null;
|
|
||||||
return (DocComment) children.get(0);
|
return (DocComment) children.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Annotation> getAnnotations() {
|
public List<Annotation> getAnnotations() {
|
||||||
assert children != null;
|
|
||||||
return (List<Annotation>) children.subList(1, modifiersOffset);
|
return (List<Annotation>) children.subList(1, modifiersOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Modifier> getModifiers() {
|
public List<Modifier> getModifiers() {
|
||||||
assert children != null;
|
|
||||||
return (List<Modifier>) children.subList(modifiersOffset, nameOffset);
|
return (List<Modifier>) children.subList(modifiersOffset, nameOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable Keyword getModuleKeyword() {
|
public @Nullable Keyword getModuleKeyword() {
|
||||||
assert children != null;
|
|
||||||
return (Keyword) children.get(nameOffset);
|
return (Keyword) children.get(nameOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable QualifiedIdentifier getName() {
|
public @Nullable QualifiedIdentifier getName() {
|
||||||
assert children != null;
|
|
||||||
return (QualifiedIdentifier) children.get(nameOffset + 1);
|
return (QualifiedIdentifier) children.get(nameOffset + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable ExtendsOrAmendsClause getExtendsOrAmendsDecl() {
|
public @Nullable ExtendsOrAmendsClause getExtendsOrAmendsDecl() {
|
||||||
assert children != null;
|
|
||||||
return (ExtendsOrAmendsClause) children.get(nameOffset + 2);
|
return (ExtendsOrAmendsClause) children.get(nameOffset + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("DuplicatedCode")
|
@SuppressWarnings("DuplicatedCode")
|
||||||
public Span headerSpan() {
|
public Span headerSpan() {
|
||||||
Span start = null;
|
Span start = null;
|
||||||
assert children != null;
|
|
||||||
for (var i = modifiersOffset; i < children.size(); i++) {
|
for (var i = modifiersOffset; i < children.size(); i++) {
|
||||||
var child = children.get(i);
|
var child = children.get(i);
|
||||||
if (child != null) {
|
if (child != null) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -28,7 +28,6 @@ public interface Node {
|
|||||||
|
|
||||||
void setParent(Node parent);
|
void setParent(Node parent);
|
||||||
|
|
||||||
@Nullable
|
|
||||||
List<? extends @Nullable Node> children();
|
List<? extends @Nullable Node> children();
|
||||||
|
|
||||||
<T> T accept(ParserVisitor<? extends T> visitor);
|
<T> T accept(ParserVisitor<? extends T> visitor);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -34,13 +34,11 @@ public final class ObjectBody extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Parameter> getParameters() {
|
public List<Parameter> getParameters() {
|
||||||
assert children != null;
|
|
||||||
return (List<Parameter>) children.subList(0, membersOffset);
|
return (List<Parameter>) children.subList(0, membersOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<ObjectMember> getMembers() {
|
public List<ObjectMember> getMembers() {
|
||||||
assert children != null;
|
|
||||||
return (List<ObjectMember>) children.subList(membersOffset, children.size());
|
return (List<ObjectMember>) children.subList(membersOffset, children.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import org.pkl.parser.util.Nullable;
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public abstract sealed class ObjectMember extends AbstractNode {
|
public abstract sealed class ObjectMember extends AbstractNode {
|
||||||
|
|
||||||
public ObjectMember(Span span, @Nullable List<? extends @Nullable Node> children) {
|
public ObjectMember(Span span, List<? extends @Nullable Node> children) {
|
||||||
super(span, children);
|
super(span, children);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,7 +40,6 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -62,30 +61,25 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Modifier> getModifiers() {
|
public List<Modifier> getModifiers() {
|
||||||
assert children != null;
|
|
||||||
return (List<Modifier>) children.subList(0, identifierOffset);
|
return (List<Modifier>) children.subList(0, identifierOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Identifier getIdentifier() {
|
public Identifier getIdentifier() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Identifier) children.get(identifierOffset);
|
var ret = (Identifier) children.get(identifierOffset);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable TypeAnnotation getTypeAnnotation() {
|
public @Nullable TypeAnnotation getTypeAnnotation() {
|
||||||
assert children != null;
|
|
||||||
return (TypeAnnotation) children.get(identifierOffset + 1);
|
return (TypeAnnotation) children.get(identifierOffset + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable Expr getExpr() {
|
public @Nullable Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
return (Expr) children.get(identifierOffset + 2);
|
return (Expr) children.get(identifierOffset + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<ObjectBody> getBodyList() {
|
public List<ObjectBody> getBodyList() {
|
||||||
assert children != null;
|
|
||||||
return (List<ObjectBody>) children.subList(identifierOffset + 3, children.size());
|
return (List<ObjectBody>) children.subList(identifierOffset + 3, children.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -105,43 +99,36 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Modifier> getModifiers() {
|
public List<Modifier> getModifiers() {
|
||||||
assert children != null;
|
|
||||||
return (List<Modifier>) children.subList(0, identifierOffset);
|
return (List<Modifier>) children.subList(0, identifierOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Keyword getFunctionKeyword() {
|
public Keyword getFunctionKeyword() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Keyword) children.get(identifierOffset);
|
var ret = (Keyword) children.get(identifierOffset);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Identifier getIdentifier() {
|
public Identifier getIdentifier() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Identifier) children.get(identifierOffset + 1);
|
var ret = (Identifier) children.get(identifierOffset + 1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable TypeParameterList getTypeParameterList() {
|
public @Nullable TypeParameterList getTypeParameterList() {
|
||||||
assert children != null;
|
|
||||||
return (TypeParameterList) children.get(identifierOffset + 2);
|
return (TypeParameterList) children.get(identifierOffset + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParameterList getParamList() {
|
public ParameterList getParamList() {
|
||||||
assert children != null;
|
|
||||||
var ret = (ParameterList) children.get(identifierOffset + 3);
|
var ret = (ParameterList) children.get(identifierOffset + 3);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable TypeAnnotation getTypeAnnotation() {
|
public @Nullable TypeAnnotation getTypeAnnotation() {
|
||||||
assert children != null;
|
|
||||||
return (TypeAnnotation) children.get(identifierOffset + 4);
|
return (TypeAnnotation) children.get(identifierOffset + 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(identifierOffset + 5);
|
var ret = (Expr) children.get(identifierOffset + 5);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -150,7 +137,6 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
|||||||
@SuppressWarnings("DuplicatedCode")
|
@SuppressWarnings("DuplicatedCode")
|
||||||
public Span headerSpan() {
|
public Span headerSpan() {
|
||||||
Span start = null;
|
Span start = null;
|
||||||
assert children != null;
|
|
||||||
for (var child : children) {
|
for (var child : children) {
|
||||||
if (child != null) {
|
if (child != null) {
|
||||||
start = child.span();
|
start = child.span();
|
||||||
@@ -182,20 +168,17 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getPred() {
|
public Expr getPred() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable Expr getExpr() {
|
public @Nullable Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
return (Expr) children.get(1);
|
return (Expr) children.get(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<ObjectBody> getBodyList() {
|
public List<ObjectBody> getBodyList() {
|
||||||
assert children != null;
|
|
||||||
return (List<ObjectBody>) children.subList(2, children.size());
|
return (List<ObjectBody>) children.subList(2, children.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -211,20 +194,17 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getKey() {
|
public Expr getKey() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable Expr getValue() {
|
public @Nullable Expr getValue() {
|
||||||
assert children != null;
|
|
||||||
return (Expr) children.get(1);
|
return (Expr) children.get(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<ObjectBody> getBodyList() {
|
public List<ObjectBody> getBodyList() {
|
||||||
assert children != null;
|
|
||||||
return (List<ObjectBody>) children.subList(2, children.size());
|
return (List<ObjectBody>) children.subList(2, children.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -243,7 +223,6 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -299,21 +278,18 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getPredicate() {
|
public Expr getPredicate() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ObjectBody getThenClause() {
|
public ObjectBody getThenClause() {
|
||||||
assert children != null;
|
|
||||||
var ret = (ObjectBody) children.get(1);
|
var ret = (ObjectBody) children.get(1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable ObjectBody getElseClause() {
|
public @Nullable ObjectBody getElseClause() {
|
||||||
assert children != null;
|
|
||||||
return (ObjectBody) children.get(2);
|
return (ObjectBody) children.get(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -330,26 +306,22 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Parameter getP1() {
|
public Parameter getP1() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Parameter) children.get(0);
|
var ret = (Parameter) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable Parameter getP2() {
|
public @Nullable Parameter getP2() {
|
||||||
assert children != null;
|
|
||||||
return (Parameter) children.get(1);
|
return (Parameter) children.get(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(2);
|
var ret = (Expr) children.get(2);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ObjectBody getBody() {
|
public ObjectBody getBody() {
|
||||||
assert children != null;
|
|
||||||
var ret = (ObjectBody) children.get(3);
|
var ret = (ObjectBody) children.get(3);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import org.pkl.parser.util.Nullable;
|
|||||||
|
|
||||||
public abstract sealed class Parameter extends AbstractNode {
|
public abstract sealed class Parameter extends AbstractNode {
|
||||||
|
|
||||||
public Parameter(Span span, @Nullable List<? extends @Nullable Node> children) {
|
public Parameter(Span span, List<? extends @Nullable Node> children) {
|
||||||
super(span, children);
|
super(span, children);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ public abstract sealed class Parameter extends AbstractNode {
|
|||||||
|
|
||||||
public static final class Underscore extends Parameter {
|
public static final class Underscore extends Parameter {
|
||||||
public Underscore(Span span) {
|
public Underscore(Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,14 +45,12 @@ public abstract sealed class Parameter extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Identifier getIdentifier() {
|
public Identifier getIdentifier() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Identifier) children.get(0);
|
var ret = (Identifier) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable TypeAnnotation getTypeAnnotation() {
|
public @Nullable TypeAnnotation getTypeAnnotation() {
|
||||||
assert children != null;
|
|
||||||
return (TypeAnnotation) children.get(1);
|
return (TypeAnnotation) children.get(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ public final class ParameterList extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Parameter> getParameters() {
|
public List<Parameter> getParameters() {
|
||||||
assert children != null;
|
|
||||||
return (List<Parameter>) children;
|
return (List<Parameter>) children;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -32,7 +32,6 @@ public final class QualifiedIdentifier extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Identifier> getIdentifiers() {
|
public List<Identifier> getIdentifiers() {
|
||||||
assert children != null;
|
|
||||||
return (List<Identifier>) children;
|
return (List<Identifier>) children;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ public final class ReplInput extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Node> getNodes() {
|
public List<Node> getNodes() {
|
||||||
assert children != null;
|
|
||||||
return (List<Node>) children;
|
return (List<Node>) children;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.pkl.parser.syntax;
|
package org.pkl.parser.syntax;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import org.pkl.parser.ParserVisitor;
|
import org.pkl.parser.ParserVisitor;
|
||||||
import org.pkl.parser.Span;
|
import org.pkl.parser.Span;
|
||||||
@@ -24,7 +25,7 @@ public final class StringConstant extends AbstractNode {
|
|||||||
private final String string;
|
private final String string;
|
||||||
|
|
||||||
public StringConstant(String string, Span span) {
|
public StringConstant(String string, Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
this.string = string;
|
this.string = string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import org.pkl.parser.util.Nullable;
|
|||||||
|
|
||||||
public abstract sealed class StringPart extends AbstractNode {
|
public abstract sealed class StringPart extends AbstractNode {
|
||||||
|
|
||||||
public StringPart(Span span, @Nullable List<? extends @Nullable Node> children) {
|
public StringPart(Span span, List<? extends @Nullable Node> children) {
|
||||||
super(span, children);
|
super(span, children);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ public abstract sealed class StringPart extends AbstractNode {
|
|||||||
private final String string;
|
private final String string;
|
||||||
|
|
||||||
public StringChars(String string, Span span) {
|
public StringChars(String string, Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
this.string = string;
|
this.string = string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +77,6 @@ public abstract sealed class StringPart extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Expr getExpr() {
|
public Expr getExpr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Expr) children.get(0);
|
var ret = (Expr) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -24,13 +24,13 @@ import org.pkl.parser.util.Nullable;
|
|||||||
|
|
||||||
public abstract sealed class Type extends AbstractNode {
|
public abstract sealed class Type extends AbstractNode {
|
||||||
|
|
||||||
public Type(Span span, @Nullable List<? extends @Nullable Node> children) {
|
public Type(Span span, List<? extends @Nullable Node> children) {
|
||||||
super(span, children);
|
super(span, children);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class UnknownType extends Type {
|
public static final class UnknownType extends Type {
|
||||||
public UnknownType(Span span) {
|
public UnknownType(Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -41,7 +41,7 @@ public abstract sealed class Type extends AbstractNode {
|
|||||||
|
|
||||||
public static final class NothingType extends Type {
|
public static final class NothingType extends Type {
|
||||||
public NothingType(Span span) {
|
public NothingType(Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -52,7 +52,7 @@ public abstract sealed class Type extends AbstractNode {
|
|||||||
|
|
||||||
public static final class ModuleType extends Type {
|
public static final class ModuleType extends Type {
|
||||||
public ModuleType(Span span) {
|
public ModuleType(Span span) {
|
||||||
super(span, null);
|
super(span, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -72,7 +72,6 @@ public abstract sealed class Type extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public StringConstant getStr() {
|
public StringConstant getStr() {
|
||||||
assert children != null;
|
|
||||||
var ret = (StringConstant) children.get(0);
|
var ret = (StringConstant) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -90,14 +89,12 @@ public abstract sealed class Type extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public QualifiedIdentifier getName() {
|
public QualifiedIdentifier getName() {
|
||||||
assert children != null;
|
|
||||||
var ret = (QualifiedIdentifier) children.get(0);
|
var ret = (QualifiedIdentifier) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable TypeArgumentList getArgs() {
|
public @Nullable TypeArgumentList getArgs() {
|
||||||
assert children != null;
|
|
||||||
return (TypeArgumentList) children.get(1);
|
return (TypeArgumentList) children.get(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,7 +110,6 @@ public abstract sealed class Type extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Type getType() {
|
public Type getType() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Type) children.get(0);
|
var ret = (Type) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -131,7 +127,6 @@ public abstract sealed class Type extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Type getType() {
|
public Type getType() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Type) children.get(0);
|
var ret = (Type) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -149,7 +144,6 @@ public abstract sealed class Type extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Type getType() {
|
public Type getType() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Type) children.get(0);
|
var ret = (Type) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -157,7 +151,6 @@ public abstract sealed class Type extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Expr> getExprs() {
|
public List<Expr> getExprs() {
|
||||||
assert children != null;
|
|
||||||
return (List<Expr>) children.subList(1, children.size());
|
return (List<Expr>) children.subList(1, children.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -177,7 +170,6 @@ public abstract sealed class Type extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Type> getTypes() {
|
public List<Type> getTypes() {
|
||||||
assert children != null;
|
|
||||||
return (List<Type>) children;
|
return (List<Type>) children;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,12 +223,10 @@ public abstract sealed class Type extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Type> getArgs() {
|
public List<Type> getArgs() {
|
||||||
assert children != null;
|
|
||||||
return (List<Type>) children.subList(0, children.size() - 1);
|
return (List<Type>) children.subList(0, children.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Type getRet() {
|
public Type getRet() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Type) children.get(children.size() - 1);
|
var ret = (Type) children.get(children.size() - 1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -37,43 +37,36 @@ public final class TypeAlias extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable DocComment getDocComment() {
|
public @Nullable DocComment getDocComment() {
|
||||||
assert children != null;
|
|
||||||
return (DocComment) children.get(0);
|
return (DocComment) children.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Annotation> getAnnotations() {
|
public List<Annotation> getAnnotations() {
|
||||||
assert children != null;
|
|
||||||
return (List<Annotation>) children.subList(1, modifiersOffset);
|
return (List<Annotation>) children.subList(1, modifiersOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Modifier> getModifiers() {
|
public List<Modifier> getModifiers() {
|
||||||
assert children != null;
|
|
||||||
return (List<Modifier>) children.subList(modifiersOffset, nameOffset);
|
return (List<Modifier>) children.subList(modifiersOffset, nameOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Keyword getTypealiasKeyword() {
|
public Keyword getTypealiasKeyword() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Keyword) children.get(nameOffset);
|
var ret = (Keyword) children.get(nameOffset);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Identifier getName() {
|
public Identifier getName() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Identifier) children.get(nameOffset + 1);
|
var ret = (Identifier) children.get(nameOffset + 1);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable TypeParameterList getTypeParameterList() {
|
public @Nullable TypeParameterList getTypeParameterList() {
|
||||||
assert children != null;
|
|
||||||
return (TypeParameterList) children.get(nameOffset + 2);
|
return (TypeParameterList) children.get(nameOffset + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Type getType() {
|
public Type getType() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Type) children.get(nameOffset + 3);
|
var ret = (Type) children.get(nameOffset + 3);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -82,7 +75,6 @@ public final class TypeAlias extends AbstractNode {
|
|||||||
@SuppressWarnings("DuplicatedCode")
|
@SuppressWarnings("DuplicatedCode")
|
||||||
public Span getHeaderSpan() {
|
public Span getHeaderSpan() {
|
||||||
Span start = null;
|
Span start = null;
|
||||||
assert children != null;
|
|
||||||
for (var i = modifiersOffset; i < children.size(); i++) {
|
for (var i = modifiersOffset; i < children.size(); i++) {
|
||||||
var child = children.get(i);
|
var child = children.get(i);
|
||||||
if (child != null) {
|
if (child != null) {
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ public final class TypeAnnotation extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Type getType() {
|
public Type getType() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Type) children.get(0);
|
var ret = (Type) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ public final class TypeArgumentList extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<Type> getTypes() {
|
public List<Type> getTypes() {
|
||||||
assert children != null;
|
|
||||||
return (List<Type>) children;
|
return (List<Type>) children;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ public final class TypeParameter extends AbstractNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Identifier getIdentifier() {
|
public Identifier getIdentifier() {
|
||||||
assert children != null;
|
|
||||||
var ret = (Identifier) children.get(0);
|
var ret = (Identifier) children.get(0);
|
||||||
assert ret != null;
|
assert ret != null;
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ public final class TypeParameterList extends AbstractNode {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<TypeParameter> getParameters() {
|
public List<TypeParameter> getParameters() {
|
||||||
assert children != null;
|
|
||||||
return (List<TypeParameter>) children;
|
return (List<TypeParameter>) children;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user