mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
2004-09-01 Alain Magloire
Provide IWorkingCopy.getOriginal(ICElement) * model/org/eclipse/cdt/core/model/IWorkingCopy.java * model/org/eclipse/cdt/internal/core/model/WorkinCopy.java
This commit is contained in:
parent
7aa7200573
commit
bff7d6fe56
3 changed files with 73 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
2004-09-01 Alain Magloire
|
||||
|
||||
Provide IWorkingCopy.getOriginal(ICElement)
|
||||
* model/org/eclipse/cdt/core/model/IWorkingCopy.java
|
||||
* model/org/eclipse/cdt/internal/core/model/WorkinCopy.java
|
||||
|
||||
2004-08-31 Alain Magloire
|
||||
|
||||
Fix for 72198
|
||||
|
|
|
@ -75,9 +75,18 @@ public interface IWorkingCopy extends ITranslationUnit{
|
|||
* getSharedWorkingCopy(IProgressMonitor, IBufferFactory)</code>.
|
||||
* A REMOVED CElementDelta is then reported on this working copy.
|
||||
*/
|
||||
|
||||
void destroy();
|
||||
|
||||
|
||||
/**
|
||||
* Returns the original element the specified working copy element was created from,
|
||||
* or <code>null</code> if this is not a working copy element.
|
||||
*
|
||||
* @param workingCopyElement the specified working copy element
|
||||
* @return the original element the specified working copy element was created from,
|
||||
* or <code>null</code> if this is not a working copy element
|
||||
*/
|
||||
ICElement getOriginal(ICElement workingCopyElement);
|
||||
|
||||
/**
|
||||
* Returns the original element this working copy was created from,
|
||||
* or <code>null</code> if this is not a working copy.
|
||||
|
|
|
@ -13,12 +13,15 @@ package org.eclipse.cdt.internal.core.model;
|
|||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.IBuffer;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICModelStatusConstants;
|
||||
import org.eclipse.cdt.core.model.IParent;
|
||||
import org.eclipse.cdt.core.model.IProblemRequestor;
|
||||
import org.eclipse.cdt.core.model.ISourceReference;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
|
@ -162,6 +165,59 @@ public class WorkingCopy extends TranslationUnit implements IWorkingCopy {
|
|||
return this == o;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the original element the specified working copy element was created from,
|
||||
* or <code>null</code> if this is not a working copy element.
|
||||
*
|
||||
* @param workingCopyElement the specified working copy element
|
||||
* @return the original element the specified working copy element was created from,
|
||||
* or <code>null</code> if this is not a working copy element
|
||||
*/
|
||||
public ICElement getOriginal(ICElement workingCopyElement) {
|
||||
// It has to come from the same workingCopy, meaning ours.
|
||||
if (workingCopyElement instanceof ISourceReference) {
|
||||
ITranslationUnit wunit = ((ISourceReference)workingCopyElement).getTranslationUnit();
|
||||
if (!wunit.equals(this)) {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
ITranslationUnit tu = getOriginalElement();
|
||||
if (tu == null) {
|
||||
return null; // oops !!
|
||||
}
|
||||
|
||||
// look for it.
|
||||
ICElement element = workingCopyElement;
|
||||
ArrayList children = new ArrayList();
|
||||
while (element != null && element.getElementType() != ICElement.C_UNIT) {
|
||||
children.add(element);
|
||||
element = element.getParent();
|
||||
}
|
||||
ICElement current = tu;
|
||||
for (int i = children.size()-1; i >= 0; i--) {
|
||||
ICElement child = (ICElement)children.get(i);
|
||||
if (current instanceof IParent) {
|
||||
try {
|
||||
ICElement[] celems = ((IParent)current).getChildren();
|
||||
current = null;
|
||||
for (int j = 0; j < celems.length; ++j) {
|
||||
if (celems[j].getElementName().equals(child.getElementName()) &&
|
||||
celems[j].getElementType() == child.getElementType()) {
|
||||
current = celems[j];
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (CModelException e) {
|
||||
current = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
return current;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.core.model.IWorkingCopy#getOriginalElement()
|
||||
*/
|
||||
|
|
Loading…
Add table
Reference in a new issue