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