diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index e0f7fc44bb2..adb8779a8ae 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,9 @@ +2004-09-02 Alain Magloire + + Fix to TranslationUnit.getElement(String). + * model/org/eclipse/cdt/internal/core/model/TranslationUnit.java + * model/org/eclipse/cdt/internal/core/model/WorkingCopy.java + 2004-09-01 Alain Magloire Provide IWorkingCopy.getOriginal(ICElement) diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java index eadbbb17218..d189cd96c02 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java @@ -101,16 +101,30 @@ public class TranslationUnit extends Openable implements ITranslationUnit { } public ICElement getElement(String name ) { - try { - ICElement[] celements = getChildren(); - for (int i = 0; i < celements.length; i++) { - if (name.equals(celements[i].getElementName())) { - return celements[i]; - } - } - } catch (CModelException e) { + if (name == null || name.length() == 0) { + return null; } - return null; + String[] names = name.split("::"); + ICElement current = this; + for (int j = 0; j < names.length; ++j) { + if (current instanceof IParent) { + try { + ICElement[] celements = ((IParent)current).getChildren(); + current = null; + for (int i = 0; i < celements.length; i++) { + if (names[j].equals(celements[i].getElementName())) { + current = celements[i]; + break; + } + } + } catch (CModelException e) { + current = null; + } + } else { + current = null; + } + } + return current; } public IInclude getInclude(String name) { @@ -377,12 +391,10 @@ public class TranslationUnit extends Openable implements ITranslationUnit { if (workingCopy != null) { workingCopy.useCount++; return workingCopy; - - } else { - CreateWorkingCopyOperation op = new CreateWorkingCopyOperation(this, perFactoryWorkingCopies, factory, requestor); - runOperation(op, monitor); - return (IWorkingCopy)op.getResultElements()[0]; } + CreateWorkingCopyOperation op = new CreateWorkingCopyOperation(this, perFactoryWorkingCopies, factory, requestor); + runOperation(op, monitor); + return (IWorkingCopy)op.getResultElements()[0]; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/WorkingCopy.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/WorkingCopy.java index a976bf59f3c..276ad0f826a 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/WorkingCopy.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/WorkingCopy.java @@ -212,6 +212,8 @@ public class WorkingCopy extends TranslationUnit implements IWorkingCopy { } catch (CModelException e) { current = null; } + } else { + current = null; } } return current; @@ -282,15 +284,14 @@ public class WorkingCopy extends TranslationUnit implements IWorkingCopy { public void open(IProgressMonitor monitor) throws CModelException { if (this.useCount == 0) { // was destroyed throw newNotPresentException(); - } else { - super.open(monitor); - //if (monitor != null && monitor.isCanceled()) return; - //if (this.problemRequestor != null && this.problemRequestor.isActive()){ - // this.problemRequestor.beginReporting(); - // TranslationUnitProblemFinder.process(this, this.problemRequestor, monitor); - // this.problemRequestor.endReporting(); - //} - } + } + super.open(monitor); + //if (monitor != null && monitor.isCanceled()) return; + //if (this.problemRequestor != null && this.problemRequestor.isActive()){ + // this.problemRequestor.beginReporting(); + // TranslationUnitProblemFinder.process(this, this.problemRequestor, monitor); + // this.problemRequestor.endReporting(); + //} } /** * @see org.eclipse.cdt.internal.core.model.CFile#openBuffer(IProgressMonitor)