Skip to content

Commit

Permalink
updating pom.xml as well when renaming symbol in editor
Browse files Browse the repository at this point in the history
Signed-off-by: Achal Talati <achal.talati@oracle.com>
  • Loading branch information
Achal1607 committed Feb 23, 2024
1 parent 0300e20 commit d19c361
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 3 deletions.
1 change: 1 addition & 0 deletions java/maven.model/nbproject/project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@
<friend>org.netbeans.modules.maven.jaxws</friend>
<friend>org.netbeans.modules.maven.osgi</friend>
<friend>org.netbeans.modules.maven.persistence</friend>
<friend>org.netbeans.modules.maven.refactoring</friend>
<friend>org.netbeans.modules.maven.repository</friend>
<friend>org.netbeans.modules.maven.refactoring</friend>
<friend>org.netbeans.modules.selenium.maven</friend>
Expand Down
2 changes: 1 addition & 1 deletion java/maven.refactoring/nbproject/project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
<specification-version>1.26</specification-version>
<specification-version>1.68</specification-version>
</run-dependency>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,36 +19,56 @@
package org.netbeans.modules.maven.refactoring;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import org.netbeans.api.java.source.CancellableTask;
import org.netbeans.api.java.source.CompilationController;
import org.netbeans.api.java.source.ElementHandle;
import org.netbeans.api.java.source.JavaSource;
import org.netbeans.api.java.source.TreePathHandle;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
import org.netbeans.modules.maven.indexer.api.RepositoryQueries;
import org.netbeans.modules.maven.indexer.api.RepositoryQueries.ClassUsage;
import org.netbeans.modules.maven.model.ModelOperation;
import org.netbeans.modules.maven.model.pom.POMModel;
import org.netbeans.modules.maven.model.pom.Properties;
import static org.netbeans.modules.maven.refactoring.MavenRefactoringPluginFactory.RUN_MAIN_CLASS;
import org.netbeans.modules.refactoring.api.Problem;
import org.netbeans.modules.refactoring.api.RenameRefactoring;
import org.netbeans.modules.refactoring.api.WhereUsedQuery;
import org.netbeans.modules.refactoring.spi.RefactoringElementsBag;
import org.netbeans.modules.refactoring.spi.RefactoringPlugin;
import org.openide.filesystems.FileObject;
import org.openide.util.Exceptions;

class MavenRefactoringPlugin implements RefactoringPlugin {

private static final Logger LOG = Logger.getLogger(MavenRefactoringPlugin.class.getName());


private final RenameRefactoring refactoring;
private final WhereUsedQuery query;
private final TreePathHandle handle;

MavenRefactoringPlugin(WhereUsedQuery query, TreePathHandle handle) {
this.query = query;
this.handle = handle;
this.refactoring = null;
}

MavenRefactoringPlugin(RenameRefactoring refactoring, TreePathHandle handle) {
this.refactoring = refactoring;
this.handle = handle;
this.query = null;
}

@Override public Problem prepare(RefactoringElementsBag refactoringElements) {
if (!query.getBooleanValue(WhereUsedQuery.FIND_REFERENCES)) {
if (query != null && !query.getBooleanValue(WhereUsedQuery.FIND_REFERENCES)) {
return null;
}
final AtomicReference<String> fqn = new AtomicReference<String>();
Expand All @@ -73,6 +93,46 @@ class MavenRefactoringPlugin implements RefactoringPlugin {
}
@Override public void cancel() {}
};

if (refactoring != null) {
ModelOperation<POMModel> operation = (final POMModel model) -> {
Properties pr = model.getProject().getProperties();
ElementHandle e = handle.getElementHandle();
if (e != null) {
String oldName = e.getBinaryName();
String newName = refactoring.getNewName();

if (pr.getProperty(RUN_MAIN_CLASS) != null) {
String oldProperty = pr.getProperty(RUN_MAIN_CLASS);
if (oldProperty.equals(oldName)) {
int lastIndex = oldName.lastIndexOf('.');
String newPropertyValue = newName;
if (lastIndex >= 0) {
String packageName = oldName.substring(0, lastIndex + 1);
newPropertyValue = packageName + newPropertyValue;
}
pr.setProperty(RUN_MAIN_CLASS, newPropertyValue);
}
}
}
};

try {
FileObject fo = handle.getFileObject();
Project p = FileOwnerQuery.getOwner(fo);
final FileObject pom = p.getProjectDirectory().getFileObject("pom.xml"); // NOI18N
pom.getFileSystem().runAtomicAction(() -> {
List<ModelOperation<POMModel>> operations = new ArrayList<>();
operations.add(operation);
org.netbeans.modules.maven.model.Utilities.performPOMModelOperations(pom, operations);
});
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}

return null;
}

JavaSource source = JavaSource.forFileObject(handle.getFileObject());
if (source != null) {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import org.netbeans.modules.maven.api.NbMavenProject;
import org.netbeans.modules.refactoring.api.AbstractRefactoring;
import org.netbeans.modules.refactoring.api.WhereUsedQuery;
import org.netbeans.modules.refactoring.api.RenameRefactoring;
import org.netbeans.modules.refactoring.spi.RefactoringPlugin;
import org.netbeans.modules.refactoring.spi.RefactoringPluginFactory;
import org.openide.filesystems.FileObject;
Expand All @@ -39,8 +40,21 @@
public class MavenRefactoringPluginFactory implements RefactoringPluginFactory {

private static final Logger LOG = Logger.getLogger(MavenRefactoringPluginFactory.class.getName());
public static final String RUN_MAIN_CLASS = "exec.mainClass";

@Override public RefactoringPlugin createInstance(AbstractRefactoring refactoring) {
if (refactoring instanceof RenameRefactoring) {
TreePathHandle handle = refactoring.getRefactoringSource().lookup(TreePathHandle.class);
if (handle != null && handle.getKind() == Tree.Kind.CLASS) {
FileObject fo = handle.getFileObject();
Project p = FileOwnerQuery.getOwner(fo);
if (p != null && p.getLookup().lookup(NbMavenProject.class) != null) {
LOG.log(Level.FINE, "Renaming {0} field in a project pom.xml", RUN_MAIN_CLASS);
return new MavenRefactoringPlugin((RenameRefactoring) refactoring, handle);
}
return null;
}
}
if (!(refactoring instanceof WhereUsedQuery)) {
return null;
}
Expand Down

0 comments on commit d19c361

Please sign in to comment.