From 56e4a1704786dd09cd004b6c8f681caaf3745933 Mon Sep 17 00:00:00 2001 From: Rob Stryker Date: Fri, 30 Aug 2024 14:49:55 -0400 Subject: [PATCH] Fix test83804 and test83804a - incorrect source ranges / lengths Signed-off-by: Rob Stryker --- .../eclipse/jdt/core/dom/JavacConverter.java | 27 ++++++++++++------- .../jdt/core/dom/JavadocConverter.java | 7 ++--- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacConverter.java b/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacConverter.java index 5621d12e84a..b1b1b3a0f0d 100644 --- a/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacConverter.java +++ b/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacConverter.java @@ -391,9 +391,16 @@ private ImportDeclaration convert(JCImport javac) { } void commonSettings(ASTNode res, JCTree javac) { + if( javac != null ) { + int length = commonSettingsGetLength(res, javac); + commonSettings(res, javac, length, true); + } + } + + int commonSettingsGetLength(ASTNode res, JCTree javac) { + int length = -1; if( javac != null ) { int start = javac.getStartPosition(); - int length = -1; if (start >= 0) { int endPos = javac.getEndPosition(this.javacCompilationUnit.endPositions); if( endPos < 0 ) { @@ -409,17 +416,16 @@ void commonSettings(ASTNode res, JCTree javac) { if (start + Math.max(0, length) > this.rawText.length()) { length = this.rawText.length() - start; } - res.setSourceRange(start, Math.max(0, length)); } - commonSettings(res, javac, length); + return Math.max(0, length); } + return length; } - void commonSettings(ASTNode res, JCTree javac, int length) { - if( javac != null ) { - if (length >= 0) { - int start = javac.getStartPosition(); - res.setSourceRange(start, Math.max(0, length)); + void commonSettings(ASTNode res, JCTree javac, int length, boolean removeWhitespace) { + if( javac != null && length >= 0) { + res.setSourceRange(javac.getStartPosition(), Math.max(0, length)); + if( removeWhitespace ) { removeSurroundingWhitespaceFromRange(res); } this.domToJavac.put(res, javac); @@ -448,8 +454,9 @@ private void nameSettings(SimpleName name, JCVariableDecl javac, String varName) } private Name toName(JCTree expression) { - return toName(expression, this::commonSettings); + return toName(expression, null); } + Name toName(JCTree expression, BiConsumer extraSettings ) { if (expression instanceof JCIdent ident) { Name res = convertName(ident.getName()); @@ -2825,7 +2832,7 @@ Type convertToType(JCTree javac) { int ordinal = ordinalIndexOf(raw, "]", dims); if( ordinal != -1 ) { int indOf = ordinal + 1; - commonSettings(res, jcArrayType, indOf); + commonSettings(res, jcArrayType, indOf, true); return res; } } catch( Throwable tErr) { diff --git a/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavadocConverter.java b/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavadocConverter.java index c8fba987390..bdf20e6c3fc 100644 --- a/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavadocConverter.java +++ b/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavadocConverter.java @@ -242,7 +242,6 @@ private Optional convertBlockTag(DCTree javac) { } else if (javac instanceof DCSee see) { res.setTagName(TagElement.TAG_SEE); convertElementCombiningNodes(see.reference.stream().filter(x -> x != null).toList()).forEach(res.fragments::add); - //see.reference.stream().filter(a -> a != null).flatMap(this::convertElement).forEach(res.fragments::add); } else if (javac instanceof DCDeprecated deprecated) { res.setTagName(TagElement.TAG_DEPRECATED); convertElementCombiningNodes(deprecated.body.stream().filter(x -> x != null).toList()).forEach(res.fragments::add); @@ -537,9 +536,6 @@ private List convertElementCombiningNodes(List treeElements elements.addAll(convertElementGroup(combinable.toArray(new DCTree[0])).toList()); return elements; } - - - private Stream convertElement(DCTree javac) { if (javac instanceof DCText text) { return splitLines(text).map(this::toTextElement); @@ -553,7 +549,8 @@ private Stream convertElement(DCTree javac) { if( reference.qualifierExpression != null ) { Name res = this.javacConverter.toName(reference.qualifierExpression, (dom, javacNode) -> { int startPosition = this.docComment.getSourcePosition(reference.getPreferredPosition()) + javacNode.getStartPosition(); - dom.setSourceRange(startPosition, dom.getLength()); + int len = this.javacConverter.commonSettingsGetLength(dom, javacNode); + dom.setSourceRange(startPosition, len); if (this.contextTreePath != null) { this.converted.put(dom, DocTreePath.getPath(this.contextTreePath, this.docComment, javac)); }