Fix: putting code in the .orElse could have a side effect that can affect performance
diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/Generator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/Generator.java
index a78ad3e..1254fad 100644
--- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/Generator.java
+++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/Generator.java
@@ -107,7 +107,7 @@
throw new AssertionError(f("Wanted to regenerate a method with signature %s in %s, but found more than one.", callable.getSignature(), containingClassOrInterface.getNameAsString()));
}
final CallableDeclaration<?> existingCallable = existingCallables.get(0);
- callable.setJavadocComment(callable.getJavadocComment().orElse(existingCallable.getJavadocComment().orElse(null)));
+ callable.setJavadocComment(callable.getJavadocComment().orElseGet(() -> existingCallable.getJavadocComment().orElse(null)));
annotateGenerated(callable);
containingClassOrInterface.getMembers().replace(existingCallable, callable);
}
diff --git a/javaparser-core-metamodel-generator/src/main/java/com/github/javaparser/generator/AbstractGenerator.java b/javaparser-core-metamodel-generator/src/main/java/com/github/javaparser/generator/AbstractGenerator.java
index 0f59d92..14f7a1f 100644
--- a/javaparser-core-metamodel-generator/src/main/java/com/github/javaparser/generator/AbstractGenerator.java
+++ b/javaparser-core-metamodel-generator/src/main/java/com/github/javaparser/generator/AbstractGenerator.java
@@ -128,7 +128,7 @@
Optional<Comment> callableComment = callable.getComment();
Optional<Comment> existingCallableComment = existingCallable.getComment();
- callable.setComment(callableComment.orElse(existingCallable.getComment().orElse(null)));
+ callable.setComment(callableComment.orElseGet(() -> existingCallable.getComment().orElse(null)));
// callable.setJavadocComment(callableJavadocComment.orElse(existingCallableJavadocComment.orElse(null)));
// Mark the method as having been fully/partially generated.
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/CompilationUnit.java b/javaparser-core/src/main/java/com/github/javaparser/ast/CompilationUnit.java
index 18bcb08..e0aeccb 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/CompilationUnit.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/CompilationUnit.java
@@ -753,7 +753,7 @@
*/
public Path getSourceRoot() {
final Optional<String> pkgAsString = compilationUnit.getPackageDeclaration().map(NodeWithName::getNameAsString);
- return pkgAsString.map(p -> Paths.get(CodeGenerationUtils.packageToPath(p))).map(pkg -> subtractPaths(getDirectory(), pkg)).orElse(getDirectory());
+ return pkgAsString.map(p -> Paths.get(CodeGenerationUtils.packageToPath(p))).map(pkg -> subtractPaths(getDirectory(), pkg)).orElseGet(() -> getDirectory());
}
public String getFileName() {
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java b/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java
index 1205643..7cf17e8 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java
@@ -200,14 +200,14 @@
* else create a new DefaultPrettyPrinter with default parameters
*/
protected Printer getPrinter() {
- return findCompilationUnit().map(c -> c.getPrinter()).orElse(createDefaultPrinter());
+ return findCompilationUnit().map(c -> c.getPrinter()).orElseGet(() -> createDefaultPrinter());
}
/*
* Return the printer initialized with the specified configuration
*/
protected Printer getPrinter(PrinterConfiguration configuration) {
- return findCompilationUnit().map(c -> c.getPrinter(configuration)).orElse(createDefaultPrinter(configuration));
+ return findCompilationUnit().map(c -> c.getPrinter(configuration)).orElseGet(() -> createDefaultPrinter(configuration));
}
protected Printer createDefaultPrinter() {
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/body/TypeDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/body/TypeDeclaration.java
index b678eae..e28023b 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/body/TypeDeclaration.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/body/TypeDeclaration.java
@@ -203,7 +203,7 @@
*/
public Optional<String> getFullyQualifiedName() {
if (isTopLevelType()) {
- return findCompilationUnit().map(cu -> cu.getPackageDeclaration().map(pd -> pd.getNameAsString()).map(pkg -> pkg + "." + getNameAsString()).orElse(getNameAsString()));
+ return findCompilationUnit().map(cu -> cu.getPackageDeclaration().map(pd -> pd.getNameAsString()).map(pkg -> pkg + "." + getNameAsString()).orElseGet(() -> getNameAsString()));
}
return findAncestor(TypeDeclaration.class).map(td -> (TypeDeclaration<?>) td).flatMap(td -> td.getFullyQualifiedName().map(fqn -> fqn + "." + getNameAsString()));
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithParameters.java b/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithParameters.java
index 303c042..d81529a 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithParameters.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/NodeWithParameters.java
@@ -164,6 +164,6 @@
default boolean hasParametersOfType(Class<?>... paramTypes) {
return getParameters().stream().// if p.getType() is a class or interface type, we want to consider its erasure, i.e., if the parameter
// is "List<String>", we want to consider it as "List", so we need to call getName()
- map(p -> p.getType().toClassOrInterfaceType().map(NodeWithSimpleName::getNameAsString).orElse(p.getType().asString())).collect(toList()).equals(Stream.of(paramTypes).map(Class::getSimpleName).collect(toList()));
+ map(p -> p.getType().toClassOrInterfaceType().map(NodeWithSimpleName::getNameAsString).orElseGet(() -> p.getType().asString())).collect(toList()).equals(Stream.of(paramTypes).map(Class::getSimpleName).collect(toList()));
}
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/LexicalPreservingPrinter.java b/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/LexicalPreservingPrinter.java
index 9aece07..1c13562 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/LexicalPreservingPrinter.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/LexicalPreservingPrinter.java
@@ -133,8 +133,7 @@
}
if (property == ObservableProperty.COMMENT) {
Optional<Node> parentNode = observedNode.getParentNode();
- NodeText nodeText = parentNode.map(parent -> getOrCreateNodeText(parentNode.get())).// We're at the root node.
- orElse(getOrCreateNodeText(observedNode));
+ NodeText nodeText = parentNode.map(parent -> getOrCreateNodeText(parentNode.get())).orElseGet(() -> getOrCreateNodeText(observedNode));
if (oldValue == null) { // this case corresponds to the addition of a comment
int index = parentNode.isPresent() ? // Find the position of the comment node and put in front of it the [...]
nodeText.findChild(observedNode) : //