/******************************************************************************* * Copyright (c) 2000, 2008 QNX Software Systems 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: * QNX Software Systems - Initial API and implementation * Anton Leherbauer (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.core.model; import java.util.Map; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.IProblemRequestor; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.core.resources.IFile; /** * CreateWorkingCopyOperation */ public class CreateWorkingCopyOperation extends CModelOperation { Map<ITranslationUnit, WorkingCopy> perFactoryWorkingCopies; IBufferFactory factory; IProblemRequestor problemRequestor; /* * Creates a working copy from the given original tu and the given buffer factory. * perFactoryWorkingCopies map is not null if the working copy is a shared working copy. */ public CreateWorkingCopyOperation(ITranslationUnit originalElement, Map<ITranslationUnit, WorkingCopy> perFactoryWorkingCopies, IBufferFactory factory, IProblemRequestor problemRequestor) { super(new ICElement[] {originalElement}); this.perFactoryWorkingCopies = perFactoryWorkingCopies; this.factory = factory; this.problemRequestor = problemRequestor; } @Override protected void executeOperation() throws CModelException { ITranslationUnit tu = getTranslationUnit(); WorkingCopy workingCopy; if (tu.getResource() != null) { workingCopy= new WorkingCopy(tu.getParent(), (IFile)tu.getResource(), tu.getContentTypeId(), this.factory, this.problemRequestor); } else { workingCopy= new WorkingCopy(tu.getParent(), tu.getLocationURI(), tu.getContentTypeId(), this.factory); } // open the working copy now to ensure contents are that of the current state of this element // Alain: Actually no, delay the parsing 'till it is really needed. Doing the parsing here // really slows down the opening of the CEditor. //workingCopy.open(this.fMonitor); if (this.perFactoryWorkingCopies != null) { this.perFactoryWorkingCopies.put(tu, workingCopy); //if (TranslationUnit.SHARED_WC_VERBOSE) { // System.out.println("Creating shared working copy " + workingCopy.toStringWithAncestors()); //$NON-NLS-1$ //} } // report added java delta CElementDelta delta = new CElementDelta(this.getCModel()); delta.added(workingCopy); addDelta(delta); fResultElements = new ICElement[] {workingCopy}; } /** * Returns the translation unit this operation is working on. */ protected ITranslationUnit getTranslationUnit() { return (ITranslationUnit)getElementToProcess(); } /** * @see CModelOperation#isReadOnly */ @Override public boolean isReadOnly() { return true; } }