mirror of
https://github.com/apple/pkl.git
synced 2026-05-28 01:29:15 +02:00
pkl-parser: Migrate nullness to JSpecify (#1515)
This commit is contained in:
@@ -18,12 +18,12 @@ package org.pkl.parser;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.syntax.Operator;
|
||||
import org.pkl.parser.syntax.generic.FullSpan;
|
||||
import org.pkl.parser.syntax.generic.Node;
|
||||
import org.pkl.parser.syntax.generic.NodeType;
|
||||
import org.pkl.parser.util.ErrorMessages;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
class GenericParserImpl {
|
||||
@@ -1125,6 +1125,8 @@ class GenericParserImpl {
|
||||
|
||||
if (lookahead() != Token.UNION) {
|
||||
if (hasDefault) {
|
||||
//noinspection ConstantValue (NullAway needs this assertion, IntelliJ doesn't)
|
||||
assert start != null;
|
||||
throw parserError(ErrorMessages.create("notAUnion"), start.endWith(first.span));
|
||||
}
|
||||
return first;
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
*/
|
||||
package org.pkl.parser;
|
||||
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.syntax.Module;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class ParserError extends RuntimeException {
|
||||
private final Span span;
|
||||
|
||||
@@ -20,6 +20,7 @@ import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.syntax.Annotation;
|
||||
import org.pkl.parser.syntax.ArgumentList;
|
||||
import org.pkl.parser.syntax.Class;
|
||||
@@ -85,7 +86,6 @@ import org.pkl.parser.syntax.TypeArgumentList;
|
||||
import org.pkl.parser.syntax.TypeParameter;
|
||||
import org.pkl.parser.syntax.TypeParameterList;
|
||||
import org.pkl.parser.util.ErrorMessages;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
final class ParserImpl {
|
||||
@@ -94,7 +94,7 @@ final class ParserImpl {
|
||||
private Token lookahead;
|
||||
private Span spanLookahead;
|
||||
private boolean backtracking = false;
|
||||
private FullToken prev;
|
||||
private FullToken prev = new FullToken(Token.SOF, new Span(0, 0), 0);
|
||||
private FullToken _lookahead;
|
||||
private boolean precededBySemicolon = false;
|
||||
|
||||
@@ -113,7 +113,7 @@ final class ParserImpl {
|
||||
var start = spanLookahead;
|
||||
Span end = null;
|
||||
ModuleDecl moduleDecl;
|
||||
var nodes = new ArrayList<Node>();
|
||||
var nodes = new ArrayList<@Nullable Node>();
|
||||
try {
|
||||
var header = parseMemberHeader();
|
||||
|
||||
@@ -157,7 +157,7 @@ final class ParserImpl {
|
||||
}
|
||||
|
||||
ReplInput parseReplInput() {
|
||||
var nodes = new ArrayList<Node>();
|
||||
var nodes = new ArrayList<@Nullable Node>();
|
||||
while (lookahead != Token.EOF) {
|
||||
var header = parseMemberHeader();
|
||||
switch (lookahead) {
|
||||
@@ -193,7 +193,11 @@ final class ParserImpl {
|
||||
if (nodes.isEmpty()) {
|
||||
span = new Span(0, 0);
|
||||
} else {
|
||||
span = nodes.get(0).span().endWith(nodes.get(nodes.size() - 1).span());
|
||||
var first = nodes.get(0);
|
||||
var last = nodes.get(nodes.size() - 1);
|
||||
assert first != null;
|
||||
assert last != null;
|
||||
span = first.span().endWith(last.span());
|
||||
}
|
||||
return new ReplInput(nodes, span);
|
||||
}
|
||||
@@ -220,7 +224,7 @@ final class ParserImpl {
|
||||
end = extendsOrAmendsDecl.span();
|
||||
}
|
||||
if (moduleName != null || extendsOrAmendsDecl != null) {
|
||||
var children = new ArrayList<Node>();
|
||||
var children = new ArrayList<@Nullable Node>();
|
||||
children.add(header.docComment);
|
||||
children.addAll(header.annotations);
|
||||
var modifiersOffset = children.size();
|
||||
@@ -229,6 +233,10 @@ final class ParserImpl {
|
||||
children.add(moduleKeyword);
|
||||
children.add(moduleName);
|
||||
children.add(extendsOrAmendsDecl);
|
||||
//noinspection ConstantValue (NullAway needs this assertion, IntelliJ doesn't)
|
||||
assert start != null;
|
||||
//noinspection ConstantValue
|
||||
assert end != null;
|
||||
return new ModuleDecl(children, modifiersOffset, nameOffset, start.endWith(end));
|
||||
}
|
||||
return null;
|
||||
@@ -315,7 +323,7 @@ final class ParserImpl {
|
||||
return new DocComment(spans);
|
||||
}
|
||||
|
||||
private Span parseModuleMember(MemberHeader header, List<Node> nodes) {
|
||||
private Span parseModuleMember(MemberHeader header, List<@Nullable Node> nodes) {
|
||||
switch (lookahead) {
|
||||
case IDENTIFIER -> {
|
||||
var node = parseClassProperty(header);
|
||||
@@ -361,7 +369,8 @@ final class ParserImpl {
|
||||
}
|
||||
expect(Token.ASSIGN, "unexpectedToken", "=");
|
||||
var type = parseType();
|
||||
var children = new ArrayList<Node>(header.annotations.size() + header.modifiers.size() + 5);
|
||||
var children =
|
||||
new ArrayList<@Nullable Node>(header.annotations.size() + header.modifiers.size() + 5);
|
||||
children.add(header.docComment);
|
||||
children.addAll(header.annotations);
|
||||
var modifiersOffset = header.annotations.size() + 1;
|
||||
@@ -377,7 +386,7 @@ final class ParserImpl {
|
||||
private Class parseClass(MemberHeader header) {
|
||||
var classKeyword = next();
|
||||
var startSpan = header.span(classKeyword.span);
|
||||
var children = new ArrayList<Node>();
|
||||
var children = new ArrayList<@Nullable Node>();
|
||||
children.add(header.docComment);
|
||||
children.addAll(header.annotations);
|
||||
var modifiersOffset = header.annotations.size() + 1;
|
||||
@@ -433,7 +442,7 @@ final class ParserImpl {
|
||||
private ClassProperty parseClassProperty(MemberHeader header) {
|
||||
var name = parseIdentifier();
|
||||
var start = header.span(name.span());
|
||||
var children = new ArrayList<Node>();
|
||||
var children = new ArrayList<@Nullable Node>();
|
||||
children.add(header.docComment);
|
||||
children.addAll(header.annotations);
|
||||
var modifiersOffset = header.annotations.size() + 1;
|
||||
@@ -481,7 +490,7 @@ final class ParserImpl {
|
||||
var func = expect(Token.FUNCTION, "unexpectedToken", "function").span;
|
||||
var start = header.span(func);
|
||||
var headerSpanStart = header.modifierSpan(func);
|
||||
var children = new ArrayList<Node>();
|
||||
var children = new ArrayList<@Nullable Node>();
|
||||
children.add(header.docComment);
|
||||
children.addAll(header.annotations);
|
||||
var modifiersOffset = header.annotations.size() + 1;
|
||||
@@ -522,7 +531,7 @@ final class ParserImpl {
|
||||
|
||||
private ObjectBody parseObjectBody() {
|
||||
var start = expect(Token.LBRACE, "unexpectedToken", "{").span;
|
||||
List<Node> nodes = new ArrayList<>();
|
||||
var nodes = new ArrayList<Node>();
|
||||
var membersOffset = -1;
|
||||
if (lookahead == Token.RBRACE) {
|
||||
return new ObjectBody(List.of(), 0, start.endWith(next().span));
|
||||
@@ -656,7 +665,7 @@ final class ParserImpl {
|
||||
if (typeAnnotation != null || lookahead == Token.ASSIGN) {
|
||||
expect(Token.ASSIGN, "unexpectedToken", "=");
|
||||
var expr = parseExpr("}");
|
||||
var nodes = new ArrayList<Node>(allModifiers.size() + 4);
|
||||
var nodes = new ArrayList<@Nullable Node>(allModifiers.size() + 4);
|
||||
nodes.addAll(allModifiers);
|
||||
nodes.add(identifier);
|
||||
nodes.add(typeAnnotation);
|
||||
@@ -666,7 +675,7 @@ final class ParserImpl {
|
||||
}
|
||||
var bodies = parseBodyList();
|
||||
var end = bodies.get(bodies.size() - 1).span();
|
||||
var nodes = new ArrayList<Node>(allModifiers.size() + 4);
|
||||
var nodes = new ArrayList<@Nullable Node>(allModifiers.size() + 4);
|
||||
nodes.addAll(allModifiers);
|
||||
nodes.add(identifier);
|
||||
nodes.add(null);
|
||||
@@ -693,7 +702,7 @@ final class ParserImpl {
|
||||
}
|
||||
expect(Token.ASSIGN, "unexpectedToken", "=");
|
||||
var expr = parseExpr("}");
|
||||
var nodes = new ArrayList<Node>(modifiers.size() + 6);
|
||||
var nodes = new ArrayList<@Nullable Node>(modifiers.size() + 6);
|
||||
nodes.addAll(modifiers);
|
||||
nodes.add(new Keyword(function));
|
||||
nodes.add(identifier);
|
||||
@@ -728,7 +737,7 @@ final class ParserImpl {
|
||||
}
|
||||
var bodies = parseBodyList();
|
||||
var end = bodies.get(bodies.size() - 1).span();
|
||||
var nodes = new ArrayList<Node>(bodies.size() + 2);
|
||||
var nodes = new ArrayList<@Nullable Node>(bodies.size() + 2);
|
||||
nodes.add(pred);
|
||||
nodes.add(null);
|
||||
nodes.addAll(bodies);
|
||||
@@ -746,7 +755,7 @@ final class ParserImpl {
|
||||
}
|
||||
var bodies = parseBodyList();
|
||||
var end = bodies.get(bodies.size() - 1).span();
|
||||
var nodes = new ArrayList<Node>(bodies.size() + 2);
|
||||
var nodes = new ArrayList<@Nullable Node>(bodies.size() + 2);
|
||||
nodes.add(key);
|
||||
nodes.add(null);
|
||||
nodes.addAll(bodies);
|
||||
@@ -1043,7 +1052,7 @@ final class ParserImpl {
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
private Expr parseExprRest(Expr expr) {
|
||||
// non null
|
||||
// non-null
|
||||
if (lookahead == Token.NON_NULL) {
|
||||
var end = next().span;
|
||||
var res = new NonNullExpr(expr, expr.span().endWith(end));
|
||||
@@ -1125,7 +1134,6 @@ final class ParserImpl {
|
||||
case INTERPOLATION_START -> {
|
||||
var istart = next().span;
|
||||
if (!builder.isEmpty()) {
|
||||
assert startSpan != null;
|
||||
parts.add(new StringChars(builder.toString(), startSpan.endWith(end)));
|
||||
builder = new StringBuilder();
|
||||
}
|
||||
@@ -1196,11 +1204,12 @@ final class ParserImpl {
|
||||
return renderString(nodes, indent);
|
||||
}
|
||||
|
||||
@SuppressWarnings("DataFlowIssue")
|
||||
private List<StringPart> renderString(List<TempNode> nodes, String commonIndent) {
|
||||
var parts = new ArrayList<StringPart>();
|
||||
var builder = new StringBuilder();
|
||||
var endOffset = nodes.get(nodes.size() - 1).token.token == Token.STRING_NEWLINE ? 1 : 2;
|
||||
var lastToken = nodes.get(nodes.size() - 1).token;
|
||||
assert lastToken != null;
|
||||
var endOffset = lastToken.token == Token.STRING_NEWLINE ? 1 : 2;
|
||||
var isNewLine = true;
|
||||
Span start = null;
|
||||
Span end = null;
|
||||
@@ -1208,6 +1217,8 @@ final class ParserImpl {
|
||||
var node = nodes.get(i);
|
||||
if (node.node != null) {
|
||||
if (!builder.isEmpty()) {
|
||||
assert start != null;
|
||||
assert end != null;
|
||||
parts.add(new StringChars(builder.toString(), start.endWith(end)));
|
||||
builder = new StringBuilder();
|
||||
start = null;
|
||||
@@ -1253,6 +1264,8 @@ final class ParserImpl {
|
||||
}
|
||||
}
|
||||
if (!builder.isEmpty()) {
|
||||
assert start != null;
|
||||
assert end != null;
|
||||
parts.add(new StringChars(builder.toString(), start.endWith(end)));
|
||||
}
|
||||
return parts;
|
||||
@@ -1448,7 +1461,7 @@ final class ParserImpl {
|
||||
|
||||
private Annotation parseAnnotation() {
|
||||
var start = next().span;
|
||||
var children = new ArrayList<Node>(2);
|
||||
var children = new ArrayList<@Nullable Node>(2);
|
||||
var type = parseType();
|
||||
children.add(type);
|
||||
ObjectBody body = null;
|
||||
@@ -1688,7 +1701,7 @@ final class ParserImpl {
|
||||
}
|
||||
|
||||
private record TempNode(
|
||||
@Nullable FullToken token, @Nullable StringPart.StringInterpolation node) {
|
||||
@Nullable FullToken token, StringPart.@Nullable StringInterpolation node) {
|
||||
Span span() {
|
||||
if (token != null) return token.span;
|
||||
assert node != null;
|
||||
@@ -1764,13 +1777,7 @@ final class ParserImpl {
|
||||
return !(docComment == null && annotations.isEmpty() && modifiers.isEmpty());
|
||||
}
|
||||
|
||||
@SuppressWarnings("DataFlowIssue")
|
||||
@Nullable
|
||||
Span span() {
|
||||
return span(null);
|
||||
}
|
||||
|
||||
Span span(Span or) {
|
||||
@Nullable Span span() {
|
||||
if (docComment != null) {
|
||||
return docComment.span();
|
||||
}
|
||||
@@ -1780,7 +1787,12 @@ final class ParserImpl {
|
||||
if (!modifiers().isEmpty()) {
|
||||
return modifiers.get(0).span();
|
||||
}
|
||||
return or;
|
||||
return null;
|
||||
}
|
||||
|
||||
Span span(Span or) {
|
||||
var span = span();
|
||||
return span != null ? span : or;
|
||||
}
|
||||
|
||||
Span modifierSpan(Span or) {
|
||||
|
||||
@@ -106,6 +106,7 @@ public enum Token {
|
||||
QSPREAD,
|
||||
UNDERSCORE,
|
||||
EOF,
|
||||
SOF, // start-of-file sentinel
|
||||
SEMICOLON,
|
||||
|
||||
INT,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@NonnullByDefault
|
||||
@NullMarked
|
||||
package org.pkl.parser;
|
||||
|
||||
import org.pkl.parser.util.NonnullByDefault;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
||||
@@ -18,8 +18,8 @@ package org.pkl.parser.syntax;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public abstract class AbstractNode implements Node {
|
||||
protected final Span span;
|
||||
@@ -62,7 +62,7 @@ public abstract class AbstractNode implements Node {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -16,17 +16,17 @@
|
||||
package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class Annotation extends AbstractNode {
|
||||
public Annotation(List<Node> nodes, Span span) {
|
||||
public Annotation(List<@Nullable Node> nodes, Span span) {
|
||||
super(span, nodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitAnnotation(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ package org.pkl.parser.syntax;
|
||||
import java.util.List;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class ArgumentList extends AbstractNode {
|
||||
|
||||
@@ -27,7 +26,7 @@ public final class ArgumentList extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitArgumentList(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,22 +16,22 @@
|
||||
package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class Class extends AbstractNode {
|
||||
private final int modifiersOffset;
|
||||
private final int keywordOffset;
|
||||
|
||||
public Class(List<Node> nodes, int modifiersOffset, int keywordOffset, Span span) {
|
||||
public Class(List<@Nullable Node> nodes, int modifiersOffset, int keywordOffset, Span span) {
|
||||
super(span, nodes);
|
||||
this.modifiersOffset = modifiersOffset;
|
||||
this.keywordOffset = keywordOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitClass(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class ClassBody extends AbstractNode {
|
||||
|
||||
@@ -28,7 +27,7 @@ public final class ClassBody extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitClassBody(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class ClassMethod extends AbstractNode {
|
||||
private final int modifiersOffset;
|
||||
@@ -26,7 +26,7 @@ public final class ClassMethod extends AbstractNode {
|
||||
private final Span headerSpan;
|
||||
|
||||
public ClassMethod(
|
||||
List<Node> nodes, int modifiersOffset, int nameOffset, Span headerSpan, Span span) {
|
||||
List<@Nullable Node> nodes, int modifiersOffset, int nameOffset, Span headerSpan, Span span) {
|
||||
super(span, nodes);
|
||||
this.headerSpan = headerSpan;
|
||||
this.modifiersOffset = modifiersOffset;
|
||||
@@ -34,7 +34,7 @@ public final class ClassMethod extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitClassMethod(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,22 +16,22 @@
|
||||
package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class ClassProperty extends AbstractNode {
|
||||
private final int modifiersOffset;
|
||||
private final int nameOffset;
|
||||
|
||||
public ClassProperty(List<Node> nodes, int modifiersOffset, int nameOffset, Span span) {
|
||||
public ClassProperty(List<@Nullable Node> nodes, int modifiersOffset, int nameOffset, Span span) {
|
||||
super(span, nodes);
|
||||
this.modifiersOffset = modifiersOffset;
|
||||
this.nameOffset = nameOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitClassProperty(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ public final class DocComment extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitDocComment(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@ package org.pkl.parser.syntax;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public abstract sealed class Expr extends AbstractNode {
|
||||
@@ -35,7 +35,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitThisExpr(this);
|
||||
}
|
||||
}
|
||||
@@ -46,7 +46,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitOuterExpr(this);
|
||||
}
|
||||
}
|
||||
@@ -57,7 +57,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitModuleExpr(this);
|
||||
}
|
||||
}
|
||||
@@ -68,7 +68,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitNullLiteralExpr(this);
|
||||
}
|
||||
}
|
||||
@@ -82,7 +82,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitBoolLiteralExpr(this);
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitIntLiteralExpr(this);
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitFloatLiteralExpr(this);
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitSingleLineStringLiteralExpr(this);
|
||||
}
|
||||
|
||||
@@ -183,7 +183,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitMultiLineStringLiteralExpr(this);
|
||||
}
|
||||
|
||||
@@ -207,7 +207,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitThrowExpr(this);
|
||||
}
|
||||
|
||||
@@ -224,7 +224,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitTraceExpr(this);
|
||||
}
|
||||
|
||||
@@ -244,7 +244,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitImportExpr(this);
|
||||
}
|
||||
|
||||
@@ -268,7 +268,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitReadExpr(this);
|
||||
}
|
||||
|
||||
@@ -296,7 +296,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitUnqualifiedAccessExpr(this);
|
||||
}
|
||||
|
||||
@@ -325,7 +325,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitQualifiedAccessExpr(this);
|
||||
}
|
||||
|
||||
@@ -356,7 +356,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitSuperAccessExpr(this);
|
||||
}
|
||||
|
||||
@@ -377,7 +377,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitSuperSubscriptExpr(this);
|
||||
}
|
||||
|
||||
@@ -394,7 +394,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitSubscriptExpr(this);
|
||||
}
|
||||
|
||||
@@ -417,7 +417,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitIfExpr(this);
|
||||
}
|
||||
|
||||
@@ -446,7 +446,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitLetExpr(this);
|
||||
}
|
||||
|
||||
@@ -475,7 +475,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitFunctionLiteralExpr(this);
|
||||
}
|
||||
|
||||
@@ -498,7 +498,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitParenthesizedExpr(this);
|
||||
}
|
||||
|
||||
@@ -515,7 +515,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitNewExpr(this);
|
||||
}
|
||||
|
||||
@@ -540,7 +540,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitAmendsExpr(this);
|
||||
}
|
||||
|
||||
@@ -563,7 +563,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitNonNullExpr(this);
|
||||
}
|
||||
|
||||
@@ -580,7 +580,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitUnaryMinusExpr(this);
|
||||
}
|
||||
|
||||
@@ -597,7 +597,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitLogicalNotExpr(this);
|
||||
}
|
||||
|
||||
@@ -617,7 +617,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitBinaryOperatorExpr(this);
|
||||
}
|
||||
|
||||
@@ -642,9 +642,8 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
return "BinaryOp{children=" + children + ", op=" + op + ", span=" + span + '}';
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantValue")
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
@@ -669,7 +668,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitTypeCheckExpr(this);
|
||||
}
|
||||
|
||||
@@ -692,7 +691,7 @@ public abstract sealed class Expr extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitTypeCastExpr(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@ package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class ExtendsOrAmendsClause extends AbstractNode {
|
||||
private final Type type;
|
||||
@@ -30,7 +30,7 @@ public final class ExtendsOrAmendsClause extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitExtendsOrAmendsClause(this);
|
||||
}
|
||||
|
||||
@@ -56,9 +56,8 @@ public final class ExtendsOrAmendsClause extends AbstractNode {
|
||||
+ '}';
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantValue")
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
|
||||
@@ -29,7 +30,7 @@ public final class Identifier extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitIdentifier(this);
|
||||
}
|
||||
|
||||
@@ -54,9 +55,8 @@ public final class Identifier extends AbstractNode {
|
||||
return "Identifier{value='" + value + '\'' + ", span=" + span + '}';
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantValue")
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -17,9 +17,9 @@ package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class ImportClause extends AbstractNode {
|
||||
private final boolean isGlob;
|
||||
@@ -31,7 +31,7 @@ public final class ImportClause extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitImportClause(this);
|
||||
}
|
||||
|
||||
@@ -54,9 +54,8 @@ public final class ImportClause extends AbstractNode {
|
||||
return "Import{isGlob=" + isGlob + ", span=" + span + ", children=" + children + '}';
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantValue")
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ public final class Keyword extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitKeyword(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
|
||||
@@ -29,7 +30,7 @@ public final class Modifier extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitModifier(this);
|
||||
}
|
||||
|
||||
@@ -42,9 +43,8 @@ public final class Modifier extends AbstractNode {
|
||||
return "Modifier{value=" + value + ", span=" + span + '}';
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantValue")
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -17,17 +17,17 @@ package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class Module extends AbstractNode {
|
||||
public Module(List<Node> nodes, Span span) {
|
||||
public Module(List<@Nullable Node> nodes, Span span) {
|
||||
super(span, nodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitModule(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,22 +16,22 @@
|
||||
package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class ModuleDecl extends AbstractNode {
|
||||
private final int modifiersOffset;
|
||||
private final int nameOffset;
|
||||
|
||||
public ModuleDecl(List<Node> nodes, int modifiersOffset, int nameOffset, Span span) {
|
||||
public ModuleDecl(List<@Nullable Node> nodes, int modifiersOffset, int nameOffset, Span span) {
|
||||
super(span, nodes);
|
||||
this.modifiersOffset = modifiersOffset;
|
||||
this.nameOffset = nameOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitModuleDecl(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,21 +16,20 @@
|
||||
package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public interface Node {
|
||||
Span span();
|
||||
|
||||
@Nullable
|
||||
Node parent();
|
||||
@Nullable Node parent();
|
||||
|
||||
void setParent(Node parent);
|
||||
|
||||
List<? extends @Nullable Node> children();
|
||||
|
||||
<T> T accept(ParserVisitor<? extends T> visitor);
|
||||
<T> T accept(ParserVisitor<T> visitor);
|
||||
|
||||
default String text(char[] source) {
|
||||
return new String(source, span().charIndex(), span().length());
|
||||
|
||||
@@ -28,7 +28,7 @@ public final class ObjectBody extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitObjectBody(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@ package org.pkl.parser.syntax;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public abstract sealed class ObjectMember extends AbstractNode {
|
||||
@@ -35,7 +35,7 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitObjectElement(this);
|
||||
}
|
||||
|
||||
@@ -49,13 +49,13 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
||||
public static final class ObjectProperty extends ObjectMember {
|
||||
private final int identifierOffset;
|
||||
|
||||
public ObjectProperty(List<Node> nodes, int identifierOffset, Span span) {
|
||||
public ObjectProperty(List<@Nullable Node> nodes, int identifierOffset, Span span) {
|
||||
super(span, nodes);
|
||||
this.identifierOffset = identifierOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitObjectProperty(this);
|
||||
}
|
||||
|
||||
@@ -87,13 +87,13 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
||||
public static final class ObjectMethod extends ObjectMember {
|
||||
private final int identifierOffset;
|
||||
|
||||
public ObjectMethod(List<Node> nodes, int identifierOffset, Span span) {
|
||||
public ObjectMethod(List<@Nullable Node> nodes, int identifierOffset, Span span) {
|
||||
super(span, nodes);
|
||||
this.identifierOffset = identifierOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitObjectMethod(this);
|
||||
}
|
||||
|
||||
@@ -158,12 +158,12 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
||||
}
|
||||
|
||||
public static final class MemberPredicate extends ObjectMember {
|
||||
public MemberPredicate(List<Node> nodes, Span span) {
|
||||
public MemberPredicate(List<@Nullable Node> nodes, Span span) {
|
||||
super(span, nodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitMemberPredicate(this);
|
||||
}
|
||||
|
||||
@@ -184,12 +184,12 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
||||
}
|
||||
|
||||
public static final class ObjectEntry extends ObjectMember {
|
||||
public ObjectEntry(List<Node> nodes, Span span) {
|
||||
public ObjectEntry(List<@Nullable Node> nodes, Span span) {
|
||||
super(span, nodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitObjectEntry(this);
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitObjectSpread(this);
|
||||
}
|
||||
|
||||
@@ -244,9 +244,8 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
||||
+ '}';
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantValue")
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
@@ -273,7 +272,7 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitWhenGenerator(this);
|
||||
}
|
||||
|
||||
@@ -301,7 +300,7 @@ public abstract sealed class ObjectMember extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitForGenerator(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@ package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public abstract sealed class Parameter extends AbstractNode {
|
||||
|
||||
@@ -28,7 +28,7 @@ public abstract sealed class Parameter extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitParameter(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ package org.pkl.parser.syntax;
|
||||
import java.util.List;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class ParameterList extends AbstractNode {
|
||||
public ParameterList(List<Parameter> parameters, Span span) {
|
||||
@@ -26,7 +25,7 @@ public final class ParameterList extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitParameterList(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ public final class QualifiedIdentifier extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitQualifiedIdentifier(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,17 +16,17 @@
|
||||
package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class ReplInput extends AbstractNode {
|
||||
public ReplInput(List<Node> nodes, Span span) {
|
||||
public ReplInput(List<@Nullable Node> nodes, Span span) {
|
||||
super(span, nodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitReplInput(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@ package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class StringConstant extends AbstractNode {
|
||||
private final String string;
|
||||
@@ -30,7 +30,7 @@ public final class StringConstant extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitStringConstant(this);
|
||||
}
|
||||
|
||||
@@ -43,9 +43,8 @@ public final class StringConstant extends AbstractNode {
|
||||
return "StringConstant{string='" + string + '\'' + ", span=" + span + '}';
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantValue")
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -17,9 +17,9 @@ package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public abstract sealed class StringPart extends AbstractNode {
|
||||
|
||||
@@ -28,7 +28,7 @@ public abstract sealed class StringPart extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitStringPart(this);
|
||||
}
|
||||
|
||||
@@ -49,9 +49,8 @@ public abstract sealed class StringPart extends AbstractNode {
|
||||
return "StringChars{string='" + string + '\'' + ", span=" + span + '}';
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantValue")
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -18,9 +18,9 @@ package org.pkl.parser.syntax;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public abstract sealed class Type extends AbstractNode {
|
||||
|
||||
@@ -34,7 +34,7 @@ public abstract sealed class Type extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitUnknownType(this);
|
||||
}
|
||||
}
|
||||
@@ -45,7 +45,7 @@ public abstract sealed class Type extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitNothingType(this);
|
||||
}
|
||||
}
|
||||
@@ -56,7 +56,7 @@ public abstract sealed class Type extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitModuleType(this);
|
||||
}
|
||||
}
|
||||
@@ -67,7 +67,7 @@ public abstract sealed class Type extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitStringConstantType(this);
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ public abstract sealed class Type extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitDeclaredType(this);
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ public abstract sealed class Type extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitParenthesizedType(this);
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ public abstract sealed class Type extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitNullableType(this);
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ public abstract sealed class Type extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitConstrainedType(this);
|
||||
}
|
||||
|
||||
@@ -164,7 +164,7 @@ public abstract sealed class Type extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitUnionType(this);
|
||||
}
|
||||
|
||||
@@ -189,9 +189,8 @@ public abstract sealed class Type extends AbstractNode {
|
||||
+ '}';
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantValue")
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
@@ -217,7 +216,7 @@ public abstract sealed class Type extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitFunctionType(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,23 +16,23 @@
|
||||
package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class TypeAlias extends AbstractNode {
|
||||
private final int modifiersOffset;
|
||||
private final int nameOffset;
|
||||
|
||||
public TypeAlias(List<Node> children, int modifiersOffset, int nameOffset, Span span) {
|
||||
public TypeAlias(List<@Nullable Node> children, int modifiersOffset, int nameOffset, Span span) {
|
||||
super(span, children);
|
||||
this.modifiersOffset = modifiersOffset;
|
||||
this.nameOffset = nameOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitTypeAlias(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ package org.pkl.parser.syntax;
|
||||
import java.util.List;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class TypeAnnotation extends AbstractNode {
|
||||
public TypeAnnotation(Type type, Span span) {
|
||||
@@ -26,7 +25,7 @@ public final class TypeAnnotation extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitTypeAnnotation(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ public final class TypeArgumentList extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitTypeArgumentList(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,9 +17,9 @@ package org.pkl.parser.syntax;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class TypeParameter extends AbstractNode {
|
||||
private final @Nullable Variance variance;
|
||||
@@ -30,7 +30,7 @@ public final class TypeParameter extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitTypeParameter(this);
|
||||
}
|
||||
|
||||
@@ -56,9 +56,8 @@ public final class TypeParameter extends AbstractNode {
|
||||
+ '}';
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantValue")
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@ package org.pkl.parser.syntax;
|
||||
import java.util.List;
|
||||
import org.pkl.parser.ParserVisitor;
|
||||
import org.pkl.parser.Span;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
|
||||
public final class TypeParameterList extends AbstractNode {
|
||||
public TypeParameterList(List<TypeParameter> parameters, Span span) {
|
||||
@@ -26,7 +25,7 @@ public final class TypeParameterList extends AbstractNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
|
||||
public <T> T accept(ParserVisitor<T> visitor) {
|
||||
return visitor.visitTypeParameterList(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ package org.pkl.parser.syntax.generic;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.pkl.parser.util.Nullable;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
public final class Node {
|
||||
public final List<Node> children;
|
||||
@@ -60,7 +60,7 @@ public final class Node {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@NonnullByDefault
|
||||
@NullMarked
|
||||
package org.pkl.parser.syntax.generic;
|
||||
|
||||
import org.pkl.parser.util.NonnullByDefault;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@NonnullByDefault
|
||||
@NullMarked
|
||||
package org.pkl.parser.syntax;
|
||||
|
||||
import org.pkl.parser.util.NonnullByDefault;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright © 2025 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.pkl.parser.util;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
import javax.annotation.meta.TypeQualifierDefault;
|
||||
|
||||
/**
|
||||
* Indicates that method return types and method parameters in the annotated package are Nonnull
|
||||
* unless explicitly annotated with {@link Nullable}.
|
||||
*
|
||||
* <p>This annotation is a generalization of {@link javax.annotation.ParametersAreNonnullByDefault}.
|
||||
* All Pkl packages containing Java code should carry this annotation.
|
||||
*
|
||||
* <p>Ideally, this default would apply to every {@link ElementType#TYPE_USE}, but I haven't been
|
||||
* able to make this work reasonably in <a
|
||||
* href="https://youtrack.jetbrains.com/issue/IDEA-278618">IntelliJ</a>.
|
||||
*/
|
||||
@Documented
|
||||
@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE_PARAMETER})
|
||||
@javax.annotation.Nonnull
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.PACKAGE)
|
||||
public @interface NonnullByDefault {}
|
||||
@@ -1,38 +0,0 @@
|
||||
/*
|
||||
* Copyright © 2024-2025 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.pkl.parser.util;
|
||||
|
||||
import static javax.annotation.meta.When.MAYBE;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
import javax.annotation.meta.TypeQualifierNickname;
|
||||
|
||||
@Target({
|
||||
ElementType.TYPE_PARAMETER,
|
||||
ElementType.TYPE_USE,
|
||||
ElementType.PARAMETER,
|
||||
ElementType.FIELD,
|
||||
ElementType.METHOD
|
||||
})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@javax.annotation.Nonnull(when = MAYBE)
|
||||
@TypeQualifierNickname
|
||||
public @interface Nullable {}
|
||||
Reference in New Issue
Block a user