Skip to content

Commit 870b5ce

Browse files
committed
generation of annotated getter w/o optional
1 parent 82e3e91 commit 870b5ce

File tree

146 files changed

+1980
-29
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

146 files changed

+1980
-29
lines changed

javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/CoreGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@ public static void main(String[] args) throws Exception {
5353
}
5454
Log.setAdapter(new Log.StandardOutStandardErrorAdapter());
5555
final Path root = Paths.get(args[0], "..", "javaparser-core", "src", "main", "java");
56-
final SourceRoot sourceRoot = new SourceRoot(root, parserConfiguration)
56+
final SourceRoot sourceRoot = new SourceRoot(root.normalize(), parserConfiguration)
5757
// .setPrinter(LexicalPreservingPrinter::print)
5858
;
5959
StaticJavaParser.setConfiguration(parserConfiguration);
6060

6161
final Path generatedJavaCcRoot =
6262
Paths.get(args[0], "..", "javaparser-core", "target", "generated-sources", "javacc");
63-
final SourceRoot generatedJavaCcSourceRoot = new SourceRoot(generatedJavaCcRoot, parserConfiguration)
63+
final SourceRoot generatedJavaCcSourceRoot = new SourceRoot(generatedJavaCcRoot.normalize(), parserConfiguration)
6464
// .setPrinter(LexicalPreservingPrinter::print)
6565
;
6666

javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/PropertyGenerator.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import static com.github.javaparser.utils.Utils.camelCaseToScreaming;
3030

3131
import com.github.javaparser.ast.CompilationUnit;
32+
import com.github.javaparser.ast.Modifier;
3233
import com.github.javaparser.ast.Node;
3334
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
3435
import com.github.javaparser.ast.body.EnumConstantDeclaration;
@@ -42,6 +43,9 @@
4243
import com.github.javaparser.metamodel.JavaParserMetaModel;
4344
import com.github.javaparser.metamodel.PropertyMetaModel;
4445
import com.github.javaparser.utils.SourceRoot;
46+
import org.jspecify.annotations.NonNull;
47+
import org.jspecify.annotations.Nullable;
48+
4549
import java.util.*;
4650

4751
public class PropertyGenerator extends NodeGenerator {
@@ -58,6 +62,7 @@ protected void generateNode(
5862
BaseNodeMetaModel nodeMetaModel, CompilationUnit nodeCu, ClassOrInterfaceDeclaration nodeCoid) {
5963
for (PropertyMetaModel property : nodeMetaModel.getDeclaredPropertyMetaModels()) {
6064
generateGetter(nodeMetaModel, nodeCoid, property);
65+
generateGetterWithAnnot(nodeMetaModel, nodeCoid, property);
6166
generateSetter(nodeMetaModel, nodeCoid, property);
6267
}
6368
nodeMetaModel.getDerivedPropertyMetaModels().forEach(p -> derivedProperties.put(p.getName(), p));
@@ -147,6 +152,30 @@ private void generateGetter(
147152
addOrReplaceWhenSameSignature(nodeCoid, getter);
148153
}
149154

155+
// special variant that uses JSpecify rather than optional.
156+
private void generateGetterWithAnnot(
157+
BaseNodeMetaModel nodeMetaModel, ClassOrInterfaceDeclaration nodeCoid, PropertyMetaModel property) {
158+
final MethodDeclaration getter = new MethodDeclaration(
159+
createModifierList(Modifier.DefaultKeyword.PUBLIC), parseType(property.getTypeNameForSetter()), property.getName());
160+
annotateWhenOverridden(nodeMetaModel, getter);
161+
final BlockStmt body = getter.getBody().get();
162+
body.getStatements().clear();
163+
nodeCoid.findCompilationUnit().get().addImport(Objects.class);
164+
165+
if (property.isOptional()) {
166+
// Ensure imports have been included.
167+
nodeCoid.findCompilationUnit().get().addImport(Nullable.class);
168+
getter.addAnnotation(Nullable.class);
169+
body.addStatement(f("return %s;", property.getName()));
170+
} else {
171+
nodeCoid.findCompilationUnit().get().addImport(NonNull.class);
172+
getter.addAnnotation(NonNull.class);
173+
body.addStatement(f("return Objects.requireNonNull(%s);", property.getName()));
174+
}
175+
176+
addOrReplaceWhenSameSignature(nodeCoid, getter);
177+
}
178+
150179
private void generateObservableProperty(
151180
EnumDeclaration observablePropertyEnum, PropertyMetaModel property, boolean derived) {
152181
boolean isAttribute = !Node.class.isAssignableFrom(property.getType());

javaparser-core/pom.xml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
22
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
33
<parent>
4-
<artifactId>jmlparser-parent</artifactId>
5-
<groupId>io.github.jmltoolkit</groupId>
6-
<version>3.26.2-b6-SNAPSHOT</version>
4+
<artifactId>jmlparser-parent</artifactId>
5+
<groupId>io.github.jmltoolkit</groupId>
6+
<version>3.26.2-b6-SNAPSHOT</version>
77
</parent>
88
<modelVersion>4.0.0</modelVersion>
99

@@ -31,6 +31,11 @@
3131
<artifactId>annotations</artifactId>
3232
<version>24.1.0</version>
3333
</dependency>
34+
<dependency>
35+
<groupId>org.jspecify</groupId>
36+
<artifactId>jspecify</artifactId>
37+
<version>1.0.0</version>
38+
</dependency>
3439
</dependencies>
3540

3641
<properties>

javaparser-core/src/main/java/com/github/javaparser/ast/ArrayCreationLevel.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@
3535
import java.util.Optional;
3636
import static com.github.javaparser.utils.Utils.assertNotNull;
3737

38+
import java.util.Objects;
39+
40+
import org.jspecify.annotations.NonNull;
41+
import org.jspecify.annotations.Nullable;
42+
3843
/**
3944
* In {@code new int[1][2];} there are two ArrayCreationLevel objects,
4045
* the first one contains the expression "1",
@@ -188,4 +193,14 @@ public boolean replace(Node node, Node replacementNode) {
188193
}
189194
return super.replace(node, replacementNode);
190195
}
196+
197+
@NonNull()
198+
public NodeList<AnnotationExpr> annotations() {
199+
return Objects.requireNonNull(annotations);
200+
}
201+
202+
@Nullable()
203+
public Expression dimension() {
204+
return dimension;
205+
}
191206
}

javaparser-core/src/main/java/com/github/javaparser/ast/CompilationUnit.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@
6060
import static com.github.javaparser.utils.CodeGenerationUtils.subtractPaths;
6161
import static com.github.javaparser.utils.Utils.assertNotNull;
6262

63+
import org.jspecify.annotations.NonNull;
64+
import org.jspecify.annotations.Nullable;
65+
6366
/**
6467
* <p>
6568
* This class represents the entire compilation unit. Each java file denotes a
@@ -849,4 +852,24 @@ public boolean replace(Node node, Node replacementNode) {
849852
}
850853
return super.replace(node, replacementNode);
851854
}
855+
856+
@NonNull()
857+
public NodeList<ImportDeclaration> imports() {
858+
return Objects.requireNonNull(imports);
859+
}
860+
861+
@Nullable()
862+
public ModuleDeclaration module() {
863+
return module;
864+
}
865+
866+
@Nullable()
867+
public PackageDeclaration packageDeclaration() {
868+
return packageDeclaration;
869+
}
870+
871+
@NonNull()
872+
public NodeList<TypeDeclaration<?>> types() {
873+
return Objects.requireNonNull(types);
874+
}
852875
}

javaparser-core/src/main/java/com/github/javaparser/ast/ImportDeclaration.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@
3232
import static com.github.javaparser.StaticJavaParser.parseName;
3333
import static com.github.javaparser.utils.Utils.assertNotNull;
3434

35+
import java.util.Objects;
36+
37+
import org.jspecify.annotations.NonNull;
38+
3539
/**
3640
* An import declaration.
3741
* <br>{@code import com.github.javaparser.JavaParser;}
@@ -111,14 +115,16 @@ public Name getName() {
111115
/**
112116
* Return if the import ends with "*".
113117
*/
118+
@NonNull()
114119
@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
115120
public boolean isAsterisk() {
116-
return isAsterisk;
121+
return Objects.requireNonNull(isAsterisk);
117122
}
118123

124+
@NonNull()
119125
@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
120126
public boolean isStatic() {
121-
return isStatic;
127+
return Objects.requireNonNull(isStatic);
122128
}
123129

124130
@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
@@ -180,9 +186,10 @@ public boolean replace(Node node, Node replacementNode) {
180186
return super.replace(node, replacementNode);
181187
}
182188

189+
@NonNull()
183190
@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
184191
public boolean isJmlModel() {
185-
return isJmlModel;
192+
return Objects.requireNonNull(isJmlModel);
186193
}
187194

188195
public void setIsJmlModel(boolean b) {
@@ -198,4 +205,9 @@ public ImportDeclaration setJmlModel(final boolean isJmlModel) {
198205
this.isJmlModel = isJmlModel;
199206
return this;
200207
}
208+
209+
@NonNull()
210+
public Name name() {
211+
return Objects.requireNonNull(name);
212+
}
201213
}

javaparser-core/src/main/java/com/github/javaparser/ast/Modifier.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
import static com.github.javaparser.ast.NodeList.toNodeList;
3232
import static com.github.javaparser.utils.Utils.assertNotNull;
3333

34+
import java.util.Objects;
35+
36+
import org.jspecify.annotations.NonNull;
37+
3438
/**
3539
* A modifier, like private, public, or volatile.
3640
*/
@@ -275,4 +279,9 @@ public Modifier(TokenRange tokenRange) {
275279
super(tokenRange);
276280
customInitialization();
277281
}
282+
283+
@NonNull()
284+
public Keyword keyword() {
285+
return Objects.requireNonNull(keyword);
286+
}
278287
}

javaparser-core/src/main/java/com/github/javaparser/ast/Node.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import com.github.javaparser.printer.configuration.PrinterConfiguration;
6060
import com.github.javaparser.resolution.SymbolResolver;
6161
import com.github.javaparser.utils.LineSeparator;
62+
import org.jspecify.annotations.Nullable;
6263

6364
/**
6465
* Base class for all nodes of the abstract syntax tree.
@@ -1271,4 +1272,9 @@ private boolean isPhantom(Node node) {
12711272
private boolean inPhantomNode(Node node, int levels) {
12721273
return node.getParentNode().isPresent() && (isPhantom(node.getParentNode().get()) || inPhantomNode(node.getParentNode().get(), levels - 1));
12731274
}
1275+
1276+
@Nullable()
1277+
public Comment comment() {
1278+
return comment;
1279+
}
12741280
}

javaparser-core/src/main/java/com/github/javaparser/ast/PackageDeclaration.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333
import com.github.javaparser.metamodel.PackageDeclarationMetaModel;
3434
import static com.github.javaparser.utils.Utils.assertNotNull;
3535

36+
import java.util.Objects;
37+
38+
import org.jspecify.annotations.NonNull;
39+
3640
/**
3741
* A package declaration.
3842
* <br>{@code package com.github.javaparser.ast;}
@@ -184,4 +188,14 @@ public boolean replace(Node node, Node replacementNode) {
184188
}
185189
return super.replace(node, replacementNode);
186190
}
191+
192+
@NonNull()
193+
public NodeList<AnnotationExpr> annotations() {
194+
return Objects.requireNonNull(annotations);
195+
}
196+
197+
@NonNull()
198+
public Name name() {
199+
return Objects.requireNonNull(name);
200+
}
187201
}

javaparser-core/src/main/java/com/github/javaparser/ast/body/AnnotationMemberDeclaration.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@
4545
import java.util.function.Consumer;
4646
import static com.github.javaparser.utils.Utils.assertNotNull;
4747

48+
import java.util.Objects;
49+
50+
import org.jspecify.annotations.Nullable;
51+
import org.jspecify.annotations.NonNull;
52+
4853
/**
4954
* The "int id();" in {@code @interface X { int id(); }}
5055
* <p>
@@ -284,4 +289,24 @@ public ResolvedAnnotationMemberDeclaration resolve() {
284289
public Optional<AnnotationMemberDeclaration> toAnnotationMemberDeclaration() {
285290
return Optional.of(this);
286291
}
292+
293+
@Nullable()
294+
public Expression defaultValue() {
295+
return defaultValue;
296+
}
297+
298+
@NonNull()
299+
public NodeList<Modifier> modifiers() {
300+
return Objects.requireNonNull(modifiers);
301+
}
302+
303+
@NonNull()
304+
public SimpleName name() {
305+
return Objects.requireNonNull(name);
306+
}
307+
308+
@NonNull()
309+
public Type type() {
310+
return Objects.requireNonNull(type);
311+
}
287312
}

javaparser-core/src/main/java/com/github/javaparser/ast/body/BodyDeclaration.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@
3939
import static com.github.javaparser.utils.CodeGenerationUtils.f;
4040
import static com.github.javaparser.utils.Utils.assertNotNull;
4141

42+
import java.util.Objects;
43+
44+
import org.jspecify.annotations.NonNull;
45+
4246
/**
4347
* Any declaration that can appear between the { and } of a class, interface, enum, or record.
4448
*
@@ -583,4 +587,9 @@ public Optional<JmlClassLevelDeclaration> toJmlClassLevelDeclaration() {
583587
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
584588
public void ifJmlClassLevelDeclaration(Consumer<JmlClassLevelDeclaration> action) {
585589
}
590+
591+
@NonNull()
592+
public NodeList<AnnotationExpr> annotations() {
593+
return Objects.requireNonNull(annotations);
594+
}
586595
}

javaparser-core/src/main/java/com/github/javaparser/ast/body/CallableDeclaration.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@
4444
import com.github.javaparser.metamodel.JavaParserMetaModel;
4545
import com.github.javaparser.metamodel.OptionalProperty;
4646

47+
import java.util.Objects;
48+
49+
import org.jspecify.annotations.NonNull;
50+
import org.jspecify.annotations.Nullable;
51+
4752
/**
4853
* Represents a declaration which is callable eg. a method or a constructor.
4954
*/
@@ -477,4 +482,39 @@ public boolean isVariableArityMethod() {
477482
public boolean isFixedArityMethod() {
478483
return !isVariableArityMethod();
479484
}
485+
486+
@NonNull()
487+
public NodeList<JmlContract> contracts() {
488+
return Objects.requireNonNull(contracts);
489+
}
490+
491+
@NonNull()
492+
public NodeList<Modifier> modifiers() {
493+
return Objects.requireNonNull(modifiers);
494+
}
495+
496+
@NonNull()
497+
public SimpleName name() {
498+
return Objects.requireNonNull(name);
499+
}
500+
501+
@NonNull()
502+
public NodeList<Parameter> parameters() {
503+
return Objects.requireNonNull(parameters);
504+
}
505+
506+
@Nullable()
507+
public ReceiverParameter receiverParameter() {
508+
return receiverParameter;
509+
}
510+
511+
@NonNull()
512+
public NodeList<ReferenceType> thrownExceptions() {
513+
return Objects.requireNonNull(thrownExceptions);
514+
}
515+
516+
@NonNull()
517+
public NodeList<TypeParameter> typeParameters() {
518+
return Objects.requireNonNull(typeParameters);
519+
}
480520
}

0 commit comments

Comments
 (0)