mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 02:06:01 +02:00
Fix for 132201, prefer content types with a case-sensitive match.
This commit is contained in:
parent
468da823b3
commit
b259cae666
11 changed files with 217 additions and 182 deletions
|
@ -7,12 +7,11 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX Software Systems - Initial API and implementation
|
* QNX Software Systems - Initial API and implementation
|
||||||
|
* Markus Schorn (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.core.model;
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCProjectNature;
|
import org.eclipse.cdt.core.CCProjectNature;
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.CProjectNature;
|
import org.eclipse.cdt.core.CProjectNature;
|
||||||
|
@ -50,8 +49,8 @@ public class CoreModel {
|
||||||
private static CoreModel cmodel = null;
|
private static CoreModel cmodel = null;
|
||||||
private static CModelManager manager = CModelManager.getDefault();
|
private static CModelManager manager = CModelManager.getDefault();
|
||||||
private static PathEntryManager pathEntryManager = PathEntryManager.getDefault();
|
private static PathEntryManager pathEntryManager = PathEntryManager.getDefault();
|
||||||
private static String FILE_EXT_PATTERN = "*."; //$NON-NLS-1$
|
// private static String FILE_EXT_PATTERN = "*."; //$NON-NLS-1$
|
||||||
private static int FILE_EXT_PATTERN_LENGTH = FILE_EXT_PATTERN.length();
|
// private static int FILE_EXT_PATTERN_LENGTH = FILE_EXT_PATTERN.length();
|
||||||
|
|
||||||
public final static String CORE_MODEL_ID = CCorePlugin.PLUGIN_ID + ".coremodel"; //$NON-NLS-1$
|
public final static String CORE_MODEL_ID = CCorePlugin.PLUGIN_ID + ".coremodel"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
@ -187,10 +186,7 @@ public class CoreModel {
|
||||||
* @return String[] ids
|
* @return String[] ids
|
||||||
*/
|
*/
|
||||||
public static String[] getRegistedContentTypeIds() {
|
public static String[] getRegistedContentTypeIds() {
|
||||||
ArrayList a = LanguageManager.getInstance().getAllContentTypes();
|
return LanguageManager.getInstance().getRegisteredContentTypeIds();
|
||||||
String[] result = new String[a.size()];
|
|
||||||
a.toArray(result);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -6,14 +6,17 @@
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX - Initial API and implementation
|
* QNX - Initial API and implementation
|
||||||
|
* Markus Schorn (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.core.model;
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.internal.core.model.TranslationUnit;
|
import org.eclipse.cdt.internal.core.model.TranslationUnit;
|
||||||
|
@ -51,7 +54,7 @@ public class LanguageManager {
|
||||||
IConfigurationElement[] languages = extension.getConfigurationElements();
|
IConfigurationElement[] languages = extension.getConfigurationElements();
|
||||||
for (int j = 0; j < languages.length; ++j) {
|
for (int j = 0; j < languages.length; ++j) {
|
||||||
IConfigurationElement languageElem = languages[j];
|
IConfigurationElement languageElem = languages[j];
|
||||||
String langId = extension.getNamespace() + "." + languageElem.getAttribute("id"); //$NON-NLS-1$ $NON-NLS-2$
|
String langId = extension.getNamespaceIdentifier() + "." + languageElem.getAttribute("id"); //$NON-NLS-1$ //$NON-NLS-2$ $NON-NLS-2$
|
||||||
if (langId.equals(id)) {
|
if (langId.equals(id)) {
|
||||||
language = (ILanguage)languageElem.createExecutableExtension("class"); //$NON-NLS-1$
|
language = (ILanguage)languageElem.createExecutableExtension("class"); //$NON-NLS-1$
|
||||||
cache.put(id, language);
|
cache.put(id, language);
|
||||||
|
@ -64,7 +67,6 @@ public class LanguageManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ILanguage getLanguage(IContentType contentType) throws CoreException {
|
public ILanguage getLanguage(IContentType contentType) throws CoreException {
|
||||||
IContentTypeManager manager = Platform.getContentTypeManager();
|
|
||||||
IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(CCorePlugin.PLUGIN_ID, ILanguage.KEY);
|
IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(CCorePlugin.PLUGIN_ID, ILanguage.KEY);
|
||||||
IExtension[] extensions = point.getExtensions();
|
IExtension[] extensions = point.getExtensions();
|
||||||
for (int i = 0; i < extensions.length; ++i) {
|
for (int i = 0; i < extensions.length; ++i) {
|
||||||
|
@ -73,8 +75,7 @@ public class LanguageManager {
|
||||||
IConfigurationElement language = languages[j];
|
IConfigurationElement language = languages[j];
|
||||||
IConfigurationElement[] contentTypes = language.getChildren("contentType"); //$NON-NLS-1$
|
IConfigurationElement[] contentTypes = language.getChildren("contentType"); //$NON-NLS-1$
|
||||||
for (int k = 0; k < contentTypes.length; ++k) {
|
for (int k = 0; k < contentTypes.length; ++k) {
|
||||||
IContentType langContType = manager.getContentType(contentTypes[k].getAttribute("id")); //$NON-NLS-1$
|
if (contentType.equals(contentType.getId())) {
|
||||||
if (contentType.equals(langContType)) {
|
|
||||||
return (ILanguage)language.createExecutableExtension("class"); //$NON-NLS-1$
|
return (ILanguage)language.createExecutableExtension("class"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,6 +84,9 @@ public class LanguageManager {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated use getRegisteredContentTypes() instead.
|
||||||
|
*/
|
||||||
public ArrayList/*<String>*/ getAllContentTypes() {
|
public ArrayList/*<String>*/ getAllContentTypes() {
|
||||||
ArrayList/*<String>*/ allTypes = new ArrayList();
|
ArrayList/*<String>*/ allTypes = new ArrayList();
|
||||||
allTypes.add(CCorePlugin.CONTENT_TYPE_ASMSOURCE);
|
allTypes.add(CCorePlugin.CONTENT_TYPE_ASMSOURCE);
|
||||||
|
@ -109,8 +113,43 @@ public class LanguageManager {
|
||||||
return allTypes;
|
return allTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all content types that are registered with CDT.
|
||||||
|
* @since 3.1.1
|
||||||
|
*/
|
||||||
|
public String[] getRegisteredContentTypeIds() {
|
||||||
|
Set contentTypes= collectContentTypeIds();
|
||||||
|
return (String[]) contentTypes.toArray(new String[contentTypes.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Set collectContentTypeIds() {
|
||||||
|
HashSet/*<String>*/ allTypes = new HashSet();
|
||||||
|
allTypes.add(CCorePlugin.CONTENT_TYPE_ASMSOURCE);
|
||||||
|
allTypes.add(CCorePlugin.CONTENT_TYPE_CHEADER);
|
||||||
|
allTypes.add(CCorePlugin.CONTENT_TYPE_CSOURCE);
|
||||||
|
allTypes.add(CCorePlugin.CONTENT_TYPE_CXXHEADER);
|
||||||
|
allTypes.add(CCorePlugin.CONTENT_TYPE_CXXSOURCE);
|
||||||
|
|
||||||
|
IContentTypeManager manager = Platform.getContentTypeManager();
|
||||||
|
IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(CCorePlugin.PLUGIN_ID, ILanguage.KEY);
|
||||||
|
IExtension[] extensions = point.getExtensions();
|
||||||
|
for (int i = 0; i < extensions.length; ++i) {
|
||||||
|
IConfigurationElement[] languages = extensions[i].getConfigurationElements();
|
||||||
|
for (int j = 0; j < languages.length; ++j) {
|
||||||
|
IConfigurationElement language = languages[j];
|
||||||
|
IConfigurationElement[] contentTypes = language.getChildren("contentType"); //$NON-NLS-1$
|
||||||
|
for (int k = 0; k < contentTypes.length; ++k) {
|
||||||
|
IContentType langContType = manager.getContentType(contentTypes[k].getAttribute("id")); //$NON-NLS-1$
|
||||||
|
allTypes.add(langContType.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return allTypes;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isContributedContentType(String contentTypeId) {
|
public boolean isContributedContentType(String contentTypeId) {
|
||||||
return getAllContentTypes().contains(contentTypeId);
|
return collectContentTypeIds().contains(contentTypeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IContributedModelBuilder getContributedModelBuilderFor(TranslationUnit tu) {
|
public IContributedModelBuilder getContributedModelBuilderFor(TranslationUnit tu) {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX Software Systems - Initial API and implementation
|
* QNX Software Systems - Initial API and implementation
|
||||||
|
* Markus Schorn (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.model;
|
package org.eclipse.cdt.internal.core.model;
|
||||||
|
@ -17,7 +18,6 @@ import java.util.Map;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
|
||||||
import org.eclipse.cdt.core.model.IBuffer;
|
import org.eclipse.cdt.core.model.IBuffer;
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||||
|
@ -682,25 +682,30 @@ public class TranslationUnit extends Openable implements ITranslationUnit {
|
||||||
|
|
||||||
public ILanguage getLanguage() throws CoreException {
|
public ILanguage getLanguage() throws CoreException {
|
||||||
if (language == null) {
|
if (language == null) {
|
||||||
// Look for the language extension registered against the
|
language= computeLanguage(contentTypeId);
|
||||||
// content type string
|
|
||||||
IContentTypeManager manager = Platform.getContentTypeManager();
|
|
||||||
IContentType contentType = manager.getContentType(contentTypeId);
|
|
||||||
language = LanguageManager.getInstance().getLanguage(contentType);
|
|
||||||
|
|
||||||
// Special magic for C/C++ header files
|
// Special magic for C/C++ header files
|
||||||
if (language == null && isHeaderUnit()) {
|
if (language == null && isHeaderUnit()) {
|
||||||
IResource resource = getResource();
|
if (contentTypeId.equals(CCorePlugin.CONTENT_TYPE_CXXHEADER)) {
|
||||||
contentType = resource != null && CoreModel.hasCCNature(resource.getProject())
|
language= computeLanguage(CCorePlugin.CONTENT_TYPE_CXXSOURCE);
|
||||||
? manager.getContentType(CCorePlugin.CONTENT_TYPE_CXXSOURCE)
|
}
|
||||||
: manager.getContentType(CCorePlugin.CONTENT_TYPE_CSOURCE);
|
else {
|
||||||
language = LanguageManager.getInstance().getLanguage(contentType);
|
language= computeLanguage(CCorePlugin.CONTENT_TYPE_CSOURCE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return language;
|
return language;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ILanguage computeLanguage(String contentTypeId) throws CoreException {
|
||||||
|
// Look for the language extension registered against the
|
||||||
|
// content type string
|
||||||
|
IContentTypeManager manager = Platform.getContentTypeManager();
|
||||||
|
IContentType contentType = manager.getContentType(contentTypeId);
|
||||||
|
return LanguageManager.getInstance().getLanguage(contentType);
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.model.ITranslationUnit#getContentTypeId()
|
* @see org.eclipse.cdt.core.model.ITranslationUnit#getContentTypeId()
|
||||||
*/
|
*/
|
||||||
|
@ -734,7 +739,6 @@ public class TranslationUnit extends Openable implements ITranslationUnit {
|
||||||
try {
|
try {
|
||||||
this.getElementInfo().setIsStructureKnown(wasSuccessful);
|
this.getElementInfo().setIsStructureKnown(wasSuccessful);
|
||||||
} catch (CModelException e) {
|
} catch (CModelException e) {
|
||||||
;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
|
* Markus Schorn (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.core.dom;
|
package org.eclipse.cdt.core.dom;
|
||||||
|
|
||||||
|
@ -40,7 +41,7 @@ import org.eclipse.core.runtime.content.IContentType;
|
||||||
*/
|
*/
|
||||||
public class DOMSearchUtil {
|
public class DOMSearchUtil {
|
||||||
private static final IASTName[] BLANK_NAME_ARRAY = new IASTName[0];
|
private static final IASTName[] BLANK_NAME_ARRAY = new IASTName[0];
|
||||||
private static final IASTName[] EMPTY_NAME_LIST = BLANK_NAME_ARRAY;
|
// private static final IASTName[] EMPTY_NAME_LIST = BLANK_NAME_ARRAY;
|
||||||
|
|
||||||
public static final int DECLARATIONS = 1;
|
public static final int DECLARATIONS = 1;
|
||||||
public static final int DEFINITIONS = 2;
|
public static final int DEFINITIONS = 2;
|
||||||
|
@ -58,7 +59,8 @@ public class DOMSearchUtil {
|
||||||
IContentType contentType = CCorePlugin.getContentType(project, file.getFullPath().lastSegment());
|
IContentType contentType = CCorePlugin.getContentType(project, file.getFullPath().lastSegment());
|
||||||
if (contentType != null) {
|
if (contentType != null) {
|
||||||
String lid = contentType.getId();
|
String lid = contentType.getId();
|
||||||
if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(lid)) {
|
if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(lid) ||
|
||||||
|
CCorePlugin.CONTENT_TYPE_CXXHEADER.equals(lid)) {
|
||||||
return ParserLanguage.CPP;
|
return ParserLanguage.CPP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -131,7 +133,7 @@ public class DOMSearchUtil {
|
||||||
} else if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(id)) {
|
} else if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(id)) {
|
||||||
return ParserLanguage.CPP;
|
return ParserLanguage.CPP;
|
||||||
} else if (CCorePlugin.CONTENT_TYPE_CHEADER.equals(id)) {
|
} else if (CCorePlugin.CONTENT_TYPE_CHEADER.equals(id)) {
|
||||||
return ParserLanguage.CPP; // <============== is that right ? should not this be C ?
|
return ParserLanguage.C;
|
||||||
} else if (CCorePlugin.CONTENT_TYPE_CSOURCE.equals(id)) {
|
} else if (CCorePlugin.CONTENT_TYPE_CSOURCE.equals(id)) {
|
||||||
return ParserLanguage.C;
|
return ParserLanguage.C;
|
||||||
} else if (CCorePlugin.CONTENT_TYPE_ASMSOURCE.equals(id)) {
|
} else if (CCorePlugin.CONTENT_TYPE_ASMSOURCE.equals(id)) {
|
||||||
|
|
|
@ -450,60 +450,35 @@
|
||||||
<!-- =================================================================================== -->
|
<!-- =================================================================================== -->
|
||||||
<!-- Define C/C++ files ContentTypes -->
|
<!-- Define C/C++ files ContentTypes -->
|
||||||
<!-- =================================================================================== -->
|
<!-- =================================================================================== -->
|
||||||
<extension point="org.eclipse.core.runtime.contentTypes">
|
<extension point="org.eclipse.core.runtime.contentTypes">
|
||||||
<!-- declares a content type for C source files -->
|
<!-- declares a content type for C source files -->
|
||||||
<content-type id="cSource" name="%cSourceName"
|
<content-type id="cSource" name="%cSourceName"
|
||||||
base-type="org.eclipse.core.runtime.text"
|
base-type="org.eclipse.core.runtime.text"
|
||||||
priority="high"/>
|
file-extensions="c"
|
||||||
|
priority="high"/>
|
||||||
<!-- declares a content type for C header files -->
|
<!-- declares a content type for C header files -->
|
||||||
<content-type id="cHeader" name="%cHeaderName"
|
<content-type id="cHeader" name="%cHeaderName"
|
||||||
base-type="org.eclipse.cdt.core.cSource"
|
base-type="org.eclipse.cdt.core.cSource"
|
||||||
|
file-extensions="h"
|
||||||
priority="high"/>
|
priority="high"/>
|
||||||
<!-- declares a content type for C++ source files -->
|
<!-- declares a content type for C++ source files -->
|
||||||
<content-type id="cxxSource" name="%cxxSourceName"
|
<content-type id="cxxSource" name="%cxxSourceName"
|
||||||
base-type="org.eclipse.cdt.core.cSource"
|
base-type="org.eclipse.cdt.core.cSource"
|
||||||
|
file-extensions="C,cpp,cxx,cc,c++"
|
||||||
priority="high"/>
|
priority="high"/>
|
||||||
<!-- declares a content type for C++ header files -->
|
<!-- declares a content type for C++ header files -->
|
||||||
<content-type id="cxxHeader" name="%cxxHeaderName"
|
<content-type id="cxxHeader" name="%cxxHeaderName"
|
||||||
base-type="org.eclipse.cdt.core.cxxSource"
|
base-type="org.eclipse.cdt.core.cxxSource"
|
||||||
|
file-extensions="h,hpp,hh,hxx"
|
||||||
priority="high"/>
|
priority="high"/>
|
||||||
<!-- declares a content type for ASM Source files -->
|
<!-- declares a content type for ASM Source files -->
|
||||||
<content-type id="asmSource" name="%asmSourceName"
|
<content-type id="asmSource" name="%asmSourceName"
|
||||||
base-type="org.eclipse.core.runtime.text"
|
base-type="org.eclipse.core.runtime.text"
|
||||||
|
file-extensions="s,asm"
|
||||||
priority="high"/>
|
priority="high"/>
|
||||||
</extension>
|
|
||||||
|
|
||||||
<extension point="org.eclipse.core.runtime.contentTypes">
|
|
||||||
<file-association
|
|
||||||
content-type="org.eclipse.cdt.core.cSource"
|
|
||||||
file-extensions="c"/>
|
|
||||||
</extension>
|
</extension>
|
||||||
|
|
||||||
<extension point="org.eclipse.core.runtime.contentTypes">
|
<!-- the reserved filenames by the C++ standard -->
|
||||||
<file-association
|
|
||||||
content-type="org.eclipse.cdt.core.cxxSource"
|
|
||||||
file-extensions="C,cpp,cxx,cc,c++"/>
|
|
||||||
</extension>
|
|
||||||
|
|
||||||
<extension point="org.eclipse.core.runtime.contentTypes">
|
|
||||||
<file-association
|
|
||||||
content-type="org.eclipse.cdt.core.asmSource"
|
|
||||||
file-extensions="s,asm"/>
|
|
||||||
</extension>
|
|
||||||
|
|
||||||
<extension point="org.eclipse.core.runtime.contentTypes">
|
|
||||||
<file-association
|
|
||||||
content-type="org.eclipse.cdt.core.cHeader"
|
|
||||||
file-extensions="h"/>
|
|
||||||
</extension>
|
|
||||||
|
|
||||||
<extension point="org.eclipse.core.runtime.contentTypes">
|
|
||||||
<file-association
|
|
||||||
content-type="org.eclipse.cdt.core.cxxHeader"
|
|
||||||
file-extensions="hpp,hh,hxx"/>
|
|
||||||
</extension>
|
|
||||||
|
|
||||||
<!-- the reserved filenames by the C++ standard -->
|
|
||||||
<extension point="org.eclipse.core.runtime.contentTypes">
|
<extension point="org.eclipse.core.runtime.contentTypes">
|
||||||
<file-association
|
<file-association
|
||||||
content-type="org.eclipse.cdt.core.cxxHeader"
|
content-type="org.eclipse.cdt.core.cxxHeader"
|
||||||
|
|
|
@ -47,6 +47,7 @@ import org.eclipse.core.resources.IProjectDescription;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.IWorkspace;
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
import org.eclipse.core.resources.IWorkspaceRunnable;
|
import org.eclipse.core.resources.IWorkspaceRunnable;
|
||||||
|
import org.eclipse.core.resources.ProjectScope;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IConfigurationElement;
|
import org.eclipse.core.runtime.IConfigurationElement;
|
||||||
|
@ -62,8 +63,9 @@ import org.eclipse.core.runtime.Preferences;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.SubProgressMonitor;
|
import org.eclipse.core.runtime.SubProgressMonitor;
|
||||||
import org.eclipse.core.runtime.content.IContentType;
|
import org.eclipse.core.runtime.content.IContentType;
|
||||||
import org.eclipse.core.runtime.content.IContentTypeManager;
|
|
||||||
import org.eclipse.core.runtime.content.IContentTypeMatcher;
|
import org.eclipse.core.runtime.content.IContentTypeMatcher;
|
||||||
|
import org.eclipse.core.runtime.content.IContentTypeSettings;
|
||||||
|
import org.eclipse.core.runtime.preferences.IScopeContext;
|
||||||
import org.osgi.framework.BundleContext;
|
import org.osgi.framework.BundleContext;
|
||||||
|
|
||||||
public class CCorePlugin extends Plugin {
|
public class CCorePlugin extends Plugin {
|
||||||
|
@ -880,26 +882,114 @@ public class CCorePlugin extends Plugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function, returning the contenttype for a filename
|
* Returns the content type for a filename. The method respects project
|
||||||
* @param project
|
* project specific content type definitions. The lookup prefers case-
|
||||||
* @param name
|
* sensitive matches over the others.
|
||||||
* @return
|
* @param project a project with possible project specific settings. Can be <code>null</code>
|
||||||
|
* @param filename a filename to compute the content type for
|
||||||
|
* @return the content type found or <code>null</code>
|
||||||
*/
|
*/
|
||||||
public static IContentType getContentType(IProject project, String filename) {
|
public static IContentType getContentType(IProject project, String filename) {
|
||||||
// Always try in the workspace (for multi-language support)
|
IContentTypeMatcher matcher= null;
|
||||||
// try with the project settings
|
IScopeContext scopeCtx= null;
|
||||||
|
boolean preferCpp= true;
|
||||||
if (project != null) {
|
if (project != null) {
|
||||||
|
// try with the project settings
|
||||||
try {
|
try {
|
||||||
IContentTypeMatcher matcher = project.getContentTypeMatcher();
|
matcher= project.getContentTypeMatcher();
|
||||||
IContentType ct = matcher.findContentTypeFor(filename);
|
scopeCtx= new ProjectScope(project);
|
||||||
if (ct != null) return ct;
|
preferCpp= CoreModel.hasCCNature(project);
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
// ignore.
|
// fallback to workspace wide definitions.
|
||||||
|
matcher= Platform.getContentTypeManager();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Try in the workspace.
|
else {
|
||||||
IContentTypeManager manager = Platform.getContentTypeManager();
|
matcher= Platform.getContentTypeManager();
|
||||||
return manager.findContentTypeFor(filename);
|
}
|
||||||
|
|
||||||
|
IContentType[] cts = matcher.findContentTypesFor(filename);
|
||||||
|
switch (cts.length) {
|
||||||
|
case 0:
|
||||||
|
return null;
|
||||||
|
case 1:
|
||||||
|
return cts[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
int maxPossiblePriority= scopeCtx == null ? 11 : 101;
|
||||||
|
int bestPriority= -1;
|
||||||
|
IContentType bestResult= null;
|
||||||
|
|
||||||
|
for (int i = 0; i < cts.length; i++) {
|
||||||
|
IContentType candidate= cts[i];
|
||||||
|
int priority= 0;
|
||||||
|
try {
|
||||||
|
if (scopeCtx != null) {
|
||||||
|
IContentTypeSettings settings= candidate.getSettings(scopeCtx);
|
||||||
|
if (isStrictlyAssociatedWith(settings, filename)) {
|
||||||
|
priority= 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (priority == 0 && bestPriority < 100) {
|
||||||
|
if (isStrictlyAssociatedWith(candidate, filename)) {
|
||||||
|
priority= 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isPreferredContentType(candidate, preferCpp)) {
|
||||||
|
priority+= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (CoreException e) {
|
||||||
|
// skip it
|
||||||
|
}
|
||||||
|
if (priority > bestPriority) {
|
||||||
|
if (priority == maxPossiblePriority) {
|
||||||
|
return candidate;
|
||||||
|
}
|
||||||
|
bestPriority= priority;
|
||||||
|
bestResult= candidate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bestResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isPreferredContentType(IContentType candidate, boolean preferCpp) {
|
||||||
|
while (candidate != null) {
|
||||||
|
String id= candidate.getId();
|
||||||
|
boolean isCpp= CONTENT_TYPE_CXXHEADER.equals(id) || CONTENT_TYPE_CXXSOURCE.equals(id);
|
||||||
|
if (isCpp) {
|
||||||
|
return preferCpp;
|
||||||
|
}
|
||||||
|
boolean isC= CONTENT_TYPE_CHEADER.equals(id) || CONTENT_TYPE_CSOURCE.equals(id);
|
||||||
|
if (isC) {
|
||||||
|
return !preferCpp;
|
||||||
|
}
|
||||||
|
candidate= candidate.getBaseType();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isStrictlyAssociatedWith(IContentTypeSettings settings, String filename) {
|
||||||
|
String[] namespecs= settings.getFileSpecs(IContentType.FILE_NAME_SPEC);
|
||||||
|
for (int i = 0; i < namespecs.length; i++) {
|
||||||
|
String name = namespecs[i];
|
||||||
|
if (name.equals(filename)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// check the file extensions only
|
||||||
|
int dotPosition = filename.lastIndexOf('.');
|
||||||
|
if (dotPosition >= 0 && dotPosition < filename.length()-1) {
|
||||||
|
String fileExtension= filename.substring(dotPosition + 1);
|
||||||
|
String[] extensions= settings.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
||||||
|
for (int i = 0; i < extensions.length; i++) {
|
||||||
|
String ext = extensions[i];
|
||||||
|
if (ext.equals(fileExtension)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -254,7 +254,7 @@ public class InternalASTServiceProvider implements IASTServiceProvider {
|
||||||
} else if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(id)) {
|
} else if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(id)) {
|
||||||
return ParserLanguage.CPP;
|
return ParserLanguage.CPP;
|
||||||
} else if (CCorePlugin.CONTENT_TYPE_CHEADER.equals(id)) {
|
} else if (CCorePlugin.CONTENT_TYPE_CHEADER.equals(id)) {
|
||||||
return ParserLanguage.CPP; // <============== is that right ? should not this be C ?
|
return ParserLanguage.C;
|
||||||
} else if (CCorePlugin.CONTENT_TYPE_CSOURCE.equals(id)) {
|
} else if (CCorePlugin.CONTENT_TYPE_CSOURCE.equals(id)) {
|
||||||
return ParserLanguage.C;
|
return ParserLanguage.C;
|
||||||
} else if (CCorePlugin.CONTENT_TYPE_ASMSOURCE.equals(id)) {
|
} else if (CCorePlugin.CONTENT_TYPE_ASMSOURCE.equals(id)) {
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
* QNX Software System
|
* QNX Software System
|
||||||
* Anton Leherbauer (Wind River Systems)
|
* Anton Leherbauer (Wind River Systems)
|
||||||
|
* Markus Schorn (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.ui.editor;
|
package org.eclipse.cdt.internal.ui.editor;
|
||||||
|
|
||||||
|
@ -17,7 +18,6 @@ import java.util.Iterator;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.content.IContentType;
|
import org.eclipse.core.runtime.content.IContentType;
|
||||||
import org.eclipse.jface.action.Action;
|
import org.eclipse.jface.action.Action;
|
||||||
|
@ -114,7 +114,6 @@ import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.CCorePreferenceConstants;
|
import org.eclipse.cdt.core.CCorePreferenceConstants;
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.ISourceRange;
|
import org.eclipse.cdt.core.model.ISourceRange;
|
||||||
import org.eclipse.cdt.core.model.ISourceReference;
|
import org.eclipse.cdt.core.model.ISourceReference;
|
||||||
|
@ -1461,12 +1460,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
ITranslationUnit unit = mgr.getWorkingCopy(getEditorInput());
|
ITranslationUnit unit = mgr.getWorkingCopy(getEditorInput());
|
||||||
String fileType = LANGUAGE_CPP;
|
String fileType = LANGUAGE_CPP;
|
||||||
if (unit != null) {
|
if (unit != null) {
|
||||||
// default is C++ unless the project as C Nature Only
|
fileType= unit.isCLanguage() ? LANGUAGE_C : LANGUAGE_CPP;
|
||||||
// we can then be smarter.
|
|
||||||
IProject p = unit.getCProject().getProject();
|
|
||||||
if (!CoreModel.hasCCNature(p)) {
|
|
||||||
fileType = unit.isCXXLanguage() ? LANGUAGE_CPP : LANGUAGE_C;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fAnnotationAccess = createAnnotationAccess();
|
fAnnotationAccess = createAnnotationAccess();
|
||||||
|
|
|
@ -151,16 +151,13 @@ public class IBViewPart extends ViewPart
|
||||||
public void setInput(ITranslationUnit input) {
|
public void setInput(ITranslationUnit input) {
|
||||||
if (input == null) {
|
if (input == null) {
|
||||||
setMessage(IBMessages.IBViewPart_instructionMessage);
|
setMessage(IBMessages.IBViewPart_instructionMessage);
|
||||||
|
fTreeViewer.setInput(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fShowsMessage= false;
|
fShowsMessage= false;
|
||||||
boolean isHeader= false;
|
boolean isHeader= input.isHeaderUnit();
|
||||||
String contentType= input.getContentTypeId();
|
|
||||||
if (contentType.equals(CCorePlugin.CONTENT_TYPE_CXXHEADER) ||
|
|
||||||
contentType.equals(CCorePlugin.CONTENT_TYPE_CHEADER)) {
|
|
||||||
isHeader= true;
|
|
||||||
}
|
|
||||||
fTreeViewer.setInput(null);
|
fTreeViewer.setInput(null);
|
||||||
if (!isHeader) {
|
if (!isHeader) {
|
||||||
fContentProvider.setComputeIncludedBy(isHeader);
|
fContentProvider.setComputeIncludedBy(isHeader);
|
||||||
|
|
|
@ -7,38 +7,13 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM Corp. - Rational Software - initial implementation
|
* IBM Corp. - Rational Software - initial implementation
|
||||||
|
* Markus Schorn (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.ui.search.actions;
|
package org.eclipse.cdt.internal.ui.search.actions;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
|
||||||
import org.eclipse.cdt.core.model.IWorkingCopy;
|
|
||||||
import org.eclipse.cdt.core.parser.CodeReader;
|
|
||||||
import org.eclipse.cdt.core.parser.IParser;
|
|
||||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
|
||||||
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
|
||||||
import org.eclipse.cdt.core.parser.Keywords;
|
|
||||||
import org.eclipse.cdt.core.parser.NullSourceElementRequestor;
|
|
||||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
|
||||||
import org.eclipse.cdt.core.parser.ParserFactoryError;
|
|
||||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
|
||||||
import org.eclipse.cdt.core.parser.ParserMode;
|
|
||||||
import org.eclipse.cdt.core.parser.ParserUtil;
|
|
||||||
import org.eclipse.cdt.core.parser.ScannerInfo;
|
|
||||||
import org.eclipse.cdt.core.resources.FileStorage;
|
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
|
||||||
import org.eclipse.cdt.internal.ui.editor.ExternalSearchEditor;
|
|
||||||
import org.eclipse.cdt.internal.ui.search.CSearchMessages;
|
|
||||||
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
|
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IMarker;
|
import org.eclipse.core.resources.IMarker;
|
||||||
import org.eclipse.core.resources.IProject;
|
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
@ -61,6 +36,18 @@ import org.eclipse.ui.ide.IDE;
|
||||||
import org.eclipse.ui.texteditor.IDocumentProvider;
|
import org.eclipse.ui.texteditor.IDocumentProvider;
|
||||||
import org.eclipse.ui.texteditor.ITextEditor;
|
import org.eclipse.ui.texteditor.ITextEditor;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.parser.Keywords;
|
||||||
|
import org.eclipse.cdt.core.resources.FileStorage;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.ExternalSearchEditor;
|
||||||
|
import org.eclipse.cdt.internal.ui.search.CSearchMessages;
|
||||||
|
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author aniefer
|
* @author aniefer
|
||||||
* Created on Jun 2, 2004
|
* Created on Jun 2, 2004
|
||||||
|
@ -90,60 +77,6 @@ public class SelectionParseAction extends Action {
|
||||||
fSite=site;
|
fSite=site;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IParser setupParser(IFile resourceFile) {
|
|
||||||
|
|
||||||
|
|
||||||
//Get the scanner info
|
|
||||||
IProject currentProject = resourceFile.getProject();
|
|
||||||
IScannerInfo scanInfo = new ScannerInfo();
|
|
||||||
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(currentProject);
|
|
||||||
if (provider != null){
|
|
||||||
IScannerInfo buildScanInfo = provider.getScannerInformation(resourceFile);
|
|
||||||
if (buildScanInfo != null){
|
|
||||||
scanInfo = new ScannerInfo(buildScanInfo.getDefinedSymbols(), buildScanInfo.getIncludePaths());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//C or CPP?
|
|
||||||
ParserLanguage language = CoreModel.hasCCNature(currentProject) ? ParserLanguage.CPP : ParserLanguage.C;
|
|
||||||
|
|
||||||
IWorkingCopy workingCopy = null;
|
|
||||||
if( fEditor.isDirty() ){
|
|
||||||
IWorkingCopy [] workingCopies = CUIPlugin.getSharedWorkingCopies();
|
|
||||||
if( workingCopies != null ){
|
|
||||||
for( int i = 0; i < workingCopies.length; i++ ){
|
|
||||||
if( workingCopies[i].getUnderlyingResource().equals( resourceFile ) ){
|
|
||||||
workingCopy = workingCopies[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
IParser parser = null;
|
|
||||||
CodeReader reader = null;
|
|
||||||
try {
|
|
||||||
if( workingCopy == null )
|
|
||||||
reader = new CodeReader(resourceFile.getLocation().toOSString(), resourceFile.getCharset() );
|
|
||||||
else
|
|
||||||
reader = new CodeReader(resourceFile.getLocation().toOSString(), workingCopy.getContents());
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch ( CoreException e ) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
parser = ParserFactory.createParser(
|
|
||||||
ParserFactory.createScanner( reader, scanInfo, ParserMode.SELECTION_PARSE, language, new NullSourceElementRequestor(), ParserUtil.getScannerLogService(), null ),
|
|
||||||
new NullSourceElementRequestor(), ParserMode.SELECTION_PARSE, language, ParserUtil.getParserLogService() );
|
|
||||||
|
|
||||||
} catch( ParserFactoryError pfe ){}
|
|
||||||
|
|
||||||
return parser;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void operationNotAvailable(final String message) {
|
protected void operationNotAvailable(final String message) {
|
||||||
// run the code to update the status line on the Display thread
|
// run the code to update the status line on the Display thread
|
||||||
// this way any other thread can invoke operationNotAvailable(String)
|
// this way any other thread can invoke operationNotAvailable(String)
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM Rational Software - Initial API and implementation
|
* IBM Rational Software - Initial API and implementation
|
||||||
|
* Markus Schorn (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||||
|
|
||||||
|
@ -15,9 +16,14 @@ import java.util.Arrays;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.jface.preference.IPreferenceStore;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.core.model.IWorkingCopy;
|
import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||||
import org.eclipse.cdt.core.parser.CodeReader;
|
import org.eclipse.cdt.core.parser.CodeReader;
|
||||||
import org.eclipse.cdt.core.parser.IMacro;
|
import org.eclipse.cdt.core.parser.IMacro;
|
||||||
|
@ -57,15 +63,13 @@ import org.eclipse.cdt.core.parser.ast.IASTNode.ILookupResult;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind;
|
import org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind;
|
||||||
import org.eclipse.cdt.core.parser.util.CharArrayObjectMap;
|
import org.eclipse.cdt.core.parser.util.CharArrayObjectMap;
|
||||||
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
|
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.core.CharOperation;
|
import org.eclipse.cdt.internal.core.CharOperation;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.ui.CUIMessages;
|
import org.eclipse.cdt.internal.ui.CUIMessages;
|
||||||
import org.eclipse.cdt.internal.ui.util.IDebugLogConstants;
|
import org.eclipse.cdt.internal.ui.util.IDebugLogConstants;
|
||||||
import org.eclipse.cdt.internal.ui.util.Util;
|
import org.eclipse.cdt.internal.ui.util.Util;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
|
||||||
import org.eclipse.core.resources.IProject;
|
|
||||||
import org.eclipse.core.resources.IResource;
|
|
||||||
import org.eclipse.core.runtime.IPath;
|
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -143,6 +147,7 @@ public class CompletionEngine implements RelevanceConstants {
|
||||||
}
|
}
|
||||||
private IASTCompletionNode parse(IWorkingCopy sourceUnit, int completionOffset){
|
private IASTCompletionNode parse(IWorkingCopy sourceUnit, int completionOffset){
|
||||||
// Get resource info
|
// Get resource info
|
||||||
|
ITranslationUnit tu= sourceUnit.getOriginalElement();
|
||||||
IResource currentResource = sourceUnit.getResource();
|
IResource currentResource = sourceUnit.getResource();
|
||||||
IPath realPath = currentResource.getLocation();
|
IPath realPath = currentResource.getLocation();
|
||||||
IProject project = currentResource.getProject();
|
IProject project = currentResource.getProject();
|
||||||
|
@ -158,7 +163,7 @@ public class CompletionEngine implements RelevanceConstants {
|
||||||
}
|
}
|
||||||
|
|
||||||
//C or CPP?
|
//C or CPP?
|
||||||
ParserLanguage language = CoreModel.hasCCNature(project) ? ParserLanguage.CPP : ParserLanguage.C;
|
ParserLanguage language = tu != null && tu.isCLanguage() ? ParserLanguage.C : ParserLanguage.CPP;
|
||||||
|
|
||||||
IParser parser = null;
|
IParser parser = null;
|
||||||
IScanner scanner = null;
|
IScanner scanner = null;
|
||||||
|
|
Loading…
Add table
Reference in a new issue