package org.eclipse.cdt.internal.core.model; /* * (c) Copyright IBM Corp. 2000, 2001. * All Rights Reserved. */ import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.IOpenable; import org.eclipse.cdt.core.model.ISourceManipulation; import org.eclipse.cdt.core.model.ISourceRange; import org.eclipse.cdt.core.model.ISourceReference; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; /** * Abstract class for C elements which implement ISourceReference. */ public class SourceManipulation extends Parent implements ISourceManipulation, ISourceReference { public SourceManipulation(ICElement parent, String name, int type) { super(parent, name, type); } /** * @see ISourceManipulation */ public void copy(ICElement container, ICElement sibling, String rename, boolean force, IProgressMonitor monitor) throws CModelException { if (container == null) { throw new IllegalArgumentException("operation.nullContainer"); //$NON-NLS-1$ } ICElement[] elements= new ICElement[] {this}; ICElement[] containers= new ICElement[] {container}; ICElement[] siblings= null; if (sibling != null) { siblings= new ICElement[] {sibling}; } String[] renamings= null; if (rename != null) { renamings= new String[] {rename}; } getCModel().copy(elements, containers, siblings, renamings, force, monitor); } /** * @see ISourceManipulation */ public void delete(boolean force, IProgressMonitor monitor) throws CModelException { ICElement[] elements = new ICElement[] {this}; getCModel().delete(elements, force, monitor); } /** * @see ISourceManipulation */ public void move(ICElement container, ICElement sibling, String rename, boolean force, IProgressMonitor monitor) throws CModelException { if (container == null) { throw new IllegalArgumentException("operation.nullContainer"); //$NON-NLS-1$ } ICElement[] elements= new ICElement[] {this}; ICElement[] containers= new ICElement[] {container}; ICElement[] siblings= null; if (sibling != null) { siblings= new ICElement[] {sibling}; } String[] renamings= null; if (rename != null) { renamings= new String[] {rename}; } getCModel().move(elements, containers, siblings, renamings, force, monitor); } /** * @see ISourceManipulation */ public void rename(String name, boolean force, IProgressMonitor monitor) throws CModelException { if (name == null) { throw new IllegalArgumentException("element.nullName"); //$NON-NLS-1$ } ICElement[] elements= new ICElement[] {this}; ICElement[] dests= new ICElement[] {this.getParent()}; String[] renamings= new String[] {name}; getCModel().rename(elements, dests, renamings, force, monitor); } /** * @see IMember */ public ITranslationUnit getTranslationUnit() { return getSourceManipulationInfo().getTranslationUnit(); } /** * Elements within compilation units and class files have no * corresponding resource. * * @see ICElement */ public IResource getCorrespondingResource() throws CModelException { return null; } /** * Returns the first parent of the element that is an instance of * IOpenable. */ public IOpenable getOpenableParent() { ICElement current = getParent(); while (current != null){ if (current instanceof IOpenable){ return (IOpenable) current; } current = current.getParent(); } return null; } /** * @see ISourceReference */ public String getSource() throws CModelException { return getSourceManipulationInfo().getSource(); } /** * @see ISourceReference */ public ISourceRange getSourceRange() throws CModelException { return getSourceManipulationInfo().getSourceRange(); } /** * @see ICElement */ public IResource getUnderlyingResource() { return getParent().getUnderlyingResource(); } public IResource getResource() { return null; } protected CElementInfo createElementInfo () { return new SourceManipulationInfo(this); } protected SourceManipulationInfo getSourceManipulationInfo() { return (SourceManipulationInfo)getElementInfo(); } public boolean isIdentical(SourceManipulation other){ return (this.equals(other) && (this.getSourceManipulationInfo().hasSameContentsAs(other.getSourceManipulationInfo()))); } }