Skip to content

Commit 9acaa29

Browse files
authored
Merge pull request #120 from Achal1607/javavscode-30
added maven refactoring module from the netbeans side
2 parents 0d5fdfe + c096acf commit 9acaa29

File tree

2 files changed

+168
-1
lines changed

2 files changed

+168
-1
lines changed

build.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<property name="nbplatform.default.harness.dir" location="${nbplatform.default.netbeans.dest.dir}/harness" />
3232
<property name="nbantext.jar" location="netbeans/nbbuild/build/nbantext.jar" />
3333
<property name="nb_all" location="netbeans" />
34-
<property name="patches" value="patches/6330.diff patches/6760.diff patches/6834.diff patches/7001.diff patches/6968.diff patches/mvn-sh.diff patches/rename-debugger.diff patches/generate-dependencies.diff patches/remove-db.diff" />
34+
<property name="patches" value="patches/6330.diff patches/6760.diff patches/6834.diff patches/7001.diff patches/6968.diff patches/7104.diff patches/mvn-sh.diff patches/rename-debugger.diff patches/generate-dependencies.diff patches/remove-db.diff" />
3535
<condition property="cmd.suffix" value=".cmd" else="">
3636
<os family="windows"/>
3737
</condition>

patches/7104.diff

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
diff --git a/java/maven.model/nbproject/project.xml b/java/maven.model/nbproject/project.xml
2+
index fb79e8b0476f..6a671ce7c2ba 100644
3+
--- a/java/maven.model/nbproject/project.xml
4+
+++ b/java/maven.model/nbproject/project.xml
5+
@@ -225,6 +225,7 @@
6+
<friend>org.netbeans.modules.maven.jaxws</friend>
7+
<friend>org.netbeans.modules.maven.osgi</friend>
8+
<friend>org.netbeans.modules.maven.persistence</friend>
9+
+ <friend>org.netbeans.modules.maven.refactoring</friend>
10+
<friend>org.netbeans.modules.maven.repository</friend>
11+
<friend>org.netbeans.modules.maven.refactoring</friend>
12+
<friend>org.netbeans.modules.selenium.maven</friend>
13+
diff --git a/java/maven.refactoring/nbproject/project.xml b/java/maven.refactoring/nbproject/project.xml
14+
index 4e7b42e231c9..eb83e7325583 100644
15+
--- a/java/maven.refactoring/nbproject/project.xml
16+
+++ b/java/maven.refactoring/nbproject/project.xml
17+
@@ -100,7 +100,7 @@
18+
<compile-dependency/>
19+
<run-dependency>
20+
<release-version>1</release-version>
21+
- <specification-version>1.26</specification-version>
22+
+ <specification-version>1.67</specification-version>
23+
</run-dependency>
24+
</dependency>
25+
<dependency>
26+
diff --git a/java/maven.refactoring/src/org/netbeans/modules/maven/refactoring/MavenRefactoringPlugin.java b/java/maven.refactoring/src/org/netbeans/modules/maven/refactoring/MavenRefactoringPlugin.java
27+
index e336fb8f558b..3e6f8b8b1a57 100644
28+
--- a/java/maven.refactoring/src/org/netbeans/modules/maven/refactoring/MavenRefactoringPlugin.java
29+
+++ b/java/maven.refactoring/src/org/netbeans/modules/maven/refactoring/MavenRefactoringPlugin.java
30+
@@ -19,6 +19,7 @@
31+
package org.netbeans.modules.maven.refactoring;
32+
33+
import java.io.IOException;
34+
+import java.util.Arrays;
35+
import java.util.concurrent.atomic.AtomicReference;
36+
import java.util.logging.Level;
37+
import java.util.logging.Logger;
38+
@@ -26,29 +27,48 @@
39+
import javax.lang.model.element.TypeElement;
40+
import org.netbeans.api.java.source.CancellableTask;
41+
import org.netbeans.api.java.source.CompilationController;
42+
+import org.netbeans.api.java.source.ElementHandle;
43+
import org.netbeans.api.java.source.JavaSource;
44+
import org.netbeans.api.java.source.TreePathHandle;
45+
+import org.netbeans.api.project.FileOwnerQuery;
46+
+import org.netbeans.api.project.Project;
47+
import org.netbeans.modules.maven.indexer.api.RepositoryQueries;
48+
import org.netbeans.modules.maven.indexer.api.RepositoryQueries.ClassUsage;
49+
+import org.netbeans.modules.maven.model.ModelOperation;
50+
+import static org.netbeans.modules.maven.model.Utilities.performPOMModelOperations;
51+
+import org.netbeans.modules.maven.model.pom.POMModel;
52+
+import org.netbeans.modules.maven.model.pom.Properties;
53+
+import static org.netbeans.modules.maven.refactoring.MavenRefactoringPluginFactory.RUN_MAIN_CLASS;
54+
import org.netbeans.modules.refactoring.api.Problem;
55+
+import org.netbeans.modules.refactoring.api.RenameRefactoring;
56+
import org.netbeans.modules.refactoring.api.WhereUsedQuery;
57+
import org.netbeans.modules.refactoring.spi.RefactoringElementsBag;
58+
import org.netbeans.modules.refactoring.spi.RefactoringPlugin;
59+
+import org.openide.filesystems.FileObject;
60+
+import org.openide.util.Exceptions;
61+
62+
class MavenRefactoringPlugin implements RefactoringPlugin {
63+
64+
private static final Logger LOG = Logger.getLogger(MavenRefactoringPlugin.class.getName());
65+
-
66+
+
67+
+ private final RenameRefactoring refactoring;
68+
private final WhereUsedQuery query;
69+
private final TreePathHandle handle;
70+
71+
MavenRefactoringPlugin(WhereUsedQuery query, TreePathHandle handle) {
72+
this.query = query;
73+
this.handle = handle;
74+
+ this.refactoring = null;
75+
+ }
76+
+
77+
+ MavenRefactoringPlugin(RenameRefactoring refactoring, TreePathHandle handle) {
78+
+ this.refactoring = refactoring;
79+
+ this.handle = handle;
80+
+ this.query = null;
81+
}
82+
83+
@Override public Problem prepare(RefactoringElementsBag refactoringElements) {
84+
- if (!query.getBooleanValue(WhereUsedQuery.FIND_REFERENCES)) {
85+
+ if (query != null && !query.getBooleanValue(WhereUsedQuery.FIND_REFERENCES)) {
86+
return null;
87+
}
88+
final AtomicReference<String> fqn = new AtomicReference<String>();
89+
@@ -73,6 +93,44 @@ class MavenRefactoringPlugin implements RefactoringPlugin {
90+
}
91+
@Override public void cancel() {}
92+
};
93+
+
94+
+ if (refactoring != null) {
95+
+ ModelOperation<POMModel> renameMainClassProp = (final POMModel model) -> {
96+
+ Properties pr = model.getProject().getProperties();
97+
+ ElementHandle e = handle.getElementHandle();
98+
+ if (e != null) {
99+
+ String oldName = e.getBinaryName();
100+
+ String newName = refactoring.getNewName();
101+
+
102+
+ if (pr.getProperty(RUN_MAIN_CLASS) != null) {
103+
+ String oldProperty = pr.getProperty(RUN_MAIN_CLASS);
104+
+ if (oldProperty.equals(oldName)) {
105+
+ int lastIndex = oldName.lastIndexOf('.');
106+
+ String newPropertyValue = newName;
107+
+ if (lastIndex >= 0) {
108+
+ String packageName = oldName.substring(0, lastIndex + 1);
109+
+ newPropertyValue = packageName + newPropertyValue;
110+
+ }
111+
+ pr.setProperty(RUN_MAIN_CLASS, newPropertyValue);
112+
+ }
113+
+ }
114+
+ }
115+
+ };
116+
+
117+
+ try {
118+
+ FileObject fo = handle.getFileObject();
119+
+ Project p = FileOwnerQuery.getOwner(fo);
120+
+ final FileObject pom = p.getProjectDirectory().getFileObject("pom.xml"); // NOI18N
121+
+ pom.getFileSystem().runAtomicAction(() -> {
122+
+ performPOMModelOperations(pom, Arrays.asList(renameMainClassProp));
123+
+ });
124+
+ } catch (IOException ex) {
125+
+ Exceptions.printStackTrace(ex);
126+
+ }
127+
+
128+
+ return null;
129+
+ }
130+
+
131+
JavaSource source = JavaSource.forFileObject(handle.getFileObject());
132+
if (source != null) {
133+
try {
134+
diff --git a/java/maven.refactoring/src/org/netbeans/modules/maven/refactoring/MavenRefactoringPluginFactory.java b/java/maven.refactoring/src/org/netbeans/modules/maven/refactoring/MavenRefactoringPluginFactory.java
135+
index eef40cb62b61..a5ce1597dbc5 100644
136+
--- a/java/maven.refactoring/src/org/netbeans/modules/maven/refactoring/MavenRefactoringPluginFactory.java
137+
+++ b/java/maven.refactoring/src/org/netbeans/modules/maven/refactoring/MavenRefactoringPluginFactory.java
138+
@@ -29,6 +29,7 @@
139+
import org.netbeans.modules.maven.api.NbMavenProject;
140+
import org.netbeans.modules.refactoring.api.AbstractRefactoring;
141+
import org.netbeans.modules.refactoring.api.WhereUsedQuery;
142+
+import org.netbeans.modules.refactoring.api.RenameRefactoring;
143+
import org.netbeans.modules.refactoring.spi.RefactoringPlugin;
144+
import org.netbeans.modules.refactoring.spi.RefactoringPluginFactory;
145+
import org.openide.filesystems.FileObject;
146+
@@ -39,8 +40,21 @@
147+
public class MavenRefactoringPluginFactory implements RefactoringPluginFactory {
148+
149+
private static final Logger LOG = Logger.getLogger(MavenRefactoringPluginFactory.class.getName());
150+
+ public static final String RUN_MAIN_CLASS = "exec.mainClass";
151+
152+
@Override public RefactoringPlugin createInstance(AbstractRefactoring refactoring) {
153+
+ if (refactoring instanceof RenameRefactoring) {
154+
+ TreePathHandle handle = refactoring.getRefactoringSource().lookup(TreePathHandle.class);
155+
+ if (handle != null && handle.getKind() == Tree.Kind.CLASS) {
156+
+ FileObject fo = handle.getFileObject();
157+
+ Project p = FileOwnerQuery.getOwner(fo);
158+
+ if (p != null && p.getLookup().lookup(NbMavenProject.class) != null) {
159+
+ LOG.log(Level.FINE, "Renaming {0} field in a project pom.xml", RUN_MAIN_CLASS);
160+
+ return new MavenRefactoringPlugin((RenameRefactoring) refactoring, handle);
161+
+ }
162+
+ return null;
163+
+ }
164+
+ }
165+
if (!(refactoring instanceof WhereUsedQuery)) {
166+
return null;
167+
}

0 commit comments

Comments
 (0)