138930 [refactor + jar export] refactoring info loss when jar-desc-file is created
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageReader.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageReader.java
index a4922c9..a319a8d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageReader.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageReader.java
@@ -11,6 +11,7 @@
package org.eclipse.jdt.internal.ui.jarpackager;
import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
@@ -25,6 +26,8 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
@@ -34,6 +37,12 @@
import org.eclipse.jface.util.Assert;
+import org.eclipse.ltk.core.refactoring.RefactoringCore;
+import org.eclipse.ltk.core.refactoring.RefactoringDescriptor;
+import org.eclipse.ltk.core.refactoring.RefactoringDescriptorProxy;
+import org.eclipse.ltk.core.refactoring.history.IRefactoringHistoryService;
+import org.eclipse.ltk.core.refactoring.history.RefactoringHistory;
+
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -155,9 +164,48 @@
}
private void xmlReadRefactoring(JarPackageData jarPackage, Element element) throws java.io.IOException {
- if (element.getNodeName().equals("refactoring")) { //$NON-NLS-1$
+ if (element.getNodeName().equals("storedRefactorings")) { //$NON-NLS-1$
jarPackage.setExportStructuralOnly(getBooleanAttribute(element, "structuralOnly", jarPackage.isExportStructuralOnly())); //$NON-NLS-1$
jarPackage.setDeprecationAware(getBooleanAttribute(element, "deprecationInfo", jarPackage.isDeprecationAware())); //$NON-NLS-1$
+ List elements= new ArrayList();
+ int count= 1;
+ String value= element.getAttribute("project" + count); //$NON-NLS-1$
+ while (value != null && !"".equals(value)) { //$NON-NLS-1$
+ final IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(value);
+ if (project.exists())
+ elements.add(project);
+ count++;
+ value= element.getAttribute("project" + count); //$NON-NLS-1$
+ }
+ jarPackage.setRefactoringProjects((IProject[]) elements.toArray(new IProject[elements.size()]));
+ elements.clear();
+ count= 1;
+ IRefactoringHistoryService service= RefactoringCore.getHistoryService();
+ try {
+ service.connect();
+ value= element.getAttribute("refactoring" + count); //$NON-NLS-1$
+ while (value != null && !"".equals(value)) { //$NON-NLS-1$
+ final ByteArrayInputStream stream= new ByteArrayInputStream(value.getBytes("UTF-8")); //$NON-NLS-1$
+ try {
+ final RefactoringHistory history= service.readRefactoringHistory(stream, RefactoringDescriptor.NONE);
+ if (history != null) {
+ final RefactoringDescriptorProxy[] descriptors= history.getDescriptors();
+ if (descriptors.length > 0) {
+ for (int index= 0; index < descriptors.length; index++) {
+ elements.add(descriptors[index]);
+ }
+ }
+ }
+ } catch (CoreException exception) {
+ JavaPlugin.log(exception);
+ }
+ count++;
+ value= element.getAttribute("refactoring" + count); //$NON-NLS-1$
+ }
+ } finally {
+ service.disconnect();
+ }
+ jarPackage.setRefactoringDescriptors((RefactoringDescriptorProxy[]) elements.toArray(new RefactoringDescriptorProxy[elements.size()]));
}
}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWriter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWriter.java
index 2b851c1..eb88a96 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWriter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWriter.java
@@ -11,8 +11,10 @@
package org.eclipse.jdt.internal.ui.jarpackager;
import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -28,10 +30,16 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.util.Assert;
+import org.eclipse.ltk.core.refactoring.RefactoringCore;
+import org.eclipse.ltk.core.refactoring.RefactoringDescriptor;
+import org.eclipse.ltk.core.refactoring.RefactoringDescriptorProxy;
+import org.eclipse.ltk.core.refactoring.history.IRefactoringHistoryService;
+
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IPackageFragment;
@@ -136,10 +144,36 @@
}
private void xmlWriteRefactoring(JarPackageData jarPackage, Document document, Element xmlJarDesc) throws DOMException {
- Element refactoring= document.createElement("refactoring"); //$NON-NLS-1$
+ Element refactoring= document.createElement("storedRefactorings"); //$NON-NLS-1$
xmlJarDesc.appendChild(refactoring);
refactoring.setAttribute("structuralOnly", "" + jarPackage.isExportStructuralOnly()); //$NON-NLS-1$ //$NON-NLS-2$
refactoring.setAttribute("deprecationInfo", "" + jarPackage.isDeprecationAware()); //$NON-NLS-1$ //$NON-NLS-2$
+ final IProject[] projects= jarPackage.getRefactoringProjects();
+ if (projects != null && projects.length > 0) {
+ for (int index= 0; index < projects.length; index++)
+ refactoring.setAttribute("project" + (index + 1), projects[index].getName()); //$NON-NLS-1$
+ }
+ final RefactoringDescriptorProxy[] proxies= jarPackage.getRefactoringDescriptors();
+ if (proxies != null && proxies.length > 0) {
+ int count= 1;
+ IRefactoringHistoryService service= RefactoringCore.getHistoryService();
+ try {
+ service.connect();
+ for (int index= 0; index < proxies.length; index++, count++) {
+ try {
+ final ByteArrayOutputStream stream= new ByteArrayOutputStream();
+ service.writeRefactoringDescriptors(new RefactoringDescriptorProxy[] { proxies[index]}, stream, RefactoringDescriptor.NONE, true, null);
+ refactoring.setAttribute("refactoring" + count, stream.toString("UTF-8")); //$NON-NLS-1$ //$NON-NLS-2$
+ } catch (CoreException exception) {
+ JavaPlugin.log(exception);
+ } catch (UnsupportedEncodingException exception) {
+ Assert.isTrue(false);
+ }
+ }
+ } finally {
+ service.disconnect();
+ }
+ }
}
private void xmlWriteManifest(JarPackageData jarPackage, Document document, Element xmlJarDesc) throws DOMException {