From 981f445bb45f0bf0ad5536a3a0ac199d6d831c74 Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Mon, 19 Apr 2004 05:46:43 +0000 Subject: [PATCH] Added new methods to CoreModel and IncludeEntry --- core/org.eclipse.cdt.core/ChangeLog | 12 ++++++++++ .../org/eclipse/cdt/core/model/CoreModel.java | 7 ++++++ .../eclipse/cdt/core/model/IIncludeEntry.java | 5 ++++ .../cdt/core/model/IIncludeReference.java | 9 ++++++++ .../internal/core/model/CModelManager.java | 23 +++++++++++++++++++ .../internal/core/model/IncludeReference.java | 12 ++++++++++ 6 files changed, 68 insertions(+) diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index af98fee2807..52a427588e5 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,15 @@ +2004-04-18 Alain Magloire + + Added a new method in CoreModel to get ITranslationUnit + for external headers, implementation in CModelManager. + Changes to IIncludReference and implementations. + + * model/org/eclipse/cdt/core/model/CoreModel.java + * model/org/eclipse/cdt/core/model/IInludeEntry.java + * model/org/eclipse/cdt/core/model/IIncludeReference.java + * model/org/eclipse/cdt/internal/core/model/CModelManager.java + * model/org/eclipse/cdt/internal/core/model/IncludeReference.java + 2004-04-16 Hoda Amer Reveresed a change in IParent caused by my previous patch. diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java index 239eb1afb04..730f1f9cdf7 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java @@ -41,6 +41,13 @@ public class CoreModel { return manager.create(path); } + /** + * Creates a translation form and IPath. Returns null if not found. + */ + public ITranslationUnit createTranslationUnitFrom(ICProject cproject, IPath path) { + return manager.createTranslationUnitFrom(cproject, path); + } + /** * Creates an ICElement form and IFile. Returns null if not found. */ diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IIncludeEntry.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IIncludeEntry.java index f40cafa1843..da88abe0085 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IIncludeEntry.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IIncludeEntry.java @@ -40,4 +40,9 @@ public interface IIncludeEntry extends IPathEntry { */ IPath[] getExclusionPatterns(); + /** + * Returns a char based representation of the exclusions patterns full path. + */ + public char[][] fullExclusionPatternChars(); + } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IIncludeReference.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IIncludeReference.java index add1d1edaf8..cc8fedf2558 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IIncludeReference.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IIncludeReference.java @@ -30,4 +30,13 @@ public interface IIncludeReference extends IParent, ICElement { * @return */ IPath getAffectedPath(); + + /** + * Return true if the path is on the include path Entry + * + * @param path + * @return + */ + boolean isOnIncludeEntry(IPath path); + } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java index 9ec7c14c847..468dcf9178e 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java @@ -5,6 +5,7 @@ package org.eclipse.cdt.internal.core.model; * All Rights Reserved. */ +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -34,8 +35,10 @@ import org.eclipse.cdt.core.model.ICElementDelta; import org.eclipse.cdt.core.model.ICModel; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IElementChangedListener; +import org.eclipse.cdt.core.model.IIncludeReference; import org.eclipse.cdt.core.model.IParent; import org.eclipse.cdt.core.model.ISourceRoot; +import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.internal.core.search.indexing.IndexManager; import org.eclipse.core.resources.IFile; @@ -368,6 +371,26 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe return celement; } + public ITranslationUnit createTranslationUnitFrom(ICProject cproject, IPath path) { + if (path == null || cproject == null) { + return null; + } + File file = path.toFile(); + if (file == null || !file.isFile()) { + return null; + } + try { + IIncludeReference[] includeReferences = cproject.getIncludeReferences(); + for (int i = 0; i < includeReferences.length; i++) { + if (includeReferences[i].isOnIncludeEntry(path)) { + return new ExternalTranslationUnit(includeReferences[i], path); + } + } + } catch (CModelException e) { + } + return null; + } + public void releaseCElement(ICElement celement) { // Guard. diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IncludeReference.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IncludeReference.java index f1414246f3c..c311f710f0c 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IncludeReference.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IncludeReference.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.Map; import org.eclipse.cdt.core.model.CModelException; +import org.eclipse.cdt.core.model.CoreModelUtil; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IIncludeEntry; @@ -118,4 +119,15 @@ public class IncludeReference extends Openable implements IIncludeReference { return true; } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.model.IIncludeReference#isOnIncludeEntry(org.eclipse.core.runtime.IPath) + */ + public boolean isOnIncludeEntry(IPath path) { + if (fIncludeEntry.getIncludePath().isPrefixOf(path) + && !CoreModelUtil.isExcluded(path, fIncludeEntry.fullExclusionPatternChars())) { + return true; + } + return false; + } + }