From 8bf993518001b48081d073053296f3bcf74451e7 Mon Sep 17 00:00:00 2001 From: jlerbsc Date: Tue, 17 Nov 2020 10:16:21 +0100 Subject: [PATCH] Fix issue 2926 NoSuchElementException in PhantomNodeLogic after adding node --- .../lexicalpreservation/PhantomNodeLogic.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/PhantomNodeLogic.java b/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/PhantomNodeLogic.java index 97bd16562f..373b6d1a5a 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/PhantomNodeLogic.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/PhantomNodeLogic.java @@ -21,15 +21,15 @@ package com.github.javaparser.printer.lexicalpreservation; -import com.github.javaparser.ast.Node; -import com.github.javaparser.ast.observer.AstObserver; -import com.github.javaparser.ast.observer.AstObserverAdapter; -import com.github.javaparser.ast.type.UnknownType; +import static java.util.Collections.synchronizedMap; import java.util.IdentityHashMap; import java.util.Map; -import static java.util.Collections.synchronizedMap; +import com.github.javaparser.ast.Node; +import com.github.javaparser.ast.observer.AstObserver; +import com.github.javaparser.ast.observer.AstObserverAdapter; +import com.github.javaparser.ast.type.UnknownType; /** * We want to recognize and ignore "phantom" nodes, like the fake type of variable in FieldDeclaration @@ -54,8 +54,10 @@ static boolean isPhantomNode(Node node) { if (node instanceof UnknownType) { return true; } - boolean res = (node.getParentNode().isPresent() && - !node.getParentNode().get().getRange().get().contains(node.getRange().get()) + boolean res = (node.getParentNode().isPresent() + && node.getParentNode().get().hasRange() + && node.hasRange() + && !node.getParentNode().get().getRange().get().contains(node.getRange().get()) || inPhantomNode(node, LEVELS_TO_EXPLORE)); isPhantomNodeCache.put(node, res); node.register(cacheCleaner);