You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by lk...@apache.org on 2022/04/11 15:43:50 UTC
[netbeans] branch master updated: Prevent possible NPE at MicronautDataCompletionTask
This is an automated email from the ASF dual-hosted git repository.
lkishalmi 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 d68e961fc7 Prevent possible NPE at MicronautDataCompletionTask
d68e961fc7 is described below
commit d68e961fc75382487e6fd1353fb37b742041d73c
Author: Laszlo Kishalmi <la...@gmail.com>
AuthorDate: Mon Mar 21 16:49:36 2022 -0700
Prevent possible NPE at MicronautDataCompletionTask
---
.../completion/MicronautDataCompletionTask.java | 104 +++++++++++----------
1 file changed, 53 insertions(+), 51 deletions(-)
diff --git a/enterprise/micronaut/src/org/netbeans/modules/micronaut/completion/MicronautDataCompletionTask.java b/enterprise/micronaut/src/org/netbeans/modules/micronaut/completion/MicronautDataCompletionTask.java
index 92d1160670..fc9ac7cd41 100644
--- a/enterprise/micronaut/src/org/netbeans/modules/micronaut/completion/MicronautDataCompletionTask.java
+++ b/enterprise/micronaut/src/org/netbeans/modules/micronaut/completion/MicronautDataCompletionTask.java
@@ -135,60 +135,62 @@ public class MicronautDataCompletionTask {
@Override
public void run(ResultIterator resultIterator) throws Exception {
CompilationController cc = CompilationController.get(resultIterator.getParserResult(caretOffset));
- cc.toPhase(JavaSource.Phase.PARSED);
- anchorOffset = caretOffset;
- String prefix = EMPTY;
- TokenSequence<JavaTokenId> ts = cc.getTokenHierarchy().tokenSequence(JavaTokenId.language());
- if (ts.move(anchorOffset) == 0 || !ts.moveNext()) {
- ts.movePrevious();
- }
- int len = anchorOffset - ts.offset();
- if (len > 0 && ts.token().length() >= len) {
- if (ts.token().id() == JavaTokenId.IDENTIFIER || ts.token().id().primaryCategory().startsWith("keyword") ||
- ts.token().id().primaryCategory().equals("literal")) {
- prefix = ts.token().text().toString().substring(0, len);
- anchorOffset = ts.offset();
- } else if (ts.token().id() == JavaTokenId.STRING_LITERAL) {
- prefix = ts.token().text().toString().substring(1, ts.token().length() - 1);
- anchorOffset = ts.offset() + 1;
- } else if (ts.token().id() == JavaTokenId.MULTILINE_STRING_LITERAL) {
- prefix = ts.token().text().toString().substring(3, len);
- anchorOffset = ts.offset() + 3;
+ if (cc != null) {
+ cc.toPhase(JavaSource.Phase.PARSED);
+ anchorOffset = caretOffset;
+ String prefix = EMPTY;
+ TokenSequence<JavaTokenId> ts = cc.getTokenHierarchy().tokenSequence(JavaTokenId.language());
+ if (ts.move(anchorOffset) == 0 || !ts.moveNext()) {
+ ts.movePrevious();
}
- }
- Consumer consumer = (namePrefix, name, type) -> {
- items.add(type != null ? factory.createFinderMethodItem(name, type, anchorOffset) : factory.createFinderMethodNameItem(namePrefix, name, anchorOffset));
- };
- TreeUtilities treeUtilities = cc.getTreeUtilities();
- SourcePositions sp = cc.getTrees().getSourcePositions();
- TreePath path = treeUtilities.pathFor(anchorOffset);
- switch (path.getLeaf().getKind()) {
- case CLASS:
- case INTERFACE:
- resolveFinderMethods(cc, path, prefix, true, consumer);
- break;
- case METHOD:
- Tree returnType = ((MethodTree) path.getLeaf()).getReturnType();
- if (returnType != null && findLastNonWhitespaceToken(ts, (int) sp.getEndPosition(path.getCompilationUnit(), returnType), anchorOffset) == null) {
- resolveFinderMethods(cc, path.getParentPath(), prefix, false, consumer);
+ int len = anchorOffset - ts.offset();
+ if (len > 0 && ts.token().length() >= len) {
+ if (ts.token().id() == JavaTokenId.IDENTIFIER || ts.token().id().primaryCategory().startsWith("keyword") ||
+ ts.token().id().primaryCategory().equals("literal")) {
+ prefix = ts.token().text().toString().substring(0, len);
+ anchorOffset = ts.offset();
+ } else if (ts.token().id() == JavaTokenId.STRING_LITERAL) {
+ prefix = ts.token().text().toString().substring(1, ts.token().length() - 1);
+ anchorOffset = ts.offset() + 1;
+ } else if (ts.token().id() == JavaTokenId.MULTILINE_STRING_LITERAL) {
+ prefix = ts.token().text().toString().substring(3, len);
+ anchorOffset = ts.offset() + 3;
}
- break;
- case VARIABLE:
- Tree type = ((VariableTree) path.getLeaf()).getType();
- if (type != null && findLastNonWhitespaceToken(ts, (int) sp.getEndPosition(path.getCompilationUnit(), type), anchorOffset) == null) {
- TreePath parentPath = path.getParentPath();
- if (parentPath.getLeaf().getKind() == Tree.Kind.CLASS || parentPath.getLeaf().getKind() == Tree.Kind.INTERFACE) {
- resolveFinderMethods(cc, parentPath, prefix, false, consumer);
+ }
+ Consumer consumer = (namePrefix, name, type) -> {
+ items.add(type != null ? factory.createFinderMethodItem(name, type, anchorOffset) : factory.createFinderMethodNameItem(namePrefix, name, anchorOffset));
+ };
+ TreeUtilities treeUtilities = cc.getTreeUtilities();
+ SourcePositions sp = cc.getTrees().getSourcePositions();
+ TreePath path = treeUtilities.pathFor(anchorOffset);
+ switch (path.getLeaf().getKind()) {
+ case CLASS:
+ case INTERFACE:
+ resolveFinderMethods(cc, path, prefix, true, consumer);
+ break;
+ case METHOD:
+ Tree returnType = ((MethodTree) path.getLeaf()).getReturnType();
+ if (returnType != null && findLastNonWhitespaceToken(ts, (int) sp.getEndPosition(path.getCompilationUnit(), returnType), anchorOffset) == null) {
+ resolveFinderMethods(cc, path.getParentPath(), prefix, false, consumer);
}
- }
- break;
- case STRING_LITERAL:
- if (path.getParentPath().getLeaf().getKind() == Tree.Kind.ASSIGNMENT && path.getParentPath().getParentPath().getLeaf().getKind() == Tree.Kind.ANNOTATION) {
- resolveQueryAnnotation(cc, path.getParentPath().getParentPath(), prefix, caretOffset - anchorOffset, item -> {
- items.add(factory.createSQLItem(item));
- });
- }
- break;
+ break;
+ case VARIABLE:
+ Tree type = ((VariableTree) path.getLeaf()).getType();
+ if (type != null && findLastNonWhitespaceToken(ts, (int) sp.getEndPosition(path.getCompilationUnit(), type), anchorOffset) == null) {
+ TreePath parentPath = path.getParentPath();
+ if (parentPath.getLeaf().getKind() == Tree.Kind.CLASS || parentPath.getLeaf().getKind() == Tree.Kind.INTERFACE) {
+ resolveFinderMethods(cc, parentPath, prefix, false, consumer);
+ }
+ }
+ break;
+ case STRING_LITERAL:
+ if (path.getParentPath().getLeaf().getKind() == Tree.Kind.ASSIGNMENT && path.getParentPath().getParentPath().getLeaf().getKind() == Tree.Kind.ANNOTATION) {
+ resolveQueryAnnotation(cc, path.getParentPath().getParentPath(), prefix, caretOffset - anchorOffset, item -> {
+ items.add(factory.createSQLItem(item));
+ });
+ }
+ break;
+ }
}
}
});
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists