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 2019/05/08 05:05:24 UTC
[netbeans] 05/07: [NETBEANS-2293] Fix possible NPE on selected
method detection.
This is an automated email from the ASF dual-hosted git repository.
lkishalmi pushed a commit to branch release110-gradle-patch-1
in repository https://gitbox.apache.org/repos/asf/netbeans.git
commit c3071d7ca8c29fc1c097cf11b8a9cb7b4df90708
Author: Laszlo Kishalmi <la...@gmail.com>
AuthorDate: Sat Apr 6 15:23:06 2019 -0700
[NETBEANS-2293] Fix possible NPE on selected method detection.
---
.../gradle/java/GradleJavaTokenProvider.java | 86 ++++++----------------
.../modules/gradle/java/action-mapping.xml | 4 +-
.../gradle/java/api/output/LocationOpener.java | 58 +++++++--------
3 files changed, 52 insertions(+), 96 deletions(-)
diff --git a/groovy/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java b/groovy/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java
index 87018fb..8e79ed4 100644
--- a/groovy/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java
+++ b/groovy/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java
@@ -24,24 +24,13 @@ import org.netbeans.modules.gradle.api.execute.RunUtils;
import org.netbeans.modules.gradle.java.api.GradleJavaProject;
import org.netbeans.modules.gradle.java.api.GradleJavaSourceSet;
import org.netbeans.modules.gradle.spi.actions.ReplaceTokenProvider;
-import com.sun.source.tree.CompilationUnitTree;
-import com.sun.source.tree.Tree;
-import com.sun.source.util.Trees;
import java.io.File;
-import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.ElementKind;
-import javax.lang.model.element.TypeElement;
-import org.netbeans.api.java.source.CompilationController;
-import org.netbeans.api.java.source.JavaSource;
-import org.netbeans.api.java.source.Task;
import org.netbeans.api.project.Project;
import org.netbeans.spi.project.ProjectServiceProvider;
import org.netbeans.spi.project.SingleMethod;
@@ -85,32 +74,20 @@ public class GradleJavaTokenProvider implements ReplaceTokenProvider {
private void processSelectedPackageAndClass(final Map<String, String> map, Lookup context) {
FileObject fo = RunUtils.extractFileObjectfromLookup(context);
GradleJavaProject gjp = GradleJavaProject.get(project);
- if ((gjp != null) && (fo != null)) {
- File f = FileUtil.toFile(fo);
- GradleJavaSourceSet sourceSet = gjp.containingSourceSet(f);
- if (sourceSet != null) {
- if (f.isFile()) {
- String relPath = sourceSet.relativePath(f);
- String className = (relPath.lastIndexOf('.') > 0 ?
- relPath.substring(0, relPath.lastIndexOf('.')) :
- relPath).replace('/', '.');
- map.put("selectedClass", className); //NOI18N
- f = f.getParentFile();
- } else {
- String pkg = sourceSet.relativePath(f).replace('/', '.');
- map.put("selectedClass", pkg + "*"); //NOI18N
- }
- }
+ String className = evaluateClassName(gjp, fo);
+ if (className != null) {
+ map.put("selectedClass", className);
}
}
- private static void processSelectedMethod(final Map<String, String> map, Lookup context) {
+ private void processSelectedMethod(final Map<String, String> map, Lookup context) {
SingleMethod method = context.lookup(SingleMethod.class);
FileObject fo = method != null ? method.getFile() : RunUtils.extractFileObjectfromLookup(context);
- String methodName = method != null ? method.getMethodName() : null;
- if (fo != null) {
- String selectedMethod = evaluateSingleMethod(fo, methodName);
- map.put("selectedMethod", selectedMethod); //NOI18N
+ if ((fo != null) && fo.isData()) {
+ GradleJavaProject gjp = GradleJavaProject.get(project);
+ String className = evaluateClassName(gjp, fo);
+ String selectedMethod = method != null ? className + '.' + method.getMethodName() : className;
+ map.put("selectedMethod", selectedMethod);
}
}
@@ -137,37 +114,22 @@ public class GradleJavaTokenProvider implements ReplaceTokenProvider {
}
}
- private static String evaluateSingleMethod(final FileObject fo, final String method) {
- final Object[] ret = new Object[1];
- JavaSource javaSource = JavaSource.forFileObject(fo);
- if (javaSource != null) {
- try {
- javaSource.runUserActionTask(new Task<CompilationController>() {
- @Override
- public void run(CompilationController compilationController) throws Exception {
- compilationController.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
- Trees trees = compilationController.getTrees();
- CompilationUnitTree compilationUnitTree = compilationController.getCompilationUnit();
- List<? extends Tree> typeDecls = compilationUnitTree.getTypeDecls();
- for (Tree tree : typeDecls) {
- Element element = trees.getElement(trees.getPath(compilationUnitTree, tree));
- if (element != null && element.getKind() == ElementKind.CLASS && element.getSimpleName().contentEquals(fo.getName())) {
- TypeElement type = (TypeElement) element;
- StringBuilder sb = new StringBuilder(type.getQualifiedName());
- if (method != null) {
- sb.append('.').append(method);
- }
- ret[0] = sb.toString();
- break;
- }
- }
- }
- }, true);
- return ret[0].toString();
- } catch (IOException ioe) {
- //TODO: Do nothing?
+ private String evaluateClassName(GradleJavaProject gjp, FileObject fo) {
+ String ret = null;
+ if ((gjp != null) && (fo != null)) {
+ File f = FileUtil.toFile(fo);
+ GradleJavaSourceSet sourceSet = gjp.containingSourceSet(f);
+ if (sourceSet != null) {
+ String relPath = sourceSet.relativePath(f);
+ ret = (relPath.lastIndexOf('.') > 0 ?
+ relPath.substring(0, relPath.lastIndexOf('.')) :
+ relPath).replace('/', '.');
+ if (fo.isFolder()) {
+ ret = ret + '*';
+ }
}
}
- return null;
+ return ret;
}
+
}
diff --git a/groovy/gradle.java/src/org/netbeans/modules/gradle/java/action-mapping.xml b/groovy/gradle.java/src/org/netbeans/modules/gradle/java/action-mapping.xml
index 32d303a..3a616bd 100644
--- a/groovy/gradle.java/src/org/netbeans/modules/gradle/java/action-mapping.xml
+++ b/groovy/gradle.java/src/org/netbeans/modules/gradle/java/action-mapping.xml
@@ -40,12 +40,12 @@
</action>
<action name="debug.fix" repeatable="false">
- <args>--offline --no-rebuild ${affectedBuildTasks}</args>
+ <args>--offline ${affectedBuildTasks}</args>
<reload rule="NEVER"/>
</action>
<action name="compile.single" repetable="false">
- <args>--offline --no-rebuild ${affectedBuildTasks}</args>
+ <args>--offline ${affectedBuildTasks}</args>
<reload rule="NEVER"/>
</action>
diff --git a/groovy/gradle.java/src/org/netbeans/modules/gradle/java/api/output/LocationOpener.java b/groovy/gradle.java/src/org/netbeans/modules/gradle/java/api/output/LocationOpener.java
index 7cfc359..0974c80 100644
--- a/groovy/gradle.java/src/org/netbeans/modules/gradle/java/api/output/LocationOpener.java
+++ b/groovy/gradle.java/src/org/netbeans/modules/gradle/java/api/output/LocationOpener.java
@@ -85,23 +85,20 @@ public final class LocationOpener {
JavaSource javaSource = JavaSource.forFileObject(fo);
if (javaSource != null) {
try {
- javaSource.runUserActionTask(new Task<CompilationController>() {
- @Override
- public void run(CompilationController compilationController) throws Exception {
- compilationController.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
- Trees trees = compilationController.getTrees();
- CompilationUnitTree compilationUnitTree = compilationController.getCompilationUnit();
- List<? extends Tree> typeDecls = compilationUnitTree.getTypeDecls();
- for (Tree tree : typeDecls) {
- Element element = trees.getElement(trees.getPath(compilationUnitTree, tree));
- if (element != null && element.getKind() == ElementKind.CLASS && element.getSimpleName().contentEquals(fo.getName())) {
- List<? extends ExecutableElement> methodElements = ElementFilter.methodsIn(element.getEnclosedElements());
- for (Element child : methodElements) {
- if (child.getSimpleName().contentEquals(methodName)) {
- long pos = trees.getSourcePositions().getStartPosition(compilationUnitTree, trees.getTree(child));
- line[0] = (int) compilationUnitTree.getLineMap().getLineNumber(pos);
- break;
- }
+ javaSource.runUserActionTask((CompilationController compilationController) -> {
+ compilationController.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
+ Trees trees = compilationController.getTrees();
+ CompilationUnitTree compilationUnitTree = compilationController.getCompilationUnit();
+ List<? extends Tree> typeDecls = compilationUnitTree.getTypeDecls();
+ for (Tree tree : typeDecls) {
+ Element element = trees.getElement(trees.getPath(compilationUnitTree, tree));
+ if (element != null && element.getKind() == ElementKind.CLASS && element.getSimpleName().contentEquals(fo.getName())) {
+ List<? extends ExecutableElement> methodElements = ElementFilter.methodsIn(element.getEnclosedElements());
+ for (Element child : methodElements) {
+ if (child.getSimpleName().contentEquals(methodName)) {
+ long pos = trees.getSourcePositions().getStartPosition(compilationUnitTree, trees.getTree(child));
+ line[0] = (int) compilationUnitTree.getLineMap().getLineNumber(pos);
+ break;
}
}
}
@@ -120,20 +117,17 @@ public final class LocationOpener {
JavaSource javaSource = JavaSource.forFileObject(fo);
if (javaSource != null) {
try {
- javaSource.runUserActionTask(new Task<CompilationController>() {
- @Override
- public void run(CompilationController compilationController) throws Exception {
- compilationController.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
- Trees trees = compilationController.getTrees();
- CompilationUnitTree compilationUnitTree = compilationController.getCompilationUnit();
- List<? extends Tree> typeDecls = compilationUnitTree.getTypeDecls();
- for (Tree tree : typeDecls) {
- Element element = trees.getElement(trees.getPath(compilationUnitTree, tree));
- if (element != null && element.getKind() == ElementKind.CLASS && element.getSimpleName().contentEquals(fo.getName())) {
- long pos = trees.getSourcePositions().getStartPosition(compilationUnitTree, tree);
- line[0] = (int) compilationUnitTree.getLineMap().getLineNumber(pos);
- break;
- }
+ javaSource.runUserActionTask((CompilationController compilationController) -> {
+ compilationController.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
+ Trees trees = compilationController.getTrees();
+ CompilationUnitTree compilationUnitTree = compilationController.getCompilationUnit();
+ List<? extends Tree> typeDecls = compilationUnitTree.getTypeDecls();
+ for (Tree tree : typeDecls) {
+ Element element = trees.getElement(trees.getPath(compilationUnitTree, tree));
+ if (element != null && element.getKind() == ElementKind.CLASS && element.getSimpleName().contentEquals(fo.getName())) {
+ long pos = trees.getSourcePositions().getStartPosition(compilationUnitTree, tree);
+ line[0] = (int) compilationUnitTree.getLineMap().getLineNumber(pos);
+ break;
}
}
}, true);
@@ -147,7 +141,7 @@ public final class LocationOpener {
public static void openAtLine(FileObject file, final int line) {
openAtLine(file, line, false);
}
-
+
public static void openAtLine(FileObject file, final int line, final boolean reuse) {
try {
DataObject data = DataObject.find(file);
---------------------------------------------------------------------
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