[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/PerformUnsavedRefactoringOperation.java b/bundles/org.eclipse.wst.xsd.ui/src-refactor/org/eclipse/wst/xsd/ui/internal/refactor/PerformUnsavedRefactoringOperation.java new file mode 100644 index 0000000..10739ec --- /dev/null +++ b/bundles/org.eclipse.wst.xsd.ui/src-refactor/org/eclipse/wst/xsd/ui/internal/refactor/PerformUnsavedRefactoringOperation.java
@@ -0,0 +1,70 @@ +/******************************************************************************* + * Copyright (c) 2005, 2006 IBM Corporation 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: + * IBM Corporation - initial API and implementation + * + *******************************************************************************/ +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 PerformUnsavedRefactoringOperation implements IWorkspaceRunnable +{ + private ProcessorBasedRefactoring refactoring; + + public PerformUnsavedRefactoringOperation(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
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 index 8d5107f..fe68f4b 100644 --- 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
@@ -1,3 +1,14 @@ +/******************************************************************************* + * Copyright (c) 2005, 2006 IBM Corporation 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: + * IBM Corporation - initial API and implementation + * + *******************************************************************************/ package org.eclipse.wst.xsd.ui.internal.refactor; import org.eclipse.core.resources.IWorkspaceRunnable;