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

Reply via email to