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