This is an automated email from the ASF dual-hosted git repository.

sdedic 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 072306a8d9 3967: Avoid NPEs, assure compilation phase.
     new 432b8bec18 Merge pull request #3979 from sdedic/lsp/call-hierarchy-npe
072306a8d9 is described below

commit 072306a8d9d5b1cd7597805ff3260039667f17e9
Author: Svata Dedic <[email protected]>
AuthorDate: Wed Apr 13 14:15:38 2022 +0200

    3967: Avoid NPEs, assure compilation phase.
---
 .../modules/java/source/ui/LspElementUtils.java        | 11 ++++++++---
 .../java/callhierarchy/CallHierarchyTasks.java         |  6 +++++-
 .../java/callhierarchy/LspCallHierarchyProvider.java   | 18 ++++++++++++++----
 3 files changed, 27 insertions(+), 8 deletions(-)

diff --git 
a/java/java.sourceui/src/org/netbeans/modules/java/source/ui/LspElementUtils.java
 
b/java/java.sourceui/src/org/netbeans/modules/java/source/ui/LspElementUtils.java
index 6219a19c75..21974f3bb1 100644
--- 
a/java/java.sourceui/src/org/netbeans/modules/java/source/ui/LspElementUtils.java
+++ 
b/java/java.sourceui/src/org/netbeans/modules/java/source/ui/LspElementUtils.java
@@ -77,11 +77,13 @@ public class LspElementUtils {
 
         StructureProvider.Builder builder = 
StructureProvider.newBuilder(createName(info, el), 
ElementHeaders.javaKind2Structure(el));
         builder.detail(createDetail(info, el));
-        FileObject f;
-        FileObject owner;
+        FileObject f = null;
+        FileObject owner = null;
         if (!bypassOpen) {
             Object[] oi = setOffsets(info, el, builder);
-            owner = f = (FileObject)oi[0]; 
+            if (oi != null) {
+                owner = f = (FileObject)oi[0]; 
+            }
         } else {
             f = null;
             owner = parentFile;
@@ -294,6 +296,9 @@ public class LspElementUtils {
     }
     
     private static StructureProvider.Builder processOffsetInfo(Object[] info, 
StructureProvider.Builder builder) {
+        if (info == null) {
+            return builder;
+        }
         int selStart = (int)info[3];
         if (selStart < 0) {
             selStart = (int)info[1];
diff --git 
a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallHierarchyTasks.java
 
b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallHierarchyTasks.java
index da715f63e0..f85587f91a 100644
--- 
a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallHierarchyTasks.java
+++ 
b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallHierarchyTasks.java
@@ -486,7 +486,11 @@ final class CallHierarchyTasks {
         
         @Override
         protected void runTask() throws Exception {
-            JavaSource js = 
JavaSource.forFileObject(elmDesc.getSourceToQuery().getFileObject());
+            TreePathHandle tph = elmDesc.getSourceToQuery();
+            if (tph == null || tph.getFileObject() == null) {
+                return;
+            }
+            JavaSource js = JavaSource.forFileObject(tph.getFileObject());
             if (js != null) {
                 Future<Void> control = ScanUtils.postUserActionTask(js, this);
                 control.get();
diff --git 
a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/LspCallHierarchyProvider.java
 
b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/LspCallHierarchyProvider.java
index 464ebd9ab9..6892de5803 100644
--- 
a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/LspCallHierarchyProvider.java
+++ 
b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/LspCallHierarchyProvider.java
@@ -123,11 +123,12 @@ public class LspCallHierarchyProvider implements 
CallHierarchyProvider {
             public void run(ResultIterator resultIterator) throws Exception {
                 Parser.Result r = resultIterator.getParserResult(offset);
                 if ("text/x-java".equals(r.getSnapshot().getMimeType())) {
-                    CompilationInfo ci = CompilationInfo.get(r);
+                    CompilationController ci = CompilationController.get(r);
                     if (ci == null || 
r.getSnapshot().getSource().getFileObject() == null) {
                         control.complete(null);
                         return;
                     }
+                    ci.toPhase(JavaSource.Phase.PARSED);
                     TreePath tp = ci.getTreeUtilities().pathFor(offset);
                     if (tp == null) {
                         control.complete(null);
@@ -290,7 +291,7 @@ public class LspCallHierarchyProvider implements 
CallHierarchyProvider {
                 res.complete(null);
                 return;
             }
-            CallHierarchyTasks.RootResolver rr = new 
CallHierarchyTasks.RootResolver(tph, true, true);
+            CallHierarchyTasks.RootResolver rr = new 
CallHierarchyTasks.RootResolver(tph, type == 
CallHierarchyModel.HierarchyType.CALLER, true);
             rr.run(parameter);
 
             CallHierarchyModel m = CallHierarchyModel.create(tph, 
@@ -298,6 +299,10 @@ public class LspCallHierarchyProvider implements 
CallHierarchyProvider {
             m.replaceRoot(rr.getRoot());
 
             Call rootCall = m.getRoot();
+            if (rootCall == null) {
+                res.complete(null);
+                return;
+            }
             m.computeCalls(m.getRoot(), () -> {
                 JavaSource js = JavaSource.forFileObject(fo);
                 if (js == null) {
@@ -326,7 +331,11 @@ public class LspCallHierarchyProvider implements 
CallHierarchyProvider {
                 CompletableFuture<StructureElement> elementFuture = 
ElementHeaders.resolveStructureElement(info, target, true);
                 if (elementFuture.isDone()) {
                     try {
-                        calls.add(createCall(elementFuture.get(), c, 
signature(target)));
+                        StructureElement sel = elementFuture.get();
+                        if (sel == null) {
+                            continue;
+                        }
+                        calls.add(createCall(sel, c, signature(target)));
                     } catch (ExecutionException ex) {
                         Throwable cause = ex.getCause();
                         if (cause instanceof CancellationException) {
@@ -379,13 +388,14 @@ public class LspCallHierarchyProvider implements 
CallHierarchyProvider {
             return toCancel != null ? toCancel : res;
         }
 
-        protected void processComputedCall(CompilationInfo info, Call 
rootCall) {
+        protected void processComputedCall(CompilationController info, Call 
rootCall) throws IOException {
             List<CallHierarchyEntry.Call> calls = new ArrayList<>();
             List<Call> refs = rootCall.getReferences();
 
             if (cancelled.get()) {
                 return;
             }
+            info.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
             toCancel = processAsync(info, refs, calls);
             toCancel.handle((r, ex) -> {
                 if (ex != null) { 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to