pkl-parser: Migrate nullness to JSpecify (#1515)

This commit is contained in:
odenix
2026-04-14 12:17:17 -07:00
committed by GitHub
parent 2d4286ee7b
commit 1ba54f11a9
63 changed files with 317 additions and 312 deletions
@@ -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 {}