Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim Jongman2014-04-21 21:04:43 +0000
committerWim Jongman2014-05-02 19:11:45 +0000
commit51954cac6e76c07642835b8e964d22f09b0395cd (patch)
treedd270c95378b2a9aaf25c3ffc800e0c05437efff
parent5ef66679f7426f76b0688c8612921d27f45b8fac (diff)
downloadorg.eclipse.e4.tools-51954cac6e76c07642835b8e964d22f09b0395cd.tar.gz
org.eclipse.e4.tools-51954cac6e76c07642835b8e964d22f09b0395cd.tar.xz
org.eclipse.e4.tools-51954cac6e76c07642835b8e964d22f09b0395cd.zip
Bug 432892: Application does not work after renaming the projectI20140504-2200I20140503-2200I20140502-2200
Renaming a project and renaming a referenced project is now supported. "platform:/plugin" and "bundleclass://" uris are processed in plugin.xml I have refactored the code to be more clear. the product file is not touched yet. Change-Id: Ib407ab705134ff6f7a51f6843138fda55ebc3e96 Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=432892
-rw-r--r--bundles/org.eclipse.e4.tools.emf.editor3x/META-INF/MANIFEST.MF3
-rw-r--r--bundles/org.eclipse.e4.tools.emf.editor3x/plugin.xml3
-rw-r--r--bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/ModelMoveParticipant.java106
-rw-r--r--bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/ModelRenameParticipant.java91
-rw-r--r--bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RefactorModel.java216
-rw-r--r--bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RefactorParticipantDelegate.java89
6 files changed, 414 insertions, 94 deletions
diff --git a/bundles/org.eclipse.e4.tools.emf.editor3x/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.emf.editor3x/META-INF/MANIFEST.MF
index 56445da6..c5ec6f40 100644
--- a/bundles/org.eclipse.e4.tools.emf.editor3x/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.e4.tools.emf.editor3x/META-INF/MANIFEST.MF
@@ -30,7 +30,8 @@ Require-Bundle: org.eclipse.ui;bundle-version="3.6.0",
org.eclipse.ltk.core.refactoring;bundle-version="3.5.200",
org.eclipse.search;bundle-version="3.7.0",
org.eclipse.text;bundle-version="3.5.100",
- org.eclipse.e4.ui.model.workbench;bundle-version="1.0.0"
+ org.eclipse.e4.ui.model.workbench;bundle-version="1.0.0",
+ org.eclipse.pde.ui
Service-Component: OSGI-INF/pdecontributionprovider.xml, OSGI-INF/xmiresourcecontextfunction.xml, OSGI-INF/projectfunction.xml, OSGI-INF/pdee4xmiprovider.xml, OSGI-INF/pdeextensionlookup.xml, OSGI-INF/modelextractor.xml
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %Bundle-Vendor
diff --git a/bundles/org.eclipse.e4.tools.emf.editor3x/plugin.xml b/bundles/org.eclipse.e4.tools.emf.editor3x/plugin.xml
index 0d404193..d4c03455 100644
--- a/bundles/org.eclipse.e4.tools.emf.editor3x/plugin.xml
+++ b/bundles/org.eclipse.e4.tools.emf.editor3x/plugin.xml
@@ -64,6 +64,9 @@
<instanceof
value="org.eclipse.core.resources.IFolder">
</instanceof>
+ <instanceof
+ value="org.eclipse.core.resources.IProject">
+ </instanceof>
</or>
</with>
</enablement>
diff --git a/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/ModelMoveParticipant.java b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/ModelMoveParticipant.java
index 2ec2342e..10d825f6 100644
--- a/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/ModelMoveParticipant.java
+++ b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/ModelMoveParticipant.java
@@ -1,3 +1,14 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Remain Software, Industrial-TSI and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wim Jongman <wim.jongman@remainsoftware.com> - Bug 395174: e4xmi should participate in package renaming
+ * Bug 432892: Eclipse 4 Application does not work after renaming the project name
+ ******************************************************************************/
package org.eclipse.e4.tools.emf.editor3x;
import org.eclipse.core.resources.IFile;
@@ -16,33 +27,31 @@ import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
import org.eclipse.ltk.core.refactoring.participants.MoveParticipant;
public class ModelMoveParticipant extends MoveParticipant {
- private IType _type;
- private IPackageFragment _pckage;
- private IFile _file;
- private IFolder _folder;
+ private IType fType;
+ private IPackageFragment fPckage;
+ private IFile fFile;
+ private RefactorModel fModel;
@Override
- protected boolean initialize(Object element) {
+ protected boolean initialize(Object pElement) {
- if (element instanceof IType) {
- _type = (IType) element;
- return true;
- }
+ fModel = RefactorModel.getModel(this);
- if (element instanceof IPackageFragment) {
- _pckage = (IPackageFragment) element;
+ if (pElement instanceof IType) {
+ fType = (IType) pElement;
return true;
}
- if (element instanceof IFile) {
- _file = (IFile) element;
+ if (pElement instanceof IPackageFragment) {
+ fPckage = (IPackageFragment) pElement;
return true;
}
- if (element instanceof IFolder) {
- _folder = (IFolder) element;
+ if (pElement instanceof IFile) {
+ fFile = (IFile) pElement;
return true;
}
+
return false;
}
@@ -52,42 +61,37 @@ public class ModelMoveParticipant extends MoveParticipant {
}
@Override
- public RefactoringStatus checkConditions(IProgressMonitor pm,
- CheckConditionsContext context) throws OperationCanceledException {
+ public RefactoringStatus checkConditions(IProgressMonitor pMonitor,
+ CheckConditionsContext pContext) throws OperationCanceledException {
return new RefactoringStatus();
}
@Override
- public Change createChange(IProgressMonitor pm) throws CoreException,
+ public Change createChange(IProgressMonitor pMonitor) throws CoreException,
OperationCanceledException {
- pm.beginTask("Creating Change ..", IProgressMonitor.UNKNOWN);
+ pMonitor.beginTask("Creating Change ..", IProgressMonitor.UNKNOWN);
Change change = null;
- if (_type != null) {
- change = createClassChange(pm, _type);
+ if (fType != null) {
+ change = createClassChange(pMonitor, fType);
}
- else if (_pckage != null) {
- change = createPackageChange(pm, _pckage);
+ else if (fPckage != null) {
+ change = createPackageChange(pMonitor, fPckage);
}
- else if (_file != null) {
- change = createFileChange(pm, _file);
+ else if (fFile != null) {
+ change = createFileChange(pMonitor, fFile);
}
- //
- // if (_folder != null) {
- // return createFolderChange(pm, _folder);
- // }
-
- pm.done();
+ pMonitor.done();
return change;
}
- private Change createFileChange(IProgressMonitor pm, IFile file)
+ private Change createFileChange(IProgressMonitor pMonitor, IFile file)
throws CoreException {
String newUrl = "platform:/plugin/";
@@ -104,14 +108,15 @@ public class ModelMoveParticipant extends MoveParticipant {
String oldUrl = "platform:/plugin" + file.getFullPath();
- return RefactorParticipantDelegate.createChange(pm, this, oldUrl,
- newUrl);
+ fModel.addTextRename(oldUrl, newUrl);
+
+ return RefactorParticipantDelegate.createChange(pMonitor, fModel);
}
- private Change createPackageChange(IProgressMonitor pm,
- IPackageFragment pckage) throws CoreException,
+ private Change createPackageChange(IProgressMonitor pMonitor,
+ IPackageFragment pPckage) throws CoreException,
OperationCanceledException {
- String fromBundle = Util.getBundleSymbolicName(pckage.getJavaProject()
+ String fromBundle = Util.getBundleSymbolicName(pPckage.getJavaProject()
.getProject());
IPackageFragmentRoot fragmentRoot = (IPackageFragmentRoot) getArguments()
@@ -120,32 +125,35 @@ public class ModelMoveParticipant extends MoveParticipant {
.getJavaProject().getProject());
final String newUrl = "bundleclass://" + toBundle + "/"
- + pckage.getElementName();
+ + pPckage.getElementName();
String oldUrl = "bundleclass://" + fromBundle + "/"
- + pckage.getElementName();
+ + pPckage.getElementName();
+
+ fModel.addTextRename(oldUrl, newUrl);
- return RefactorParticipantDelegate.createChange(pm, this, oldUrl,
- newUrl);
+ return RefactorParticipantDelegate.createChange(pMonitor, fModel);
}
- private Change createClassChange(IProgressMonitor pm, IType type)
+ private Change createClassChange(IProgressMonitor pMonitor, IType pType)
throws CoreException, OperationCanceledException {
- String fromBundle = Util.getBundleSymbolicName(_type.getJavaProject()
+ String fromBundle = Util.getBundleSymbolicName(fType.getJavaProject()
.getProject());
- String fromClassname = type.getFullyQualifiedName();
+ String fromClassname = pType.getFullyQualifiedName();
IPackageFragment fragment = (IPackageFragment) getArguments()
.getDestination();
String toBundle = Util.getBundleSymbolicName(fragment.getJavaProject()
.getProject());
- String toClassName = fragment.getElementName().length() == 0 ? type
+ String toClassName = fragment.getElementName().length() == 0 ? pType
.getElementName() : fragment.getElementName() + "."
- + type.getElementName();
+ + pType.getElementName();
- return RefactorParticipantDelegate.createChange(pm, this,
- "bundleclass://" + fromBundle + "/" + fromClassname,
- "bundleclass://" + toBundle + "/" + toClassName);
+ return RefactorParticipantDelegate.createChange(
+ pMonitor,
+ fModel.addTextRename("bundleclass://" + fromBundle + "/"
+ + fromClassname, "bundleclass://" + toBundle + "/"
+ + toClassName));
}
}
diff --git a/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/ModelRenameParticipant.java b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/ModelRenameParticipant.java
index 24ee9ceb..439e9134 100644
--- a/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/ModelRenameParticipant.java
+++ b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/ModelRenameParticipant.java
@@ -7,11 +7,15 @@
*
* Contributors:
* Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ * Wim Jongman <wim.jongman@remainsoftware.com> - Bug 395174: e4xmi should participate in package renaming
+ * Bug 432892: Eclipse 4 Application does not work after renaming the project name
******************************************************************************/
package org.eclipse.e4.tools.emf.editor3x;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
@@ -24,33 +28,41 @@ import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
public class ModelRenameParticipant extends
org.eclipse.ltk.core.refactoring.participants.RenameParticipant {
- private IType _type;
- private IPackageFragment _pckage;
- private IFile _file;
- private IFolder _folder;
+ private IType fType;
+ private IPackageFragment fPckage;
+ private IFile fFile;
+ private IFolder fFolder;
+ private IProject fProject;
+ private RefactorModel fModel;
@Override
protected boolean initialize(Object element) {
if (element instanceof IType) {
- _type = (IType) element;
+ fType = (IType) element;
return true;
}
if (element instanceof IPackageFragment) {
- _pckage = (IPackageFragment) element;
+ fPckage = (IPackageFragment) element;
return true;
}
if (element instanceof IFile) {
- _file = (IFile) element;
+ fFile = (IFile) element;
return true;
}
if (element instanceof IFolder) {
- _folder = (IFolder) element;
+ fFolder = (IFolder) element;
return true;
}
+
+ if (element instanceof IProject) {
+ fProject = (IProject) element;
+ return true;
+ }
+
return false;
}
@@ -68,25 +80,50 @@ public class ModelRenameParticipant extends
@Override
public Change createChange(IProgressMonitor pm) throws CoreException,
OperationCanceledException {
- if (_type != null) {
- return createClassChange(pm, _type);
+
+ fModel = RefactorModel.getModel(this);
+
+ if (fType != null) {
+ return createClassChange(pm, fType);
+ }
+
+ if (fPckage != null) {
+ return createPackageChange(pm, fPckage);
}
- if (_pckage != null) {
- return createPackageChange(pm, _pckage);
+ if (fFile != null) {
+ return createFileChange(pm, fFile);
}
- if (_file != null) {
- return createFileChange(pm, _file);
+ if (fFolder != null) {
+ return createFolderChange(pm, fFolder);
}
- if (_folder != null) {
- return createFolderChange(pm, _folder);
+ if (fProject != null) {
+ return createProjectChange(pm, fProject);
}
return null;
}
+ private Change createProjectChange(IProgressMonitor pm, IProject project)
+ throws CoreException {
+
+ if (!getArguments().getUpdateReferences())
+ return null;
+
+ fModel.addTextRename("platform:/plugin/" + project.getName() + "/",
+ "platform:/plugin/" + getArguments().getNewName() + "/");
+ fModel.addTextRename("bundleclass://" + project.getName() + "/",
+ "bundleclass://" + getArguments().getNewName() + "/");
+
+ fModel.setProjectRename(project, ((IWorkspaceRoot) project.getParent())
+ .getProject(getArguments().getNewName()));
+
+ return RefactorParticipantDelegate.createChange(pm, fModel);
+
+ }
+
private Change createFolderChange(IProgressMonitor pm, IFolder folder)
throws CoreException {
@@ -95,14 +132,15 @@ public class ModelRenameParticipant extends
SPLIT = "";
}
- String newUrl = "platform:/plugin/" + folder.getProject().getName() + "/"
- + folder.getParent().getProjectRelativePath().toString()
+ String newUrl = "platform:/plugin/" + folder.getProject().getName()
+ + "/" + folder.getParent().getProjectRelativePath().toString()
+ SPLIT + getArguments().getNewName();
String oldUrl = "platform:/plugin" + folder.getFullPath();
- return RefactorParticipantDelegate.createChange(pm, this, oldUrl,
- newUrl);
+ fModel.addTextRename(oldUrl, newUrl);
+
+ return RefactorParticipantDelegate.createChange(pm, fModel);
}
private Change createFileChange(IProgressMonitor pm, IFile file)
@@ -115,11 +153,10 @@ public class ModelRenameParticipant extends
String newUrl = "platform:/plugin/" + file.getProject().getName() + "/"
+ file.getParent().getProjectRelativePath().toString() + SPLIT
+ getArguments().getNewName();
-
String oldUrl = "platform:/plugin" + file.getFullPath();
+ fModel.addTextRename(oldUrl, newUrl);
- return RefactorParticipantDelegate.createChange(pm, this, oldUrl,
- newUrl);
+ return RefactorParticipantDelegate.createChange(pm, fModel);
}
private Change createPackageChange(IProgressMonitor pm,
@@ -132,9 +169,9 @@ public class ModelRenameParticipant extends
String oldUrl = "bundleclass://" + bundle + "/"
+ pckage.getElementName();
+ fModel.addTextRename(oldUrl, newUrl);
- return RefactorParticipantDelegate.createChange(pm, this, oldUrl,
- newUrl);
+ return RefactorParticipantDelegate.createChange(pm, fModel);
}
private Change createClassChange(IProgressMonitor pm, IType type)
@@ -150,9 +187,9 @@ public class ModelRenameParticipant extends
.getElementName() + "." + getArguments().getNewName());
String oldUrl = "bundleclass://" + bundle + "/"
+ type.getFullyQualifiedName().replace(".", "\\.");
+ fModel.addTextRename(oldUrl, newUrl);
- return RefactorParticipantDelegate.createChange(pm, this, oldUrl,
- newUrl);
+ return RefactorParticipantDelegate.createChange(pm, fModel);
}
}
diff --git a/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RefactorModel.java b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RefactorModel.java
new file mode 100644
index 00000000..58d71e2e
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RefactorModel.java
@@ -0,0 +1,216 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Remain Software, Industrial-TSI and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wim Jongman <wim.jongman@remainsoftware.com> - Bug 432892: Eclipse 4 Application does not work after renaming the project name
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.editor3x;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.ltk.core.refactoring.TextChange;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+
+/**
+ * A temporary data storage for Ecipse 4 model refactoring. Use the static
+ * methods to get hold of an instance.
+ *
+ * @author Remain Software - Wim Jongman
+ *
+ */
+public class RefactorModel {
+
+ int fIndex = 0;
+ IProject fNewProject;
+ List<String> fNewTexts = new ArrayList<String>();
+
+ IProject fOldProject;
+
+ List<String> fOldTexts = new ArrayList<String>();
+
+ private RefactoringParticipant fParticipant;
+
+ /**
+ * Factory for an empty model. Use the
+ * {@link #addTextRename(String, String)} method to add one or more text
+ * renames.
+ *
+ * @param pParticipant
+ * @return the model
+ */
+ public static RefactorModel getModel(RefactoringParticipant pParticipant) {
+ return new RefactorModel().setRefactorParticipant(pParticipant);
+ }
+
+ /**
+ * Factory for a model with one rename. Use the
+ * {@link #addTextRename(String, String)} method to add one or more text
+ * renames.
+ *
+ * @param pParticipant
+ * @param pOldText
+ * @param pNewText
+ * @return the model.
+ */
+ public static RefactorModel getModel(RefactoringParticipant pParticipant,
+ String pOldText, String pNewText) {
+ return new RefactorModel().addTextRename(pOldText, pNewText);
+ }
+
+ /**
+ * Factory for a model with one rename and a project rename. The project
+ * rename uses the old and new project because the refactoring framework
+ * expects the already renamed filenames. Use the
+ * {@link #addTextRename(String, String)} method to add one or more text
+ * renames and the old and the new project.
+ *
+ * @param pParticipant
+ * @param pOldText
+ * @param pNewText
+ * @param pOldProject
+ * @param pNewProject
+ * @return the model.
+ */
+ public static RefactorModel getModel(RefactoringParticipant pParticipant,
+ String pOldText, String pNewText, IProject pOldProject,
+ IProject pNewProject) {
+ return new RefactorModel().addTextRename(pOldText, pNewText)
+ .setProjectRename(pOldProject, pNewProject)
+ .setRefactorParticipant(pParticipant);
+ }
+
+ /**
+ * Adds a text rename to be processed later. For example, if the project
+ * name changes there can be <code>bundlclass://</code> and
+ * <code>platform:/plugin</code> changes.
+ *
+ * @param oldText
+ * @param newText
+ * @return the model
+ */
+ public RefactorModel addTextRename(String oldText, String newText) {
+ Assert.isNotNull(oldText);
+ Assert.isNotNull(newText);
+ fOldTexts.add(oldText);
+ fNewTexts.add(newText);
+ return this;
+ }
+
+ /**
+ * When project renaming this returns the new project. This project does not
+ * necessarily exist yet.
+ *
+ * @return the new project or null if it was not set
+ * @see RefactorModel#setProjectRename(IProject, IProject)
+ */
+ public IProject getNewProject() {
+ return fNewProject;
+ }
+
+ /**
+ * @return the current index set by {@link #setIndex(int)}
+ */
+ public String getNewTextCurrentIndex() {
+ return fNewTexts.get(fIndex);
+ }
+
+ /**
+ * When project renaming this returns the old project.
+ *
+ * @return the new project or null if it was not set
+ * @see RefactorModel#setProjectRename(IProject, IProject)
+ */
+ public IProject getOldProject() {
+ return fOldProject;
+ }
+
+ /**
+ *
+ * @return the old text in the current index.
+ */
+ public String getOldTextCurrentIndex() {
+ return fOldTexts.get(fIndex);
+ }
+
+ /**
+ * @return
+ */
+ public RefactoringParticipant getRefactoringParticipant() {
+ return fParticipant;
+ }
+
+ /**
+ * @return the number of text renames in this model
+ */
+ public int getRenameCount() {
+ return fOldTexts.size();
+ }
+
+ /**
+ * Delegates to the same method of the embedded RefactoringParticipant.
+ *
+ * @param file
+ * @return a TextChange object
+ * @see RefactoringParticipant#getTextChange(Object)
+ */
+ public TextChange getTextChange(IFile file) {
+ return fParticipant.getTextChange(file);
+ }
+
+ /**
+ * @return true if this is a projec rename (old and new project are set)
+ */
+ public boolean isProjectRename() {
+ return fOldProject != null;
+ }
+
+ /**
+ * Sets the current 0-based index. May not be out of bounds.
+ *
+ * @param index
+ * @return the model
+ */
+ public RefactorModel setIndex(int index) {
+ Assert.isTrue(index >= 0);
+ Assert.isTrue(index < fOldTexts.size());
+ this.fIndex = index;
+ return this;
+ }
+
+ /**
+ * Sets the old and the new project in case of project renaming.
+ *
+ * @param oldProject
+ * @param newProject
+ * @return the model
+ */
+ public RefactorModel setProjectRename(IProject oldProject,
+ IProject newProject) {
+ Assert.isNotNull(oldProject);
+ Assert.isNotNull(newProject);
+ fOldProject = oldProject;
+ fNewProject = newProject;
+ return this;
+ }
+
+ /**
+ * Sets the RefactoringParticipant.
+ *
+ * @param pParticipant
+ * @return the model
+ * @see RefactoringParticipant
+ */
+ public RefactorModel setRefactorParticipant(
+ RefactoringParticipant pParticipant) {
+ this.fParticipant = pParticipant;
+ return this;
+ }
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RefactorParticipantDelegate.java b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RefactorParticipantDelegate.java
index de104ff5..ba25f774 100644
--- a/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RefactorParticipantDelegate.java
+++ b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RefactorParticipantDelegate.java
@@ -7,22 +7,23 @@
*
* Contributors:
* Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ * Wim Jongman <wim.jongman@remainsoftware.com> Bug 432892: Eclipse 4 Application does not work after renaming the project name
******************************************************************************/
package org.eclipse.e4.tools.emf.editor3x;
import java.util.HashMap;
import java.util.Map;
-import java.util.regex.Pattern;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.CompositeChange;
import org.eclipse.ltk.core.refactoring.TextChange;
import org.eclipse.ltk.core.refactoring.TextFileChange;
-import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.pde.internal.ui.refactoring.MovedTextFileChange;
import org.eclipse.search.core.text.TextSearchEngine;
import org.eclipse.search.core.text.TextSearchMatchAccess;
import org.eclipse.search.core.text.TextSearchRequestor;
@@ -32,16 +33,36 @@ import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.text.edits.TextEditGroup;
class RefactorParticipantDelegate {
- public static Change createChange(IProgressMonitor pm,
- final RefactoringParticipant p, String oldUrl, final String newUrl)
+
+ private static final String E4_MODEL_CHANGES = "Eclipse 4 Application Model Changes";
+
+ /**
+ * Creates a set of changes and returns a new {@link CompositeChange} or
+ * adds the changes to the passed {@link CompositeChange}.
+ *
+ * @param pProgressMonitor
+ * @param pParticipant
+ * @param pOldUrl
+ * String[] containing the old texts
+ * @param pNewUrl
+ * String[] containing the new texts
+ * @param pNewProject
+ * The name of the project if this is a project change else null.
+ * @return a set of changes in a {@link CompositeChange}
+ * @throws CoreException
+ * @throws OperationCanceledException
+ */
+ public static CompositeChange createChange(
+ IProgressMonitor pProgressMonitor, final RefactorModel pModel)
throws CoreException, OperationCanceledException {
- String[] filenames = { "*.e4xmi" };
+
+ String[] filenames = { "*.e4xmi", "plugin.xml" };
FileTextSearchScope scope = FileTextSearchScope.newWorkspaceScope(
filenames, false);
- Pattern pattern = Pattern.compile(oldUrl);
final Map<IFile, TextFileChange> changes = new HashMap<IFile, TextFileChange>();
TextSearchRequestor searchRequestor = new TextSearchRequestor() {
+
@Override
public boolean acceptPatternMatch(TextSearchMatchAccess matchAccess)
throws CoreException {
@@ -49,30 +70,64 @@ class RefactorParticipantDelegate {
TextFileChange change = changes.get(file);
if (change == null) {
- TextChange textChange = p.getTextChange(file);
+ TextChange textChange = pModel.getTextChange(file);
if (textChange != null) {
return false;
}
- change = new TextFileChange(file.getName(), file);
- change.setEdit(new MultiTextEdit());
- changes.put(file, change);
+
+ if (pModel.isProjectRename()
+ && file.getProject().equals(pModel.getOldProject())) {
+ // The project/resources get refactored before the
+ // TextChange is applied, therefore we need their
+ // future locations
+ IProject newProject = pModel.getNewProject();
+
+ // If the model is in a non-standard location the
+ // new project will keep that location, only the project
+ // will be changed
+ IPath oldFile = file.getFullPath().removeFirstSegments(
+ 1);
+ IFile newFile = newProject.getFile(oldFile);
+
+ change = new MovedTextFileChange(file.getName(),
+ newFile, file);
+ change.setEdit(new MultiTextEdit());
+ changes.put(file, change);
+
+ } else {
+ change = new TextFileChange(file.getName(), file);
+ change.setEdit(new MultiTextEdit());
+ changes.put(file, change);
+ }
}
+
ReplaceEdit edit = new ReplaceEdit(
matchAccess.getMatchOffset(),
- matchAccess.getMatchLength(), newUrl);
+ matchAccess.getMatchLength(),
+ pModel.getNewTextCurrentIndex());
change.addEdit(edit);
- change.addTextEditGroup(new TextEditGroup(
- "Eclipse 4 Application Model Changes", edit)); //$NON-NLS-1$
+ change.addTextEditGroup(new TextEditGroup(E4_MODEL_CHANGES,
+ edit)); //$NON-NLS-1$
return true;
}
};
- TextSearchEngine.create().search(scope, searchRequestor, pattern, pm);
+
+ CompositeChange result;
+ TextSearchEngine searchEngine = TextSearchEngine.create();
+ for (int count = pModel.getRenameCount(); count > 0; count--) {
+ pModel.setIndex(count - 1);
+ searchEngine.search(
+ scope,
+ searchRequestor,
+ TextSearchEngine.createPattern(
+ pModel.getOldTextCurrentIndex(), true, false),
+ pProgressMonitor);
+ }
if (changes.isEmpty())
return null;
- CompositeChange result = new CompositeChange(
- "Eclipse 4 Application Model Changes"); //$NON-NLS-1$
+ result = new CompositeChange(E4_MODEL_CHANGES); //$NON-NLS-1$
for (TextFileChange c : changes.values()) {
result.add(c);
}

Back to the top