[140813] Complex type references not updated when changing the type name
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-refactor/org/eclipse/wst/xsd/ui/internal/refactor/PerformUnsavedRefatoringOperation.java b/bundles/org.eclipse.wst.xsd.ui/src-refactor/org/eclipse/wst/xsd/ui/internal/refactor/PerformUnsavedRefatoringOperation.java new file mode 100644 index 0000000..8d5107f --- /dev/null +++ b/bundles/org.eclipse.wst.xsd.ui/src-refactor/org/eclipse/wst/xsd/ui/internal/refactor/PerformUnsavedRefatoringOperation.java
@@ -0,0 +1,59 @@ +package org.eclipse.wst.xsd.ui.internal.refactor; + +import org.eclipse.core.resources.IWorkspaceRunnable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.ltk.core.refactoring.Change; +import org.eclipse.ltk.core.refactoring.CompositeChange; +import org.eclipse.ltk.core.refactoring.TextFileChange; +import org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring; + +public class PerformUnsavedRefatoringOperation implements IWorkspaceRunnable +{ + private ProcessorBasedRefactoring refactoring; + + public PerformUnsavedRefatoringOperation(ProcessorBasedRefactoring refactoring) + { + this.refactoring = refactoring; + } + + public void run(IProgressMonitor pm) + { + if (pm == null) + { + pm = new NullProgressMonitor(); + } + try + { + refactoring.checkAllConditions(pm); + Change change = refactoring.createChange(pm); + if (change instanceof CompositeChange) + { + CompositeChange compositeChange = (CompositeChange)change; + setSaveMode(compositeChange); + } + change.perform(pm); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + private void setSaveMode(CompositeChange composite) + { + Change[] children = composite.getChildren(); + for (int i = 0; i < children.length; i++) + { + Change child = children[i]; + if (child instanceof TextFileChange) + { + ((TextFileChange)child).setSaveMode(TextFileChange.LEAVE_DIRTY); + } + else if (child instanceof CompositeChange) + { + setSaveMode((CompositeChange)child); + } + } + } +} \ No newline at end of file