blob: 45890e46573f15dc70149b121ade8bca546e75e0 [file] [log] [blame]
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())));
}
}