This is an automated email from the ASF dual-hosted git repository. dbalek pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push: new c09374ef19 Disaplay parameter tooltips for annotations. new afc33f33bb Merge pull request #6487 from dbalek/dbalek/parameter-hints-on-annotations c09374ef19 is described below commit c09374ef1930fd057122f46a2b4811108b0674a8 Author: Dusan Balek <dusan.ba...@oracle.com> AuthorDate: Mon Sep 25 12:31:49 2023 +0200 Disaplay parameter tooltips for annotations. --- .../modules/java/completion/JavaTooltipTask.java | 44 ++++++++++++++++++++++ .../server/protocol/TextDocumentServiceImpl.java | 4 +- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/java/java.completion/src/org/netbeans/modules/java/completion/JavaTooltipTask.java b/java/java.completion/src/org/netbeans/modules/java/completion/JavaTooltipTask.java index 0ee74aa066..353c2cdd4d 100644 --- a/java/java.completion/src/org/netbeans/modules/java/completion/JavaTooltipTask.java +++ b/java/java.completion/src/org/netbeans/modules/java/completion/JavaTooltipTask.java @@ -38,6 +38,8 @@ import com.sun.source.tree.*; import com.sun.source.util.SourcePositions; import com.sun.source.util.TreePath; import com.sun.source.util.Trees; +import java.util.Collections; +import javax.lang.model.element.AnnotationValue; import org.netbeans.api.annotations.common.NullAllowed; import org.netbeans.api.java.source.*; @@ -229,6 +231,48 @@ public final class JavaTooltipTask extends BaseTask { } return; } + } else if (tree.getKind() == Tree.Kind.ANNOTATION) { + AnnotationTree at = (AnnotationTree) tree; + controller.toPhase(JavaSource.Phase.RESOLVED); + final Trees trees = controller.getTrees(); + final Element element = trees.getElement(path); + if (element != null && element.getKind() == ANNOTATION_TYPE) { + final Element activeElement = lastTree != null && lastTree.getKind() == Tree.Kind.ASSIGNMENT ? trees.getElement(new TreePath(path, ((AssignmentTree) lastTree).getVariable())) : null; + TypeUtilities tu = controller.getTypeUtilities(); + List<List<String>> data = new ArrayList<>(); + List<String> signatures = new ArrayList<>(); + for (Element e : element.getEnclosedElements()) { + if (e.getKind() == METHOD && e.asType().getKind() == TypeKind.EXECUTABLE) { + StringBuilder sb = new StringBuilder(); + sb.append(tu.getTypeName(((ExecutableType) e.asType()).getReturnType())).append(' '); //NOI18N + sb.append(e.getSimpleName()).append("()"); //NOI18N + AnnotationValue defaultValue = ((ExecutableElement) e).getDefaultValue(); + if (defaultValue != null) { + sb.append(" default ").append(defaultValue.toString()); + } + if (e == activeElement) { + activeSignatureIndex = signatures.size(); + } + data.add(Collections.singletonList(sb.toString())); + signatures.add(sb.toString()); + } + } + toolTipData = data.isEmpty() ? null : data; + toolTipSignatures = signatures.isEmpty() ? null : signatures; + toolTipIndex = -1; + CompilationUnitTree root = env.getRoot(); + SourcePositions sourcePositions = env.getSourcePositions(); + int pos = (int) sourcePositions.getEndPosition(root, at.getAnnotationType()); + String text = controller.getText().substring(pos, offset); + int idx = text.indexOf('('); //NOI18N + anchorOffset = idx < 0 ? pos : pos + controller.getSnapshot().getOriginalOffset(idx); + idx = text.lastIndexOf(','); //NOI18N + toolTipOffset = idx < 0 ? pos : pos + controller.getSnapshot().getOriginalOffset(idx); + if (toolTipOffset < anchorOffset) { + toolTipOffset = anchorOffset; + } + return; + } } lastTree = tree; path = path.getParentPath(); diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java index b6c4a4b9f2..feb70c7b13 100644 --- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java +++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java @@ -622,7 +622,9 @@ public class TextDocumentServiceImpl implements TextDocumentService, LanguageCli signatureInformation.setParameters(parameters); if (activeSignature.get() < 0 && signature.isActive()) { activeSignature.set(signatures.size()); - activeParameter.set(signatureInformation.getActiveParameter()); + if (signatureInformation.getActiveParameter() != null) { + activeParameter.set(signatureInformation.getActiveParameter()); + } } signatures.add(signatureInformation); }); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists