Initial commit of CDT code from QNX
1
core/org.eclipse.cdt.core/.cvsignore
Normal file
|
@ -0,0 +1 @@
|
||||||
|
bin
|
28
core/org.eclipse.cdt.core/.project
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>org.eclipse.cdt.core</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.pde.ManifestBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.pde.SchemaBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
<nature>org.eclipse.pde.PluginNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
10
core/org.eclipse.cdt.core/build.properties
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
################################################
|
||||||
|
#
|
||||||
|
# (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
################################################
|
||||||
|
source.cdt.jar = builder,\
|
||||||
|
index,\
|
||||||
|
model,\
|
||||||
|
src
|
78
core/org.eclipse.cdt.core/build.xml
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project name="org.eclipse.cdt.core" default="plugin.zip" basedir=".">
|
||||||
|
<target name="init">
|
||||||
|
<initTemplate/>
|
||||||
|
<property name="plugin" value="org.eclipse.cdt.core"/>
|
||||||
|
<property name="version" value="0.5.4"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="plugin.zip" depends="init">
|
||||||
|
<property name="destroot" value="${basedir}/_temp___"/>
|
||||||
|
<delete dir="${destroot}"/>
|
||||||
|
<mkdir dir="${destroot}"/>
|
||||||
|
<antcall target="jar"/>
|
||||||
|
<antcall target="bin"/>
|
||||||
|
<zip zipfile="${plugin}_${version}.zip" basedir="${destroot}"/>
|
||||||
|
<delete dir="${destroot}"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="cdt.jar" depends="init">
|
||||||
|
<property name="out" value="${basedir}/cdt.jar.bin"/>
|
||||||
|
<delete dir="${out}"/>
|
||||||
|
<mkdir dir="${out}"/>
|
||||||
|
<ant antfile="${template}" target="jar">
|
||||||
|
<property name="includes" value="CDTPlugin/"/>
|
||||||
|
<property name="excludes" value=""/>
|
||||||
|
<property name="compilePath" value="/export/WebSphere/eclipse/plugins/org.eclipse.core.boot/bin;/export/WebSphere/eclipse/plugins/org.eclipse.jdt.debug/jdimodel.jar;/export/WebSphere/eclipse/plugins/org.eclipse.ui/workbench.jar;/export/WebSphere/eclipse/plugins/org.eclipse.jdt.core/bin;/export/WebSphere/eclipse/plugins/org.eclipse.help/bin;/export/WebSphere/eclipse/plugins/org.eclipse.ui/bin;/export/WebSphere/eclipse/plugins/org.eclipse.debug.ui/dtui.jar;/export/WebSphere/eclipse/plugins/org.eclipse.jdt.launching/bin;/export/WebSphere/eclipse/plugins/org.apache.xerces/bin;/export/WebSphere/eclipse/plugins/org.eclipse.compare/bin;/export/WebSphere/eclipse/plugins/org.eclipse.swt/bin;/export/WebSphere/eclipse/plugins/org.eclipse.jdt.ui/bin;/export/WebSphere/eclipse/plugins/org.eclipse.jdt.core/jdtcore.jar;/export/WebSphere/eclipse/plugins/org.eclipse.debug.core/dtcore.jar;/export/WebSphere/eclipse/plugins/org.apache.xerces/xerces.jar;/export/WebSphere/eclipse/plugins/org.eclipse.jdt.debug/bin;/export/WebSphere/eclipse/plugins/org.eclipse.help/help.jar;/export/WebSphere/eclipse/plugins/org.eclipse.search/bin;/export/WebSphere/eclipse/plugins/org.eclipse.jdt.ui/jdt.jar;/export/WebSphere/eclipse/plugins/org.eclipse.swt/swt.jar;/export/WebSphere/eclipse/plugins/org.eclipse.core.runtime/runtime.jar;/export/WebSphere/eclipse/plugins/org.eclipse.core.resources/resources.jar;/export/WebSphere/eclipse/plugins/org.eclipse.core.runtime/bin;/export/WebSphere/eclipse/plugins/org.eclipse.jdt.debug/jdi.jar;/export/WebSphere/eclipse/plugins/org.eclipse.debug.core/bin;/export/WebSphere/eclipse/plugins/org.eclipse.jdt.launching/launching.jar;/export/WebSphere/eclipse/plugins/org.eclipse.core.boot/boot.jar;/export/WebSphere/eclipse/plugins/org.eclipse.search/search.jar;/export/WebSphere/eclipse/plugins/org.eclipse.debug.ui/bin;/export/WebSphere/eclipse/plugins/org.eclipse.compare/compare.jar;/export/WebSphere/eclipse/plugins/org.eclipse.core.resources/bin"/>
|
||||||
|
</ant>
|
||||||
|
<copy todir="${out}">
|
||||||
|
<fileset dir="CDTPlugin">
|
||||||
|
<include name="**"/>
|
||||||
|
<exclude name="**/*.java"/>
|
||||||
|
</fileset>
|
||||||
|
</copy>
|
||||||
|
<property name="dest" value="${destroot}/plugins/${plugin}_${version}"/>
|
||||||
|
<jar jarfile="cdt.jar" basedir="${out}"/>
|
||||||
|
<delete dir="${out}"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="jar" depends="init,cdt.jar">
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="cdt.src" depends="init">
|
||||||
|
<property name="auto.includes" value="CDTPlugin/**/*.java"/>
|
||||||
|
<property name="auto.excludes" value=""/>
|
||||||
|
<ant antfile="${template}" target="src">
|
||||||
|
<property name="includes" value="${auto.includes}"/>
|
||||||
|
<property name="excludes" value="${auto.excludes}"/>
|
||||||
|
<property name="dest" value="${destroot}/plugins/${plugin}_${version}"/>
|
||||||
|
</ant>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="src" depends="init,cdt.src">
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="bin" depends="init">
|
||||||
|
<property name="auto.includes" value="**"/>
|
||||||
|
<property name="auto.excludes" value="CDTPlugin/"/>
|
||||||
|
<ant antfile="${template}" target="bin">
|
||||||
|
<property name="includes" value="${auto.includes}"/>
|
||||||
|
<property name="excludes" value="${auto.excludes}"/>
|
||||||
|
<property name="dest" value="${destroot}/plugins/${plugin}_${version}"/>
|
||||||
|
</ant>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="log" depends="init">
|
||||||
|
<ant antfile="${template}" target="log">
|
||||||
|
<property name="dest" value="${destroot}/plugins/${plugin}_${version}"/>
|
||||||
|
</ant>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="clean" depends="init">
|
||||||
|
<ant antfile="${template}" target="clean">
|
||||||
|
<property name="jar" value="cdt.jar"/>
|
||||||
|
<property name="srczips" value="cdtsource.jar"/>
|
||||||
|
</ant>
|
||||||
|
<delete file="${plugin}_${version}.zip"/>
|
||||||
|
</target>
|
||||||
|
</project>
|
|
@ -0,0 +1,113 @@
|
||||||
|
package org.eclipse.cdt.core.builder;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.ICommand;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IProjectDescription;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
|
public class BuilderModel {
|
||||||
|
|
||||||
|
private static BuilderModel buildModel = null;
|
||||||
|
|
||||||
|
public final static String PLUGIN_ID = "org.eclipse.cdt.core";
|
||||||
|
public final static String BUILDER_NAME = "cbuilder";
|
||||||
|
public final static String BUILDER_ID = PLUGIN_ID + "." + BUILDER_NAME;
|
||||||
|
|
||||||
|
public static String getBuilderName () {
|
||||||
|
return BUILDER_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getBuilderId () {
|
||||||
|
return BUILDER_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IBuildPath getBuildPath(IProject project) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBuildPath(IProject project, IBuildPath bp) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addBuildListener () {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeBuildListener() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void build(IProject project, IPath workingDir, String[] args) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds default C Builder.
|
||||||
|
*/
|
||||||
|
public void addCToBuildSpec(IProject project) throws CoreException {
|
||||||
|
addToBuildSpec(project, getBuilderId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a builder to the build spec for the given project.
|
||||||
|
*/
|
||||||
|
public void addToBuildSpec(IProject project, String builderID) throws CoreException {
|
||||||
|
IProjectDescription description = project.getDescription();
|
||||||
|
ICommand[] commands = description.getBuildSpec();
|
||||||
|
ICommand command = null;
|
||||||
|
for (int i = 0; i < commands.length; i++) {
|
||||||
|
if (commands[i].getBuilderName().equals(builderID)) {
|
||||||
|
command = commands[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (command == null) {
|
||||||
|
command = description.newCommand();
|
||||||
|
command.setBuilderName(builderID);
|
||||||
|
|
||||||
|
// Add a build spec before other builders (1FWJK7I)
|
||||||
|
ICommand[] newCommands = new ICommand[commands.length + 1];
|
||||||
|
System.arraycopy(commands, 0, newCommands, 1, commands.length);
|
||||||
|
newCommands[0] = command;
|
||||||
|
// Commit the spec change into the project
|
||||||
|
description.setBuildSpec(newCommands);
|
||||||
|
project.setDescription(description, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the default C Builder.
|
||||||
|
*/
|
||||||
|
public void removeCFromBuildSpec(IProject project) throws CoreException {
|
||||||
|
removeFromBuildSpec(project, getBuilderId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the given builder from the build spec for the given project.
|
||||||
|
*/
|
||||||
|
public void removeFromBuildSpec(IProject project, String builderID) throws CoreException {
|
||||||
|
IProjectDescription description = project.getDescription();
|
||||||
|
ICommand[] commands = description.getBuildSpec();
|
||||||
|
for (int i = 0; i < commands.length; ++i) {
|
||||||
|
if (commands[i].getBuilderName().equals(builderID)) {
|
||||||
|
ICommand[] newCommands = new ICommand[commands.length - 1];
|
||||||
|
System.arraycopy(commands, 0, newCommands, 0, i);
|
||||||
|
System.arraycopy(commands, i + 1, newCommands, i, commands.length - i - 1);
|
||||||
|
description.setBuildSpec(newCommands);
|
||||||
|
project.setDescription(description, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private BuilderModel() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BuilderModel getDefault() {
|
||||||
|
if (buildModel == null) {
|
||||||
|
buildModel = new BuilderModel();
|
||||||
|
}
|
||||||
|
return buildModel;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
package org.eclipse.cdt.core.builder;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A BuildPath can contain the following:<ul>
|
||||||
|
* <li> EXTRA_INCVPATH: a list of path to look for include files
|
||||||
|
* <li> EXTRA_LIBVPATH: a list of path to search for libraries
|
||||||
|
* <li> EXTRA_SRCVPATH: a list of path to search for files
|
||||||
|
* <li> LIBS: a list of libraries to link
|
||||||
|
|
||||||
|
* <li> CPPFLAGS: C Preprocessor options
|
||||||
|
* <li> CPP: C Preprocessor cmd
|
||||||
|
|
||||||
|
* <li> CFLAGS: C options
|
||||||
|
* <li> CC: C cmd
|
||||||
|
|
||||||
|
* <li> CXXFLAGS: C++ Preprocessor options
|
||||||
|
* <li> CXX: C++ cmd
|
||||||
|
|
||||||
|
* <li> ARFLAGS: archive options
|
||||||
|
* <li> AR: archiver cmd
|
||||||
|
|
||||||
|
* <li> LDFLAGS: linker options
|
||||||
|
* <li> LD: linker cmd
|
||||||
|
|
||||||
|
* <li> ASFLAGS: assembly options
|
||||||
|
* <li> AS: assembly cmd
|
||||||
|
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface IBuildPath {
|
||||||
|
|
||||||
|
public String[] getCPPOpts();
|
||||||
|
public String[] getCPPFlags();
|
||||||
|
public void setCPP(IPath p);
|
||||||
|
public void setCPPOpts(String[] s);
|
||||||
|
public void setCPPFlags(String[] s);
|
||||||
|
|
||||||
|
public IPath getCXX();
|
||||||
|
public String[] getCXXOPT();
|
||||||
|
public String[] getCXXFlags();
|
||||||
|
public void setCXX(IPath p);
|
||||||
|
public void setCXXOpts(String[] s);
|
||||||
|
public void setCXXFlags(String[] s);
|
||||||
|
|
||||||
|
public IPath getCC();
|
||||||
|
public String[] getCFLAGS();
|
||||||
|
public String[] getCOpts();
|
||||||
|
public void setCFLAGS(String[] s);
|
||||||
|
public void setCOpts(String[] s);
|
||||||
|
public void setCC(IPath p);
|
||||||
|
|
||||||
|
public IPath getAS();
|
||||||
|
public String[] getASFlags();
|
||||||
|
public String[] getASOpts();
|
||||||
|
public void getAS(IPath p);
|
||||||
|
public void getASOpts(String[] s);
|
||||||
|
public void getASFlags(String[] s);
|
||||||
|
|
||||||
|
public IPath getLD();
|
||||||
|
public String[] getLDOpts();
|
||||||
|
public String[] getLDFlags();
|
||||||
|
public void setLD(IPath p);
|
||||||
|
public void setLDOpts(String[] s);
|
||||||
|
public void setLDFlags(String[] s);
|
||||||
|
|
||||||
|
public IPath getAR();
|
||||||
|
public String[] getARFlags();
|
||||||
|
public String[] getAROpts();
|
||||||
|
public void setAR(IPath p);
|
||||||
|
public void setAROpts(String[] s);
|
||||||
|
public void setARFlags(String[] s);
|
||||||
|
|
||||||
|
public IPath[] getIncVPath();
|
||||||
|
public void setIncVPath(IPath[] p);
|
||||||
|
|
||||||
|
public IPath[] getLibs();
|
||||||
|
public void setLibs(IPath[] p);
|
||||||
|
|
||||||
|
public IPath[] getLibVPath();
|
||||||
|
public void setLibVPath(IPath[] p);
|
||||||
|
|
||||||
|
public IPath[] getSRCVPath();
|
||||||
|
public void setSRCVPath(IPath[] p);
|
||||||
|
}
|
BIN
core/org.eclipse.cdt.core/icons/full/clcl16/alphab_sort_co.gif
Normal file
After Width: | Height: | Size: 224 B |
BIN
core/org.eclipse.cdt.core/icons/full/clcl16/clear_co.gif
Normal file
After Width: | Height: | Size: 162 B |
BIN
core/org.eclipse.cdt.core/icons/full/clcl16/open_incl.gif
Normal file
After Width: | Height: | Size: 155 B |
BIN
core/org.eclipse.cdt.core/icons/full/clcl16/shift_l_edit.gif
Normal file
After Width: | Height: | Size: 146 B |
BIN
core/org.eclipse.cdt.core/icons/full/clcl16/shift_r_edit.gif
Normal file
After Width: | Height: | Size: 149 B |
BIN
core/org.eclipse.cdt.core/icons/full/ctool16/newcprj_wiz.gif
Normal file
After Width: | Height: | Size: 360 B |
BIN
core/org.eclipse.cdt.core/icons/full/ctool16/newfile_wiz.gif
Normal file
After Width: | Height: | Size: 227 B |
BIN
core/org.eclipse.cdt.core/icons/full/cview16/buildconsole.gif
Normal file
After Width: | Height: | Size: 175 B |
BIN
core/org.eclipse.cdt.core/icons/full/cview16/c_pers.gif
Normal file
After Width: | Height: | Size: 245 B |
BIN
core/org.eclipse.cdt.core/icons/full/dlcl16/alphab_sort_co.gif
Normal file
After Width: | Height: | Size: 99 B |
BIN
core/org.eclipse.cdt.core/icons/full/dlcl16/clear_co.gif
Normal file
After Width: | Height: | Size: 91 B |
BIN
core/org.eclipse.cdt.core/icons/full/dlcl16/open_incl.gif
Normal file
After Width: | Height: | Size: 90 B |
BIN
core/org.eclipse.cdt.core/icons/full/dlcl16/shift_l_edit.gif
Normal file
After Width: | Height: | Size: 92 B |
BIN
core/org.eclipse.cdt.core/icons/full/dlcl16/shift_r_edit.gif
Normal file
After Width: | Height: | Size: 90 B |
BIN
core/org.eclipse.cdt.core/icons/full/dtool16/newcprj_wiz.gif
Normal file
After Width: | Height: | Size: 104 B |
BIN
core/org.eclipse.cdt.core/icons/full/dtool16/newfile_wiz.gif
Normal file
After Width: | Height: | Size: 104 B |
BIN
core/org.eclipse.cdt.core/icons/full/elcl16/alphab_sort_co.gif
Normal file
After Width: | Height: | Size: 160 B |
BIN
core/org.eclipse.cdt.core/icons/full/elcl16/clear_co.gif
Normal file
After Width: | Height: | Size: 122 B |
BIN
core/org.eclipse.cdt.core/icons/full/elcl16/open_incl.gif
Normal file
After Width: | Height: | Size: 122 B |
BIN
core/org.eclipse.cdt.core/icons/full/elcl16/shift_l_edit.gif
Normal file
After Width: | Height: | Size: 118 B |
BIN
core/org.eclipse.cdt.core/icons/full/elcl16/shift_r_edit.gif
Normal file
After Width: | Height: | Size: 118 B |
BIN
core/org.eclipse.cdt.core/icons/full/etool16/newcprj_wiz.gif
Normal file
After Width: | Height: | Size: 183 B |
BIN
core/org.eclipse.cdt.core/icons/full/etool16/newfile_wiz.gif
Normal file
After Width: | Height: | Size: 173 B |
BIN
core/org.eclipse.cdt.core/icons/full/eview16/buildconsole.gif
Normal file
After Width: | Height: | Size: 175 B |
BIN
core/org.eclipse.cdt.core/icons/full/eview16/c_pers.gif
Normal file
After Width: | Height: | Size: 177 B |
BIN
core/org.eclipse.cdt.core/icons/full/obj16/c_file_obj.gif
Normal file
After Width: | Height: | Size: 165 B |
BIN
core/org.eclipse.cdt.core/icons/full/obj16/class_obj.gif
Normal file
After Width: | Height: | Size: 160 B |
BIN
core/org.eclipse.cdt.core/icons/full/obj16/define_obj.gif
Normal file
After Width: | Height: | Size: 109 B |
BIN
core/org.eclipse.cdt.core/icons/full/obj16/field_obj.gif
Normal file
After Width: | Height: | Size: 76 B |
BIN
core/org.eclipse.cdt.core/icons/full/obj16/function_obj.gif
Normal file
After Width: | Height: | Size: 97 B |
BIN
core/org.eclipse.cdt.core/icons/full/obj16/include_obj.gif
Normal file
After Width: | Height: | Size: 114 B |
BIN
core/org.eclipse.cdt.core/icons/full/obj16/struct_obj.gif
Normal file
After Width: | Height: | Size: 133 B |
BIN
core/org.eclipse.cdt.core/icons/full/obj16/union_obj.gif
Normal file
After Width: | Height: | Size: 173 B |
BIN
core/org.eclipse.cdt.core/icons/full/ovr16/c_ovr.gif
Normal file
After Width: | Height: | Size: 100 B |
BIN
core/org.eclipse.cdt.core/icons/full/wizban/c_app_wiz.gif
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
core/org.eclipse.cdt.core/icons/full/wizban/newcprj_wiz.gif
Normal file
After Width: | Height: | Size: 3.1 KiB |
|
@ -0,0 +1,78 @@
|
||||||
|
package org.eclipse.cdt.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
|
||||||
|
|
||||||
|
public interface ITagEntry {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Name of tag.
|
||||||
|
*/
|
||||||
|
public String getTagName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Path of source file containing definition of tag.
|
||||||
|
*/
|
||||||
|
public String getFileName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IFile of source file containing definition of tag.
|
||||||
|
*/
|
||||||
|
public IFile getIFile();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address for locating tag in source file
|
||||||
|
* (may be null if not present).
|
||||||
|
*/
|
||||||
|
public String getPattern();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* line number in source file of tag definition
|
||||||
|
* (may be zero if not known).
|
||||||
|
*/
|
||||||
|
public int getLineNumber();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kind of tag.
|
||||||
|
*/
|
||||||
|
public int getKind();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language of the file.
|
||||||
|
*/
|
||||||
|
public String getLanguage();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is tag of file-limited scope?
|
||||||
|
*/
|
||||||
|
public boolean hasFileScope();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return base classes.
|
||||||
|
*/
|
||||||
|
public String[] getInherits();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Access Control of structure/class/union members.
|
||||||
|
*/
|
||||||
|
public int getAccessControl();
|
||||||
|
|
||||||
|
// implementation:
|
||||||
|
public int getImplementation();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class name of the tag if a member,
|
||||||
|
* null if not a member of a struct/class/union.
|
||||||
|
*/
|
||||||
|
public String getClassName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the original tag line.
|
||||||
|
*/
|
||||||
|
public String getLine();
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
package org.eclipse.cdt.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.core.index.IndexManager;
|
||||||
|
|
||||||
|
public class IndexModel {
|
||||||
|
|
||||||
|
static IndexModel indexModel = null;
|
||||||
|
static IndexManager manager = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search Project for tag symbol.
|
||||||
|
*/
|
||||||
|
public ITagEntry[] query (IProject project, String tag) {
|
||||||
|
return manager.query(project, tag, true, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search Project for tag symbol.
|
||||||
|
*/
|
||||||
|
public ITagEntry[] query (IProject project, String tag, boolean ignoreCase, boolean exactMatch) {
|
||||||
|
return manager.query(project, tag, ignoreCase, exactMatch);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a resource to be index. Containers(Folder, projects)
|
||||||
|
* resources are recusively search for C Files as define by
|
||||||
|
* CoreModel.isTranslationUnit().
|
||||||
|
*/
|
||||||
|
public void addResource(IResource resource) {
|
||||||
|
manager.addResource(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add all the C files recurively going to all projects
|
||||||
|
* identified as C Projects by CoreModel.
|
||||||
|
*/
|
||||||
|
public void addAll () {
|
||||||
|
manager.addAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize default index Model.
|
||||||
|
*/
|
||||||
|
public static IndexModel getDefault() {
|
||||||
|
if (indexModel == null) {
|
||||||
|
indexModel = new IndexModel();
|
||||||
|
manager = IndexManager.getDefault();
|
||||||
|
}
|
||||||
|
return indexModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IndexModel () {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,179 @@
|
||||||
|
package org.eclipse.cdt.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
public class TagFlags {
|
||||||
|
|
||||||
|
public final static int T_UNKNOWN = 0;
|
||||||
|
public final static int T_CLASS = 1;
|
||||||
|
public final static int T_MACRO = 2;
|
||||||
|
public final static int T_ENUMERATOR = 3;
|
||||||
|
public final static int T_FUNCTION = 4;
|
||||||
|
public final static int T_ENUM = 5;
|
||||||
|
public final static int T_MEMBER = 6;
|
||||||
|
public final static int T_NAMESPACE = 7;
|
||||||
|
public final static int T_PROTOTYPE = 8;
|
||||||
|
public final static int T_STRUCT = 9;
|
||||||
|
public final static int T_TYPEDEF = 10;
|
||||||
|
public final static int T_UNION = 11;
|
||||||
|
public final static int T_VARIABLE = 12;
|
||||||
|
public final static int T_EXTERNVAR = 13;
|
||||||
|
|
||||||
|
public final static int T_PRIVATE = 14;
|
||||||
|
public final static int T_PROTECTED = 15;
|
||||||
|
public final static int T_PUBLIC = 16;
|
||||||
|
public final static int T_FRIEND = 17;
|
||||||
|
public final static int T_VIRTUAL = 18;
|
||||||
|
public final static int T_ABSTRACT = 19;
|
||||||
|
|
||||||
|
private TagFlags() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isUnknown(int k) {
|
||||||
|
return k == T_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isClass(int k) {
|
||||||
|
return k == T_CLASS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isMacro(int k) {
|
||||||
|
return k == T_MACRO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isEnumerator(int k) {
|
||||||
|
return k == T_ENUMERATOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isFunction(int k) {
|
||||||
|
return k == T_FUNCTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isEnum(int k) {
|
||||||
|
return k == T_ENUM;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isMember(int k) {
|
||||||
|
return k == T_MEMBER;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isNamespace(int k) {
|
||||||
|
return k == T_NAMESPACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isPrototype(int k) {
|
||||||
|
return k == T_PROTOTYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isStruct(int k) {
|
||||||
|
return k == T_STRUCT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isTypedef(int k) {
|
||||||
|
return k == T_TYPEDEF;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isUnion(int k) {
|
||||||
|
return k == T_UNION;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isVariable(int k) {
|
||||||
|
return k == T_VARIABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isExternVar(int k) {
|
||||||
|
return k == T_EXTERNVAR;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int value(String flag) {
|
||||||
|
if (flag == null) {
|
||||||
|
return T_UNKNOWN;
|
||||||
|
} else if (flag.equals("class")) {
|
||||||
|
return T_CLASS;
|
||||||
|
} else if (flag.equals("macro")) {
|
||||||
|
return T_MACRO;
|
||||||
|
} else if (flag.equals("enumerator")) {
|
||||||
|
return T_ENUMERATOR;
|
||||||
|
} else if (flag.equals("function")) {
|
||||||
|
return T_FUNCTION;
|
||||||
|
} else if (flag.equals("enum")) {
|
||||||
|
return T_ENUM;
|
||||||
|
} else if (flag.equals("member")) {
|
||||||
|
return T_MEMBER;
|
||||||
|
} else if (flag.equals("namespace")) {
|
||||||
|
return T_NAMESPACE;
|
||||||
|
} else if (flag.equals("prototype")) {
|
||||||
|
return T_PROTOTYPE;
|
||||||
|
} else if (flag.equals("struct")) {
|
||||||
|
return T_STRUCT;
|
||||||
|
} else if (flag.equals("typedef")) {
|
||||||
|
return T_TYPEDEF;
|
||||||
|
} else if (flag.equals("union")) {
|
||||||
|
return T_UNION;
|
||||||
|
} else if (flag.equals("variable")) {
|
||||||
|
return T_VARIABLE;
|
||||||
|
} else if (flag.equals("externvar")) {
|
||||||
|
return T_EXTERNVAR;
|
||||||
|
} else if (flag.equals("public")) {
|
||||||
|
return T_PUBLIC;
|
||||||
|
} else if (flag.equals("private")) {
|
||||||
|
return T_PRIVATE;
|
||||||
|
} else if (flag.equals("protected")) {
|
||||||
|
return T_PROTECTED;
|
||||||
|
} else if (flag.equals("virtual")) {
|
||||||
|
return T_VIRTUAL;
|
||||||
|
} else if (flag.equals("abstract")) {
|
||||||
|
return T_ABSTRACT;
|
||||||
|
} else if (flag.equals("friend")) {
|
||||||
|
return T_FRIEND;
|
||||||
|
}
|
||||||
|
return T_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String value(int flag) {
|
||||||
|
if (flag == T_CLASS) {
|
||||||
|
return "class";
|
||||||
|
} else if (flag == T_MACRO) {
|
||||||
|
return "macro";
|
||||||
|
} else if (flag == T_ENUMERATOR) {
|
||||||
|
return "enumerator";
|
||||||
|
} else if (flag == T_FUNCTION) {
|
||||||
|
return "function";
|
||||||
|
} else if (flag == T_ENUM) {
|
||||||
|
return "enum";
|
||||||
|
} else if (flag == T_MEMBER) {
|
||||||
|
return "member";
|
||||||
|
} else if (flag == T_NAMESPACE) {
|
||||||
|
return "namespace";
|
||||||
|
} else if (flag == T_PROTOTYPE) {
|
||||||
|
return "prototype";
|
||||||
|
} else if (flag == T_STRUCT) {
|
||||||
|
return "struct";
|
||||||
|
} else if (flag == T_TYPEDEF) {
|
||||||
|
return "typedef";
|
||||||
|
} else if (flag == T_UNION) {
|
||||||
|
return "union";
|
||||||
|
} else if (flag == T_VARIABLE) {
|
||||||
|
return "variable";
|
||||||
|
} else if (flag == T_EXTERNVAR) {
|
||||||
|
return "externvar";
|
||||||
|
} else if (flag == T_PUBLIC) {
|
||||||
|
return "public";
|
||||||
|
} else if (flag == T_PRIVATE) {
|
||||||
|
return "private";
|
||||||
|
} else if (flag == T_PROTECTED) {
|
||||||
|
return "protected";
|
||||||
|
} else if (flag == T_VIRTUAL) {
|
||||||
|
return "virtual";
|
||||||
|
} else if (flag == T_ABSTRACT) {
|
||||||
|
return "abstract";
|
||||||
|
} else if (flag == T_FRIEND) {
|
||||||
|
return "friend";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
package org.eclipse.cdt.internal.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.cdt.core.index.ITagEntry;
|
||||||
|
import org.eclipse.cdt.utils.spawner.ProcessFactory;
|
||||||
|
|
||||||
|
public class CTagsCmd {
|
||||||
|
|
||||||
|
public CTagsCmd() {
|
||||||
|
}
|
||||||
|
|
||||||
|
private void process(String filename, List list, IFile file) throws IOException {
|
||||||
|
|
||||||
|
BufferedReader stdout;
|
||||||
|
|
||||||
|
String[] args = {"ctags", "--excmd=pattern", "--format=2",
|
||||||
|
"--if0=yes", "--sort=no", "--extra=q",
|
||||||
|
"--fields=aiKlmnsz", "--line-directives=yes",
|
||||||
|
"--sort=no", "--kind-long", "--c-types=cdefgmnpstuvx",
|
||||||
|
"-f", "-", filename};
|
||||||
|
|
||||||
|
//Process ctags = Runtime.getRuntime().exec(args);
|
||||||
|
Process ctags = ProcessFactory.getFactory().exec(args);
|
||||||
|
//stdin = new BufferedWriter(new OutputStreamWriter(ctags.getOutputStream()));
|
||||||
|
stdout = new BufferedReader(new InputStreamReader(ctags.getInputStream()));
|
||||||
|
|
||||||
|
//System.out.println("Processing");
|
||||||
|
String line;
|
||||||
|
try {
|
||||||
|
while ((line = stdout.readLine()) != null) {
|
||||||
|
//System.out.println("ProcessingLine " + line);
|
||||||
|
CTagsEntry entry = new CTagsEntry(line, file);
|
||||||
|
list.add(entry);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
//e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Force an explicit close even if
|
||||||
|
// we call destroy()
|
||||||
|
try {
|
||||||
|
stdout.close();
|
||||||
|
ctags.getOutputStream().close();
|
||||||
|
ctags.getErrorStream().close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
}
|
||||||
|
ctags.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ITagEntry[] getTagEntries(IFile file, String filename) throws IOException {
|
||||||
|
List list = new LinkedList();
|
||||||
|
process(filename, list, file);
|
||||||
|
return (ITagEntry[])list.toArray(new ITagEntry[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
CTagsCmd cmd = new CTagsCmd();
|
||||||
|
ITagEntry[] entries = cmd.getTagEntries(null, args[0]);
|
||||||
|
for (int i = 0; i < entries.length; i++) {
|
||||||
|
if (entries[i] instanceof CTagsEntry) {
|
||||||
|
CTagsEntry entry = (CTagsEntry)entries[i];
|
||||||
|
System.out.println(entry.getLine() + "\n");
|
||||||
|
entry.print();
|
||||||
|
System.out.println("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,272 @@
|
||||||
|
package org.eclipse.cdt.internal.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.cdt.core.index.ITagEntry;
|
||||||
|
import org.eclipse.cdt.core.index.TagFlags;
|
||||||
|
|
||||||
|
public class CTagsEntry implements ITagEntry {
|
||||||
|
|
||||||
|
final static String TAB_SEPARATOR = "\t";
|
||||||
|
final static String PATTERN_SEPARATOR = ";\"";
|
||||||
|
final static String LANGUAGE = "language";
|
||||||
|
final static String KIND = "kind";
|
||||||
|
final static String LINE = "line";
|
||||||
|
final static String FILE = "file";
|
||||||
|
final static String INHERITS = "inherits";
|
||||||
|
final static String ACCESS = "access";
|
||||||
|
final static String IMPLEMENTATION = "implementation";
|
||||||
|
final static String CLASS = "class";
|
||||||
|
|
||||||
|
final String[] NONE = new String[0];
|
||||||
|
|
||||||
|
String tagName;
|
||||||
|
|
||||||
|
/* Path of source file containing definition of tag. */
|
||||||
|
String fileName;
|
||||||
|
|
||||||
|
/* IFile of parsed file */
|
||||||
|
IFile file;
|
||||||
|
|
||||||
|
/* pattern for locating source line
|
||||||
|
* (may be NULL if not present) */
|
||||||
|
String pattern;
|
||||||
|
|
||||||
|
int lineNumber;
|
||||||
|
|
||||||
|
/* Miscellaneous extension fields */
|
||||||
|
HashMap tagExtensionField;
|
||||||
|
|
||||||
|
String line;
|
||||||
|
|
||||||
|
public CTagsEntry(String line, IFile file) {
|
||||||
|
this.line = line;
|
||||||
|
this.file = file;
|
||||||
|
tagName = "";
|
||||||
|
fileName ="";
|
||||||
|
pattern = null;
|
||||||
|
lineNumber = 0;
|
||||||
|
tagExtensionField = new HashMap();
|
||||||
|
parse();
|
||||||
|
}
|
||||||
|
|
||||||
|
void parse () {
|
||||||
|
String delim = TAB_SEPARATOR;
|
||||||
|
StringTokenizer st = new StringTokenizer(line, delim);
|
||||||
|
for (int state = 0; st.hasMoreTokens(); state++) {
|
||||||
|
String token = st.nextToken(delim);
|
||||||
|
switch (state) {
|
||||||
|
case 0: // TAG_NAME:
|
||||||
|
tagName = token;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: // FILE_NAME:
|
||||||
|
fileName = token;
|
||||||
|
delim = PATTERN_SEPARATOR;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2: // PATTERN;
|
||||||
|
try {
|
||||||
|
String sub = token.substring(1);
|
||||||
|
if (Character.isDigit(sub.charAt(0))) {
|
||||||
|
lineNumber = Integer.parseInt(sub);
|
||||||
|
} else {
|
||||||
|
// Filter out the delimiters
|
||||||
|
int i = sub.indexOf("/^");
|
||||||
|
int j = sub.lastIndexOf("$/");
|
||||||
|
try {
|
||||||
|
if(i >= 0 && j >= 0 ) {
|
||||||
|
sub = sub.substring(i + 2, j);
|
||||||
|
} else if(i >= 0) {
|
||||||
|
sub = sub.substring(i + 2, sub.length()-1);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {}
|
||||||
|
pattern = sub;
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
//e.printStackTrace();
|
||||||
|
} catch (IndexOutOfBoundsException e) {
|
||||||
|
//e.printStackTrace();
|
||||||
|
}
|
||||||
|
delim = TAB_SEPARATOR;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: // EXTENSION_FIELDS:
|
||||||
|
int i = token.indexOf(':');
|
||||||
|
if (i != -1) {
|
||||||
|
String key = token.substring(0, i);
|
||||||
|
String value = token.substring(i + 1);
|
||||||
|
tagExtensionField.put(key, value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTagName () {
|
||||||
|
return tagName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFileName() {
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
public IFile getIFile() {
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPattern() {
|
||||||
|
return pattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
// line:
|
||||||
|
public int getLineNumber() {
|
||||||
|
try {
|
||||||
|
String sub = (String)tagExtensionField.get(LINE);
|
||||||
|
if (sub != null) {
|
||||||
|
lineNumber = Integer.parseInt(sub);
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
//System.out.println(e);
|
||||||
|
}
|
||||||
|
return lineNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
// kind:
|
||||||
|
public int getKind() {
|
||||||
|
String kind = (String)tagExtensionField.get(KIND);
|
||||||
|
return TagFlags.value(kind);
|
||||||
|
}
|
||||||
|
|
||||||
|
// language:
|
||||||
|
public String getLanguage() {
|
||||||
|
return (String)tagExtensionField.get(LANGUAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implementation:
|
||||||
|
public int getImplementation() {
|
||||||
|
String impl = (String)tagExtensionField.get(IMPLEMENTATION);
|
||||||
|
return TagFlags.value(impl);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Class:
|
||||||
|
public String getClassName() {
|
||||||
|
return (String)tagExtensionField.get(CLASS);
|
||||||
|
}
|
||||||
|
|
||||||
|
// file:
|
||||||
|
public boolean hasFileScope() {
|
||||||
|
return (tagExtensionField.get(FILE) != null);
|
||||||
|
}
|
||||||
|
|
||||||
|
// inherits:
|
||||||
|
public String[] getInherits() {
|
||||||
|
String base = (String)tagExtensionField.get(INHERITS);
|
||||||
|
if (base != null) {
|
||||||
|
StringTokenizer st = new StringTokenizer(base, ",");
|
||||||
|
List list = new ArrayList();
|
||||||
|
while (st.hasMoreTokens()) {
|
||||||
|
list.add(st.nextToken());
|
||||||
|
}
|
||||||
|
return (String[])list.toArray(new String[0]);
|
||||||
|
}
|
||||||
|
return NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// access:
|
||||||
|
public int getAccessControl() {
|
||||||
|
String access = (String)tagExtensionField.get(ACCESS);
|
||||||
|
return TagFlags.value(access);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLine() {
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String makeTagLine(ITagEntry tagEntry) {
|
||||||
|
StringBuffer buffer = new StringBuffer();
|
||||||
|
buffer.append(tagEntry.getTagName());
|
||||||
|
buffer.append("\t");
|
||||||
|
buffer.append(tagEntry.getFileName());
|
||||||
|
buffer.append("\t");
|
||||||
|
String pat = tagEntry.getPattern();
|
||||||
|
if (pat != null) {
|
||||||
|
buffer.append(pat);
|
||||||
|
} else {
|
||||||
|
buffer.append(tagEntry.getLineNumber());
|
||||||
|
}
|
||||||
|
buffer.append(";\"");
|
||||||
|
buffer.append("\t");
|
||||||
|
|
||||||
|
String kind = TagFlags.value(tagEntry.getKind());
|
||||||
|
if (kind != null) {
|
||||||
|
buffer.append(KIND + ":" + tagEntry.getKind());
|
||||||
|
buffer.append("\t");
|
||||||
|
}
|
||||||
|
|
||||||
|
String lang = tagEntry.getLanguage();
|
||||||
|
if (lang != null) {
|
||||||
|
buffer.append(LANGUAGE + ":" + tagEntry.getLanguage());
|
||||||
|
buffer.append("\t");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tagEntry.hasFileScope()) {
|
||||||
|
buffer.append(FILE + ":");
|
||||||
|
buffer.append("\t");
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] inherits = tagEntry.getInherits();
|
||||||
|
for (int i = 0; i < inherits.length; i++) {
|
||||||
|
if (i == 0) {
|
||||||
|
buffer.append(INHERITS + ":");
|
||||||
|
} else {
|
||||||
|
buffer.append(",");
|
||||||
|
}
|
||||||
|
buffer.append(inherits[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
String access = TagFlags.value(tagEntry.getAccessControl());
|
||||||
|
if (access != null) {
|
||||||
|
buffer.append(ACCESS + ":" + access);
|
||||||
|
buffer.append("\t");
|
||||||
|
}
|
||||||
|
|
||||||
|
String impl = TagFlags.value(tagEntry.getImplementation());
|
||||||
|
if (impl != null) {
|
||||||
|
buffer.append(IMPLEMENTATION + ":" + impl);
|
||||||
|
buffer.append("\t");
|
||||||
|
}
|
||||||
|
|
||||||
|
String clazz = tagEntry.getClassName();
|
||||||
|
if (clazz != null) {
|
||||||
|
buffer.append(CLASS + ":" + clazz);
|
||||||
|
buffer.append("\t");
|
||||||
|
}
|
||||||
|
return buffer.toString().trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void print() {
|
||||||
|
System.out.println("TagName " + getTagName());
|
||||||
|
System.out.println("FileName " + getFileName());
|
||||||
|
System.out.println("Pattern " + getPattern());
|
||||||
|
System.out.println("LineNumber " + getLineNumber());
|
||||||
|
System.out.println("Kind " + getKind());
|
||||||
|
System.out.println("Language " + getLanguage());
|
||||||
|
System.out.println("FileScope " + hasFileScope());
|
||||||
|
String[] inherits = getInherits();
|
||||||
|
for (int i = 0; i < inherits.length; i++) {
|
||||||
|
System.out.println("Inherit " + inherits[i]);
|
||||||
|
}
|
||||||
|
System.out.println("AccessControl " + getAccessControl());
|
||||||
|
System.out.println("Implementation " + getImplementation());
|
||||||
|
System.out.println("ClassName " + getClassName());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
package org.eclipse.cdt.internal.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.index.ITagEntry;
|
||||||
|
|
||||||
|
public class CTagsFileReader {
|
||||||
|
String filename = null;
|
||||||
|
List list = null;
|
||||||
|
|
||||||
|
public CTagsFileReader(String name) {
|
||||||
|
filename = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void parse(BufferedReader reader) throws IOException {
|
||||||
|
CTagsHeader header = new CTagsHeader();
|
||||||
|
// Skip the header.
|
||||||
|
header.parse(reader);
|
||||||
|
String s;
|
||||||
|
while ((s = reader.readLine()) != null) {
|
||||||
|
ITagEntry entry = new CTagsEntry(s, null);
|
||||||
|
list.add(entry);
|
||||||
|
// System.out.println (entry.getLine() + "\n\n");
|
||||||
|
// entry.print(); System.out.println();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ITagEntry[] getTagEntries() throws IOException {
|
||||||
|
if (list == null) {
|
||||||
|
list = new LinkedList();
|
||||||
|
BufferedReader reader = new BufferedReader(new FileReader(filename));
|
||||||
|
parse(reader);
|
||||||
|
}
|
||||||
|
return (ITagEntry[])list.toArray(new ITagEntry[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
CTagsFileReader tagfile = new CTagsFileReader(args[0]);
|
||||||
|
ITagEntry[] entries = tagfile.getTagEntries();
|
||||||
|
for (int i = 0; i < entries.length; i++) {
|
||||||
|
if (entries[i] instanceof CTagsEntry) {
|
||||||
|
CTagsEntry entry = (CTagsEntry)entries[i];
|
||||||
|
System.out.println(entry.getLine() + "\n\n");
|
||||||
|
entry.print();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
package org.eclipse.cdt.internal.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.Writer;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.index.ITagEntry;
|
||||||
|
|
||||||
|
public class CTagsFileWriter {
|
||||||
|
BufferedWriter writer = null;
|
||||||
|
ITagEntry [] entries = null;
|
||||||
|
|
||||||
|
public CTagsFileWriter(String tagfile) throws IOException {
|
||||||
|
writer = new BufferedWriter(new FileWriter(tagfile));
|
||||||
|
}
|
||||||
|
|
||||||
|
public CTagsFileWriter(Writer outfile) {
|
||||||
|
writer = new BufferedWriter(outfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void save(ITagEntry[] ent) throws IOException {
|
||||||
|
setTagEntries(ent);
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void save() throws IOException {
|
||||||
|
if (entries != null) {
|
||||||
|
String header = CTagsHeader.header();
|
||||||
|
writer.write(header, 0, header.length());
|
||||||
|
for (int i = 0; i < entries.length; i++) {
|
||||||
|
String entry = entries[i].getLine();
|
||||||
|
writer.write(entry, 0, entry.length());
|
||||||
|
writer.newLine();
|
||||||
|
}
|
||||||
|
writer.flush();
|
||||||
|
entries = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTagEntries(ITagEntry[] ent) {
|
||||||
|
entries = ent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
CTagsFileReader inFile = new CTagsFileReader(args[0]);
|
||||||
|
ITagEntry[] entries = inFile.getTagEntries();
|
||||||
|
CTagsFileWriter outFile = new CTagsFileWriter(args[0] + ".back");
|
||||||
|
outFile.save(entries);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
package org.eclipse.cdt.internal.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
|
||||||
|
|
||||||
|
/* This structure contains information about the tag file. */
|
||||||
|
public class CTagsHeader {
|
||||||
|
|
||||||
|
final static String TAG_FILE_FORMAT =
|
||||||
|
"!_TAG_FILE_FORMAT\t2\t/extended format; --format=1 will not append ;\" to lines/";
|
||||||
|
final static String TAG_FILE_SORTED =
|
||||||
|
"!_TAG_FILE_SORTED\t0\t/0=unsorted, 1=sorted/";
|
||||||
|
final static String TAG_PROGRAM_AUTHOR =
|
||||||
|
"!_TAG_PROGRAM_AUTHOR\tDarren Hiebert\t/dhiebert@users.sourceforge.net/";
|
||||||
|
final static String TAG_PROGRAM_NAME =
|
||||||
|
"!_TAG_PROGRAM_NAME\tExuberant Ctags\t//";
|
||||||
|
final static String TAG_PROGRAM_URL =
|
||||||
|
"!_TAG_PROGRAM_URL\thttp://ctags.sourceforge.net\t/official site/";
|
||||||
|
final static String TAG_PROGRAM_VERSION =
|
||||||
|
"!_TAG_PROGRAM_VERSION\t5.2.3\t//";
|
||||||
|
|
||||||
|
/* information about the structure of the tag file */
|
||||||
|
|
||||||
|
final String TAGS_PREFIX = "!_";
|
||||||
|
|
||||||
|
/* Format of tag file (1 = original, 2 = extended) */
|
||||||
|
String format;
|
||||||
|
|
||||||
|
/* Is the tag file sorted? (0 = unsorted, 1 = sorted) */
|
||||||
|
String sorted;
|
||||||
|
|
||||||
|
/* Information about the program which created this tag file */
|
||||||
|
|
||||||
|
/* Name of author of generating program (may be null) */
|
||||||
|
String author;
|
||||||
|
|
||||||
|
/* Name of program (may be null) */
|
||||||
|
String name;
|
||||||
|
|
||||||
|
/* URL of distribution (may be null) */
|
||||||
|
String url;
|
||||||
|
|
||||||
|
/* program version (may be null) */
|
||||||
|
String version;
|
||||||
|
|
||||||
|
void parse (BufferedReader in) throws IOException {
|
||||||
|
// !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
|
||||||
|
format = in.readLine();
|
||||||
|
if (format == null || !format.equals(TAG_FILE_FORMAT)) {
|
||||||
|
throw new IOException("Wrong Tag Format Header");
|
||||||
|
}
|
||||||
|
|
||||||
|
// !_TAG_FILE_SORTED 0 /0=unsorted, 1=sorted/
|
||||||
|
sorted = in.readLine();
|
||||||
|
if (sorted == null || !sorted.equals(TAG_FILE_SORTED)) {
|
||||||
|
throw new IOException("Wrong Tag Format Header");
|
||||||
|
}
|
||||||
|
|
||||||
|
// !_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
|
||||||
|
author = in.readLine();
|
||||||
|
if (author == null || !author.equals(TAG_PROGRAM_AUTHOR)) {
|
||||||
|
throw new IOException("Wrong Tag Format Header");
|
||||||
|
}
|
||||||
|
|
||||||
|
// !_TAG_PROGRAM_NAME Exuberant Ctags //
|
||||||
|
name = in.readLine();
|
||||||
|
if (name == null || !name.equals(TAG_PROGRAM_NAME)) {
|
||||||
|
throw new IOException("Wrong Tag Format Header");
|
||||||
|
}
|
||||||
|
|
||||||
|
// !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
|
||||||
|
url = in.readLine();
|
||||||
|
if (url == null || !url.equals(TAG_PROGRAM_URL)) {
|
||||||
|
throw new IOException("Wrong Tag Format Header");
|
||||||
|
}
|
||||||
|
|
||||||
|
// !_TAG_PROGRAM_VERSION 5.2.3 //
|
||||||
|
version = in.readLine();
|
||||||
|
if (version == null || !version.equals(TAG_PROGRAM_VERSION)) {
|
||||||
|
throw new IOException("Wrong Tag Format Header");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String header() {
|
||||||
|
return
|
||||||
|
TAG_FILE_FORMAT + "\n" + TAG_FILE_SORTED + "\n" +
|
||||||
|
TAG_PROGRAM_AUTHOR + "\n" + TAG_PROGRAM_NAME + "\n" +
|
||||||
|
TAG_PROGRAM_URL + "\n" + TAG_PROGRAM_VERSION + "\n";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
package org.eclipse.cdt.internal.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.index.ITagEntry;
|
||||||
|
|
||||||
|
public class CTagsRunner extends Thread {
|
||||||
|
|
||||||
|
IndexManager manager;
|
||||||
|
|
||||||
|
public CTagsRunner(IndexManager indexManager) {
|
||||||
|
manager = indexManager;
|
||||||
|
setDaemon(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run () {
|
||||||
|
// It should be ok since we are being started on startup
|
||||||
|
// the delay should allow things to settle down.
|
||||||
|
manager.delay();
|
||||||
|
while (true) {
|
||||||
|
IResource resource = null;
|
||||||
|
RequestList requestList = manager.getRequestList();
|
||||||
|
try {
|
||||||
|
resource = requestList.removeItem();
|
||||||
|
} catch (Exception e) {
|
||||||
|
//e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resource != null) {
|
||||||
|
switch (resource.getType()) {
|
||||||
|
case IResource.FILE:
|
||||||
|
IProject project = resource.getProject();
|
||||||
|
Map projectsMap = manager.getProjectsMap();
|
||||||
|
Map filesMap = (Map)projectsMap.get(project.getLocation());
|
||||||
|
if (filesMap == null) {
|
||||||
|
Map m = Collections.synchronizedMap(new HashMap());
|
||||||
|
projectsMap.put(project.getLocation(), m);
|
||||||
|
// Kick Start;
|
||||||
|
manager.addContainer(project);
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
CTagsCmd cmd = new CTagsCmd();
|
||||||
|
IFile file = (IFile)resource;
|
||||||
|
String location = file.getLocation().toOSString();
|
||||||
|
ITagEntry[] entries = cmd.getTagEntries(file, location);
|
||||||
|
filesMap.put(resource.getLocation(), entries);
|
||||||
|
} catch (IOException e) {
|
||||||
|
}
|
||||||
|
//System.out.println("indexing " + resource.getName());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IResource.FOLDER:
|
||||||
|
case IResource.PROJECT:
|
||||||
|
System.out.println("Can not index folders " + resource.getName());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//System.out.println("Indexing " + filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,291 @@
|
||||||
|
package org.eclipse.cdt.internal.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IFolder;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.index.ITagEntry;
|
||||||
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
|
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||||
|
import org.eclipse.cdt.core.model.IElementChangedListener;
|
||||||
|
|
||||||
|
public class IndexManager implements IElementChangedListener {
|
||||||
|
|
||||||
|
RequestList requestList = null;
|
||||||
|
Thread thread = null;
|
||||||
|
Map projectsMap = null;
|
||||||
|
|
||||||
|
private static IndexManager indexManager = null;
|
||||||
|
|
||||||
|
private IndexManager() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ITagEntry[] query(IProject project, String pattern, boolean ignoreCase, boolean exactMatch) {
|
||||||
|
Map filesMap = (Map)projectsMap.get(project.getLocation());
|
||||||
|
// try to kick start.
|
||||||
|
if (filesMap == null) {
|
||||||
|
addContainer(project);
|
||||||
|
}
|
||||||
|
List result = new ArrayList();
|
||||||
|
filesMap = (Map)projectsMap.get(project.getLocation());
|
||||||
|
if (filesMap != null) {
|
||||||
|
if (pattern == null)
|
||||||
|
pattern = "*"; //FIXME: is this right null matching all?
|
||||||
|
// Compile the pattern
|
||||||
|
StringMatcher matcher = new StringMatcher(pattern, ignoreCase, exactMatch);
|
||||||
|
Iterator values = filesMap.values().iterator();
|
||||||
|
while (values.hasNext()) {
|
||||||
|
ITagEntry[] entries = (ITagEntry[])values.next();
|
||||||
|
for (int j = 0; j < entries.length; j++) {
|
||||||
|
String tagName = entries[j].getTagName();
|
||||||
|
if (tagName != null && matcher.match(tagName)) {
|
||||||
|
result.add(entries[j]);
|
||||||
|
}
|
||||||
|
//if (tagName != null && (pattern == null || tagName.equals(pattern))) {
|
||||||
|
// result.add(entries[j]);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (ITagEntry[])result.toArray(new ITagEntry[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected RequestList getRequestList() {
|
||||||
|
return requestList;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Map getProjectsMap() {
|
||||||
|
return projectsMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void init () {
|
||||||
|
requestList = new RequestList();
|
||||||
|
projectsMap = Collections.synchronizedMap(new HashMap());
|
||||||
|
CTagsRunner ctags = new CTagsRunner(this);
|
||||||
|
thread = new Thread(ctags, "C Tags indexer");
|
||||||
|
thread.setPriority (Thread.NORM_PRIORITY - 1);
|
||||||
|
thread.start();
|
||||||
|
addAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Before processing all jobs, need to ensure that the indexes are up to date.
|
||||||
|
*/
|
||||||
|
protected static void delay() {
|
||||||
|
try {
|
||||||
|
// wait 10 seconds so as not to interfere with plugin startup
|
||||||
|
Thread.currentThread().sleep(10000);
|
||||||
|
} catch (InterruptedException ie) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* About to delete a project.
|
||||||
|
*/
|
||||||
|
public void removeResource(IResource resource) {
|
||||||
|
Map filesMap = (Map)projectsMap.get(resource.getProject().getLocation());
|
||||||
|
if (filesMap == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (resource.getType()) {
|
||||||
|
case IResource.ROOT:
|
||||||
|
// PROBLEM?
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IResource.PROJECT:
|
||||||
|
projectsMap.remove(resource.getLocation());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IResource.FOLDER:
|
||||||
|
removeFolder((IFolder)resource);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IResource.FILE:
|
||||||
|
removeFile((IFile)resource);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeFolder(IFolder folder) {
|
||||||
|
Map filesMap = (Map)projectsMap.get(folder.getProject().getLocation());
|
||||||
|
if (filesMap == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
IPath folderPath = folder.getLocation();
|
||||||
|
if (filesMap != null) {
|
||||||
|
Iterator keys = filesMap.keySet().iterator();
|
||||||
|
while (keys.hasNext()) {
|
||||||
|
IPath p = (IPath)keys.next();
|
||||||
|
if (p != null && folderPath.isPrefixOf(p)) {
|
||||||
|
//System.out.println("Removing [" + folderPath + "] " + p);
|
||||||
|
filesMap.remove(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeFile(IFile file) {
|
||||||
|
Map filesMap = (Map)projectsMap.get(file.getProject().getLocation());
|
||||||
|
if (filesMap != null) {
|
||||||
|
filesMap.remove(file.getLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addResource(IResource resource) {
|
||||||
|
switch(resource.getType()) {
|
||||||
|
case IResource.ROOT:
|
||||||
|
case IResource.PROJECT:
|
||||||
|
case IResource.FOLDER:
|
||||||
|
addContainer((IContainer)resource);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IResource.FILE:
|
||||||
|
addFile((IFile)resource);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trigger addition of a resource to an index
|
||||||
|
* Note: the actual operation is performed in background
|
||||||
|
*/
|
||||||
|
public void addFile(IFile file) {
|
||||||
|
if (CoreModel.getDefault().isTranslationUnit(file)) {
|
||||||
|
requestList.addItem(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trigger addition of the entire content of a project
|
||||||
|
* Note: the actual operation is performed in background
|
||||||
|
*/
|
||||||
|
public void addContainer(IContainer container) {
|
||||||
|
if (container != null && container.exists()) {
|
||||||
|
try {
|
||||||
|
IResource[] resources = container.members(false);
|
||||||
|
for (int i = 0; i < resources.length; i++) {
|
||||||
|
IResource res = resources[i];
|
||||||
|
switch(res.getType()) {
|
||||||
|
case IResource.ROOT:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IResource.PROJECT:
|
||||||
|
if (CoreModel.getDefault().hasCNature((IProject)res)) {
|
||||||
|
addContainer((IContainer)res);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IResource.FOLDER:
|
||||||
|
addContainer((IContainer)res);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IResource.FILE:
|
||||||
|
addFile((IFile)res);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addAll() {
|
||||||
|
addResource(ResourcesPlugin.getWorkspace().getRoot());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveIndexes() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveIndex(IProject project) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shutdown() {
|
||||||
|
if (thread != null)
|
||||||
|
thread.interrupted();
|
||||||
|
CoreModel.getDefault().removeElementChangedListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IndexManager getDefault() {
|
||||||
|
if (indexManager == null) {
|
||||||
|
indexManager = new IndexManager();
|
||||||
|
indexManager.init();
|
||||||
|
// Register to the C Core Model for C specific changes.
|
||||||
|
CoreModel.getDefault().addElementChangedListener(indexManager);
|
||||||
|
}
|
||||||
|
return indexManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void processDelta(ICElementDelta delta) throws CModelException {
|
||||||
|
int kind= delta.getKind();
|
||||||
|
int flags= delta.getFlags();
|
||||||
|
ICElement element= delta.getElement();
|
||||||
|
|
||||||
|
//System.out.println("Index Processing Delta " + element);
|
||||||
|
// handle open and closing of a solution or project
|
||||||
|
if (((flags & ICElementDelta.F_CLOSED) != 0)
|
||||||
|
|| ((flags & ICElementDelta.F_OPENED) != 0)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kind == ICElementDelta.REMOVED) {
|
||||||
|
try {
|
||||||
|
IResource resource = ((ICElement)element).getCorrespondingResource();
|
||||||
|
removeResource(resource);
|
||||||
|
} catch (CModelException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kind == ICElementDelta.ADDED) {
|
||||||
|
try {
|
||||||
|
IResource resource = ((ICElement)element).getCorrespondingResource();
|
||||||
|
addResource(resource);
|
||||||
|
} catch (CModelException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element instanceof ITranslationUnit) {
|
||||||
|
if (kind == ICElementDelta.CHANGED) {
|
||||||
|
IResource resource = ((ICElement)element).getCorrespondingResource();
|
||||||
|
addResource(resource);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ICElementDelta[] affectedChildren= delta.getAffectedChildren();
|
||||||
|
for (int i= 0; i < affectedChildren.length; i++) {
|
||||||
|
processDelta(affectedChildren[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Cdoc)
|
||||||
|
* Method declared on IElementChangedListener.
|
||||||
|
*/
|
||||||
|
public void elementChanged(final ElementChangedEvent event) {
|
||||||
|
try {
|
||||||
|
processDelta(event.getDelta());
|
||||||
|
} catch(CModelException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
package org.eclipse.cdt.internal.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.*;
|
||||||
|
|
||||||
|
public class RequestList {
|
||||||
|
|
||||||
|
private List list;
|
||||||
|
|
||||||
|
public RequestList() {
|
||||||
|
list = Collections.synchronizedList(new LinkedList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public IResource removeItem() throws InterruptedException {
|
||||||
|
//print("in removeItem() - entering");
|
||||||
|
synchronized (list) {
|
||||||
|
while (list.isEmpty()) {
|
||||||
|
//print("in removeItem() - about to wait()");
|
||||||
|
list.wait();
|
||||||
|
//print("in removeItem() - done with wait()");
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract the new first item
|
||||||
|
IResource item = (IResource)list.remove(0);
|
||||||
|
|
||||||
|
//print("in removeItem() - leaving");
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addItem(IResource item) {
|
||||||
|
//print("in addItem() - entering");
|
||||||
|
synchronized (list) {
|
||||||
|
// There will always be room to add to this List
|
||||||
|
// because it expands as needed.
|
||||||
|
list.add(item);
|
||||||
|
//print("in addItem - just added: '" + item + "'");
|
||||||
|
|
||||||
|
// After adding, notify any and all waiting
|
||||||
|
// threads that the list has changed.
|
||||||
|
list.notifyAll();
|
||||||
|
//print("in addItem() - just notified");
|
||||||
|
}
|
||||||
|
//print("in addItem() - leaving");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void print(String msg) {
|
||||||
|
String name = Thread.currentThread().getName();
|
||||||
|
System.out.println(name + ": " + msg);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,389 @@
|
||||||
|
package org.eclipse.cdt.internal.core.index;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
public class StringMatcher {
|
||||||
|
protected String fPattern;
|
||||||
|
protected int fLength; // pattern length
|
||||||
|
protected boolean fIgnoreWildCards;
|
||||||
|
protected boolean fIgnoreCase;
|
||||||
|
protected boolean fHasLeadingStar;
|
||||||
|
protected boolean fHasTrailingStar;
|
||||||
|
protected String fSegments[]; //the given pattern is split into * separated segments
|
||||||
|
|
||||||
|
/* boundary value beyond which we don't need to search in the text */
|
||||||
|
protected int fBound= 0;
|
||||||
|
|
||||||
|
protected static final char fSingleWildCard= '\u0000';
|
||||||
|
|
||||||
|
public static class Position {
|
||||||
|
int start; //inclusive
|
||||||
|
int end; //exclusive
|
||||||
|
public Position(int start, int end) {
|
||||||
|
this.start= start;
|
||||||
|
this.end= end;
|
||||||
|
}
|
||||||
|
public int getStart() {
|
||||||
|
return start;
|
||||||
|
}
|
||||||
|
public int getEnd() {
|
||||||
|
return end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the first occurrence of the pattern between <code>start</code)(inclusive)
|
||||||
|
* and <code>end</code>(exclusive).
|
||||||
|
* @param <code>text</code>, the String object to search in
|
||||||
|
* @param <code>start</code>, the starting index of the search range, inclusive
|
||||||
|
* @param <code>end</code>, the ending index of the search range, exclusive
|
||||||
|
* @return an <code>StringMatcher.Position</code> object that keeps the starting
|
||||||
|
* (inclusive) and ending positions (exclusive) of the first occurrence of the
|
||||||
|
* pattern in the specified range of the text; return null if not found or subtext
|
||||||
|
* is empty (start==end). A pair of zeros is returned if pattern is empty string
|
||||||
|
* Note that for pattern like "*abc*" with leading and trailing stars, position of "abc"
|
||||||
|
* is returned. For a pattern like"*??*" in text "abcdf", (1,3) is returned
|
||||||
|
*/
|
||||||
|
|
||||||
|
public StringMatcher.Position find(String text, int start, int end) {
|
||||||
|
if (fPattern == null || text == null)
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
|
||||||
|
int tlen= text.length();
|
||||||
|
if (start < 0)
|
||||||
|
start= 0;
|
||||||
|
if (end > tlen)
|
||||||
|
end= tlen;
|
||||||
|
if (end < 0 || start >= end)
|
||||||
|
return null;
|
||||||
|
if (fLength == 0)
|
||||||
|
return new Position(start, start);
|
||||||
|
if (fIgnoreWildCards) {
|
||||||
|
int x= posIn(text, start, end);
|
||||||
|
if (x < 0)
|
||||||
|
return null;
|
||||||
|
return new Position(x, x + fLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
int segCount= fSegments.length;
|
||||||
|
if (segCount == 0) //pattern contains only '*'(s)
|
||||||
|
return new Position(start, end);
|
||||||
|
|
||||||
|
int curPos= start;
|
||||||
|
int matchStart= -1;
|
||||||
|
for (int i= 0; i < segCount && curPos < end; ++i) {
|
||||||
|
String current= fSegments[i];
|
||||||
|
int nextMatch= regExpPosIn(text, curPos, end, current);
|
||||||
|
if (nextMatch < 0)
|
||||||
|
return null;
|
||||||
|
if (i == 0)
|
||||||
|
matchStart= nextMatch;
|
||||||
|
curPos= nextMatch + current.length();
|
||||||
|
}
|
||||||
|
return new Position(matchStart, curPos);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* StringMatcher constructor takes in a String object that is a simple
|
||||||
|
* pattern which may contain * for 0 and many characters and
|
||||||
|
* ? for exactly one character. Also takes as parameter a boolean object
|
||||||
|
* specifying if case should be ignored
|
||||||
|
* @deprecated Use StringMatcher(pattern, ignoreCase, ignoreWildCards).
|
||||||
|
*/
|
||||||
|
public StringMatcher(String aPattern, boolean ignoreCase) {
|
||||||
|
this(aPattern, ignoreCase, false);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* StringMatcher constructor takes in a String object that is a simple
|
||||||
|
* pattern which may contain * for 0 and many characters and
|
||||||
|
* ? for exactly one character.
|
||||||
|
*
|
||||||
|
* Literal '*' and '?' characters must be escaped in the pattern
|
||||||
|
* e.g., "\*" means literal "*", etc.
|
||||||
|
*
|
||||||
|
* Escaping any other character (including the escape character itself),
|
||||||
|
* just results in that character in the pattern.
|
||||||
|
* e.g., "\a" means "a" and "\\" means "\"
|
||||||
|
*
|
||||||
|
* If invoking the StringMatcher with string literals in Java, don't forget
|
||||||
|
* escape characters are represented by "\\".
|
||||||
|
*
|
||||||
|
* @param aPattern the pattern to match text against
|
||||||
|
* @param ignoreCase if true, case is ignored
|
||||||
|
* @param ignoreWildCards if true, wild cards and their escape sequences are ignored
|
||||||
|
* (everything is taken literally).
|
||||||
|
*/
|
||||||
|
public StringMatcher(String aPattern, boolean ignoreCase, boolean ignoreWildCards) {
|
||||||
|
fIgnoreCase= ignoreCase;
|
||||||
|
fIgnoreWildCards= ignoreWildCards;
|
||||||
|
fLength= aPattern.length();
|
||||||
|
|
||||||
|
/* convert case */
|
||||||
|
if (fIgnoreCase) {
|
||||||
|
fPattern= aPattern.toUpperCase();
|
||||||
|
} else {
|
||||||
|
fPattern= aPattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fIgnoreWildCards) {
|
||||||
|
parseNoWildCards();
|
||||||
|
} else {
|
||||||
|
parseWildCards();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Given the starting (inclusive) and the ending (exclusive) poisitions in the
|
||||||
|
* <code>text</code>, determine if the given substring matches with aPattern
|
||||||
|
* @return true if the specified portion of the text matches the pattern
|
||||||
|
* @param String <code>text</code>, a String object that contains the substring to match
|
||||||
|
* @param int <code>start<code> marks the starting position (inclusive) of the substring
|
||||||
|
* @param int <code>end<code> marks the ending index (exclusive) of the substring
|
||||||
|
*/
|
||||||
|
public boolean match(String text, int start, int end) {
|
||||||
|
if (null == fPattern || null == text)
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
|
||||||
|
if (start > end)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (fIgnoreWildCards)
|
||||||
|
return fPattern.regionMatches(fIgnoreCase, 0, text, start, fLength);
|
||||||
|
int segCount= fSegments.length;
|
||||||
|
if (segCount == 0) //pattern contains only '*'(s) or empty pattern
|
||||||
|
return true;
|
||||||
|
if (start == end)
|
||||||
|
return fLength == 0;
|
||||||
|
if (fLength == 0)
|
||||||
|
return start == end;
|
||||||
|
|
||||||
|
int tlen= text.length();
|
||||||
|
if (start < 0)
|
||||||
|
start= 0;
|
||||||
|
if (end > tlen)
|
||||||
|
end= tlen;
|
||||||
|
|
||||||
|
int tCurPos= start;
|
||||||
|
int bound= end - fBound;
|
||||||
|
if (bound < 0)
|
||||||
|
return false;
|
||||||
|
int i= 0;
|
||||||
|
String current= fSegments[i];
|
||||||
|
int segLength= current.length();
|
||||||
|
|
||||||
|
/* process first segment */
|
||||||
|
if (!fHasLeadingStar) {
|
||||||
|
if (!regExpRegionMatches(text, start, current, 0, segLength)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
++i;
|
||||||
|
tCurPos= tCurPos + segLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* process middle segments */
|
||||||
|
for (; i < segCount && tCurPos <= bound; ++i) {
|
||||||
|
current= fSegments[i];
|
||||||
|
int currentMatch;
|
||||||
|
int k= current.indexOf(fSingleWildCard);
|
||||||
|
if (k < 0) {
|
||||||
|
currentMatch= textPosIn(text, tCurPos, end, current);
|
||||||
|
if (currentMatch < 0)
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
currentMatch= regExpPosIn(text, tCurPos, end, current);
|
||||||
|
if (currentMatch < 0)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
tCurPos= currentMatch + current.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* process final segment */
|
||||||
|
if (!fHasTrailingStar && tCurPos != end) {
|
||||||
|
int clen= current.length();
|
||||||
|
return regExpRegionMatches(text, end - clen, current, 0, clen);
|
||||||
|
}
|
||||||
|
return i == segCount;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* match the given <code>text</code> with the pattern
|
||||||
|
* @return true if matched eitherwise false
|
||||||
|
* @param <code>text</code>, a String object
|
||||||
|
*/
|
||||||
|
public boolean match(String text) {
|
||||||
|
return match(text, 0, text.length());
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* This method parses the given pattern into segments seperated by wildcard '*' characters.
|
||||||
|
* Since wildcards are not being used in this case, the pattern consists of a single segment.
|
||||||
|
*/
|
||||||
|
private void parseNoWildCards() {
|
||||||
|
fSegments= new String[1];
|
||||||
|
fSegments[0]= fPattern;
|
||||||
|
fBound= fLength;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* This method parses the given pattern into segments seperated by wildcard '*' characters.
|
||||||
|
* @param p, a String object that is a simple regular expression with * and/or ?
|
||||||
|
*/
|
||||||
|
private void parseWildCards() {
|
||||||
|
if (fPattern.startsWith("*")) //$NON-NLS-1$
|
||||||
|
fHasLeadingStar= true;
|
||||||
|
if (fPattern.endsWith("*")) { //$NON-NLS-1$
|
||||||
|
/* make sure it's not an escaped wildcard */
|
||||||
|
if (fLength > 1 && fPattern.charAt(fLength - 2) != '\\') {
|
||||||
|
fHasTrailingStar= true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector temp= new Vector();
|
||||||
|
|
||||||
|
int pos= 0;
|
||||||
|
StringBuffer buf= new StringBuffer();
|
||||||
|
while (pos < fLength) {
|
||||||
|
char c= fPattern.charAt(pos++);
|
||||||
|
switch (c) {
|
||||||
|
case '\\' :
|
||||||
|
if (pos >= fLength) {
|
||||||
|
buf.append(c);
|
||||||
|
} else {
|
||||||
|
char next= fPattern.charAt(pos++);
|
||||||
|
/* if it's an escape sequence */
|
||||||
|
if (next == '*' || next == '?' || next == '\\') {
|
||||||
|
buf.append(next);
|
||||||
|
} else {
|
||||||
|
/* not an escape sequence, just insert literally */
|
||||||
|
buf.append(c);
|
||||||
|
buf.append(next);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '*' :
|
||||||
|
if (buf.length() > 0) {
|
||||||
|
/* new segment */
|
||||||
|
temp.addElement(buf.toString());
|
||||||
|
fBound += buf.length();
|
||||||
|
buf.setLength(0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '?' :
|
||||||
|
/* append special character representing single match wildcard */
|
||||||
|
buf.append(fSingleWildCard);
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
buf.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add last buffer to segment list */
|
||||||
|
if (buf.length() > 0) {
|
||||||
|
temp.addElement(buf.toString());
|
||||||
|
fBound += buf.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
fSegments= new String[temp.size()];
|
||||||
|
temp.copyInto(fSegments);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param <code>text</code>, a string which contains no wildcard
|
||||||
|
* @param <code>start</code>, the starting index in the text for search, inclusive
|
||||||
|
* @param <code>end</code>, the stopping point of search, exclusive
|
||||||
|
* @return the starting index in the text of the pattern , or -1 if not found
|
||||||
|
*/
|
||||||
|
protected int posIn(String text, int start, int end) { //no wild card in pattern
|
||||||
|
int max= end - fLength;
|
||||||
|
|
||||||
|
if (!fIgnoreCase) {
|
||||||
|
int i= text.indexOf(fPattern, start);
|
||||||
|
if (i == -1 || i > max)
|
||||||
|
return -1;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i= start; i <= max; ++i) {
|
||||||
|
if (text.regionMatches(true, i, fPattern, 0, fLength))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param <code>text</code>, a simple regular expression that may only contain '?'(s)
|
||||||
|
* @param <code>start</code>, the starting index in the text for search, inclusive
|
||||||
|
* @param <code>end</code>, the stopping point of search, exclusive
|
||||||
|
* @param <code>p</code>, a simple regular expression that may contains '?'
|
||||||
|
* @param <code>caseIgnored</code>, wether the pattern is not casesensitive
|
||||||
|
* @return the starting index in the text of the pattern , or -1 if not found
|
||||||
|
*/
|
||||||
|
protected int regExpPosIn(String text, int start, int end, String p) {
|
||||||
|
int plen= p.length();
|
||||||
|
|
||||||
|
int max= end - plen;
|
||||||
|
for (int i= start; i <= max; ++i) {
|
||||||
|
if (regExpRegionMatches(text, i, p, 0, plen))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
* @param <code>text</code>, a String to match
|
||||||
|
* @param <code>start</code>, int that indicates the starting index of match, inclusive
|
||||||
|
* @param <code>end</code> int that indicates the ending index of match, exclusive
|
||||||
|
* @param <code>p</code>, String, String, a simple regular expression that may contain '?'
|
||||||
|
* @param <code>ignoreCase</code>, boolean indicating wether code>p</code> is case sensitive
|
||||||
|
*/
|
||||||
|
protected boolean regExpRegionMatches(String text, int tStart, String p, int pStart, int plen) {
|
||||||
|
while (plen-- > 0) {
|
||||||
|
char tchar= text.charAt(tStart++);
|
||||||
|
char pchar= p.charAt(pStart++);
|
||||||
|
|
||||||
|
/* process wild cards */
|
||||||
|
if (!fIgnoreWildCards) {
|
||||||
|
/* skip single wild cards */
|
||||||
|
if (pchar == fSingleWildCard) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pchar == tchar)
|
||||||
|
continue;
|
||||||
|
if (fIgnoreCase) {
|
||||||
|
char tc= Character.toUpperCase(tchar);
|
||||||
|
if (tc == pchar)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param <code>text</code>, the string to match
|
||||||
|
* @param <code>start</code>, the starting index in the text for search, inclusive
|
||||||
|
* @param <code>end</code>, the stopping point of search, exclusive
|
||||||
|
* @param code>p</code>, a string that has no wildcard
|
||||||
|
* @param <code>ignoreCase</code>, boolean indicating wether code>p</code> is case sensitive
|
||||||
|
* @return the starting index in the text of the pattern , or -1 if not found
|
||||||
|
*/
|
||||||
|
protected int textPosIn(String text, int start, int end, String p) {
|
||||||
|
|
||||||
|
int plen= p.length();
|
||||||
|
int max= end - plen;
|
||||||
|
|
||||||
|
if (!fIgnoreCase) {
|
||||||
|
int i= text.indexOf(p, start);
|
||||||
|
if (i == -1 || i > max)
|
||||||
|
return -1;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i= 0; i <= max; ++i) {
|
||||||
|
if (text.regionMatches(true, i, p, 0, plen))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,117 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.core.model.CModelStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A checked exception representing a failure in the C model.
|
||||||
|
* C model exceptions contain a C-specific status object describing the
|
||||||
|
* cause of the exception.
|
||||||
|
*
|
||||||
|
* @see ICModelStatus
|
||||||
|
* @see ICModelStatusConstants
|
||||||
|
*/
|
||||||
|
public class CModelException extends CoreException {
|
||||||
|
/**
|
||||||
|
* Creates a C model exception that wrappers the given <code>Throwable</code>.
|
||||||
|
* The exception contains a C-specific status object with severity
|
||||||
|
* <code>IStatus.ERROR</code> and the given status code.
|
||||||
|
*
|
||||||
|
* @param exception the <code>Throwable</code>
|
||||||
|
* @param code one of the C-specific status codes declared in
|
||||||
|
* <code>ICModelStatusConstants</code>
|
||||||
|
* @return the new C model exception
|
||||||
|
* @see ICModelStatusConstants
|
||||||
|
* @see org.eclipse.core.runtime.IStatus#ERROR
|
||||||
|
*/
|
||||||
|
public CModelException(Throwable e, int code) {
|
||||||
|
this(new CModelStatus(code, e));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a C model exception for the given <code>CoreException</code>.
|
||||||
|
* Equivalent to
|
||||||
|
* <code>CModelException(exception,ICModelStatusConstants.CORE_EXCEPTION</code>.
|
||||||
|
*
|
||||||
|
* @param exception the <code>CoreException</code>
|
||||||
|
* @return the new C model exception
|
||||||
|
*/
|
||||||
|
public CModelException(CoreException exception) {
|
||||||
|
this(new CModelStatus(exception));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a C model exception for the given C-specific status object.
|
||||||
|
*
|
||||||
|
* @param status the C-specific status object
|
||||||
|
* @return the new C model exception
|
||||||
|
*/
|
||||||
|
public CModelException(ICModelStatus status) {
|
||||||
|
super(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the underlying <code>Throwable</code> that caused the failure.
|
||||||
|
*
|
||||||
|
* @return the wrappered <code>Throwable</code>, or <code>null</code> if the
|
||||||
|
* direct case of the failure was at the C model layer
|
||||||
|
*/
|
||||||
|
public Throwable getException() {
|
||||||
|
return getStatus().getException();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the C model status object for this exception.
|
||||||
|
* Equivalent to <code>(ICModelStatus) getStatus()</code>.
|
||||||
|
*
|
||||||
|
* @return a status object
|
||||||
|
*/
|
||||||
|
public ICModelStatus getCModelStatus() {
|
||||||
|
return (ICModelStatus) getStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this exception indicates that a C model element does not
|
||||||
|
* exist. Such exceptions have a status with a code of
|
||||||
|
* <code>ICModelStatusConstants.ELEMENT_DOES_NOT_EXIST</code>.
|
||||||
|
* This is a convenience method.
|
||||||
|
*
|
||||||
|
* @return <code>true</code> if this exception indicates that a C model
|
||||||
|
* element does not exist
|
||||||
|
* @see ICModelStatus#doesNotExist
|
||||||
|
* @see ICModelStatusConstants#ELEMENT_DOES_NOT_EXIST
|
||||||
|
*/
|
||||||
|
public boolean doesNotExist() {
|
||||||
|
ICModelStatus cModelStatus = getCModelStatus();
|
||||||
|
return cModelStatus != null && cModelStatus.doesNotExist();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a printable representation of this exception suitable for debugging
|
||||||
|
* purposes only.
|
||||||
|
*/
|
||||||
|
public String toString() {
|
||||||
|
StringBuffer buffer= new StringBuffer();
|
||||||
|
buffer.append("C Model Exception: "); //$NON-NLS-1$
|
||||||
|
if (getException() != null) {
|
||||||
|
if (getException() instanceof CoreException) {
|
||||||
|
CoreException c= (CoreException)getException();
|
||||||
|
buffer.append("Core Exception [code "); //$NON-NLS-1$
|
||||||
|
buffer.append(c.getStatus().getCode());
|
||||||
|
buffer.append("] "); //$NON-NLS-1$
|
||||||
|
buffer.append(c.getStatus().getMessage());
|
||||||
|
} else {
|
||||||
|
buffer.append(getException().toString());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
buffer.append(getStatus().toString());
|
||||||
|
}
|
||||||
|
return buffer.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,252 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IFolder;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
|
//import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.internal.core.model.CModelManager;
|
||||||
|
|
||||||
|
// This should be done in the Plugin.
|
||||||
|
|
||||||
|
public class CoreModel {
|
||||||
|
|
||||||
|
private static CoreModel cmodel = null;
|
||||||
|
private static CModelManager manager = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plugin string id.
|
||||||
|
*/
|
||||||
|
public final static String PLUGIN_ID = "org.eclipse.cdt.core";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* C nature string name, "cnature".
|
||||||
|
*/
|
||||||
|
public final static String C_NATURE_NAME = "cnature";
|
||||||
|
/**
|
||||||
|
* C nature string id, PLUGIN_ID + C_NATURE_NAME
|
||||||
|
*/
|
||||||
|
public final static String C_NATURE_ID = PLUGIN_ID + "." + C_NATURE_NAME;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* C++ nature string name, "ccnature"
|
||||||
|
*/
|
||||||
|
public final static String CC_NATURE_NAME = "ccnature";
|
||||||
|
/**
|
||||||
|
* C++ nature string id, PLUGIN_ID + CC_NATURE_NAME
|
||||||
|
*/
|
||||||
|
public final static String CC_NATURE_ID = PLUGIN_ID + "." + CC_NATURE_NAME;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the plugin id.
|
||||||
|
*/
|
||||||
|
public static String getPluginId() {
|
||||||
|
return PLUGIN_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the C nature Name.
|
||||||
|
*/
|
||||||
|
public static String getCNatureName () {
|
||||||
|
return C_NATURE_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the C++ nature name.
|
||||||
|
*/
|
||||||
|
public static String getCCNatureName () {
|
||||||
|
return CC_NATURE_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the C nature Id.
|
||||||
|
*/
|
||||||
|
public static String getCNatureId () {
|
||||||
|
return C_NATURE_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the C++ nature Id.
|
||||||
|
*/
|
||||||
|
public static String getCCNatureId () {
|
||||||
|
return CC_NATURE_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an ICElement form and IPath.
|
||||||
|
* Returns null if not found.
|
||||||
|
*/
|
||||||
|
public ICElement create(IPath path) {
|
||||||
|
return manager.create(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an ICElement form and IFile.
|
||||||
|
* Returns null if not found.
|
||||||
|
*/
|
||||||
|
public ICElement create(IFile file) {
|
||||||
|
return manager.create(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an ICElement form and IFolder.
|
||||||
|
* Returns null if not found.
|
||||||
|
*/
|
||||||
|
public ICElement create(IFolder folder) {
|
||||||
|
return manager.create(folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an ICElement form and IProject.
|
||||||
|
* Returns null if not found.
|
||||||
|
*/
|
||||||
|
public ICElement create(IProject project) {
|
||||||
|
return manager.create(project);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an ICElement form and IWorkspaceRoot.
|
||||||
|
* Returns null if not found.
|
||||||
|
*/
|
||||||
|
public ICElement create(IWorkspaceRoot root) {
|
||||||
|
return manager.create(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an ICElement form and IResource.
|
||||||
|
* Returns null if not found.
|
||||||
|
*/
|
||||||
|
public ICElement create(IResource resource) {
|
||||||
|
return manager.create(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the default ICRoot.
|
||||||
|
*/
|
||||||
|
public ICElement getCRoot() {
|
||||||
|
return manager.getCRoot();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if IFile is a shared library, i.e. libxx.so
|
||||||
|
*/
|
||||||
|
public static boolean isSharedLib(IFile file) {
|
||||||
|
return manager.isSharedLib(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if IFile is a an object(ELF), i.e. *.o
|
||||||
|
*/
|
||||||
|
public static boolean isObject(IFile file) {
|
||||||
|
return manager.isObject(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if IFile is an ELF executable
|
||||||
|
*/
|
||||||
|
public static boolean isExecutable(IFile file) {
|
||||||
|
return manager.isExecutable(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if IFile is an ELF.
|
||||||
|
*/
|
||||||
|
public static boolean isBinary(IFile file) {
|
||||||
|
return manager.isBinary(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if IFile is an Achive, *.a
|
||||||
|
*/
|
||||||
|
public static boolean isArchive(IFile file) {
|
||||||
|
return manager.isArchive(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if IFile is a TranslationUnit.
|
||||||
|
*/
|
||||||
|
public static boolean isTranslationUnit(IFile file) {
|
||||||
|
return manager.isTranslationUnit(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if name is a valid name for a translation unit.
|
||||||
|
*/
|
||||||
|
public static boolean isValidTranslationUnitName(String name){
|
||||||
|
return manager.isValidTranslationUnitName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if project has C nature.
|
||||||
|
*/
|
||||||
|
public static boolean hasCNature(IProject project){
|
||||||
|
return manager.hasCNature(project);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasCCNature(IProject project){
|
||||||
|
return manager.hasCCNature(project);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addCNature(IProject project, IProgressMonitor monitor) throws CModelException {
|
||||||
|
manager.addCNature(project, monitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addCCNature(IProject project, IProgressMonitor monitor) throws CModelException {
|
||||||
|
manager.addCCNature(project, monitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeCNature(IProject project, IProgressMonitor monitor) throws CModelException {
|
||||||
|
manager.removeCNature(project, monitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeCCNature(IProject project, IProgressMonitor monitor) throws CModelException {
|
||||||
|
manager.removeCCNature(project, monitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addNature(IProject project, String natureId, IProgressMonitor monitor)
|
||||||
|
throws CModelException {
|
||||||
|
manager.addNature(project, natureId, monitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeNature(IProject project, String natureId, IProgressMonitor monitor)
|
||||||
|
throws CModelException {
|
||||||
|
manager.removeNature(project, natureId, monitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the singleton.
|
||||||
|
*/
|
||||||
|
public static CoreModel getDefault() {
|
||||||
|
if (cmodel == null) {
|
||||||
|
cmodel = new CoreModel();
|
||||||
|
manager = CModelManager.getDefault();
|
||||||
|
}
|
||||||
|
return cmodel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addElementChangedListener(IElementChangedListener listener) {
|
||||||
|
manager.addElementChangedListener(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the given element changed listener.
|
||||||
|
* Has no affect if an identical listener is not registered.
|
||||||
|
*
|
||||||
|
* @param listener the listener
|
||||||
|
*/
|
||||||
|
public static void removeElementChangedListener(IElementChangedListener listener) {
|
||||||
|
manager.removeElementChangedListener(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CoreModel() {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
import java.util.EventObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An element changed event describes a change to the structure or contents
|
||||||
|
* of a tree of C elements. The changes to the elements are described by
|
||||||
|
* the associated delta object carried by this event.
|
||||||
|
*
|
||||||
|
* @see IElementChangedListener
|
||||||
|
* @see ICElementDelta
|
||||||
|
*/
|
||||||
|
public class ElementChangedEvent extends EventObject {
|
||||||
|
/**
|
||||||
|
* Creates an new element changed event (based on a <code>ICElementDelta</code>).
|
||||||
|
*
|
||||||
|
* @param delta the C element delta.
|
||||||
|
*/
|
||||||
|
public ElementChangedEvent(ICElementDelta delta) {
|
||||||
|
super(delta);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Returns the delta describing the change.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public ICElementDelta getDelta() {
|
||||||
|
return (ICElementDelta) source;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,188 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.core.model.IConstants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility class for decoding modifier flags in C elements.
|
||||||
|
* <p>
|
||||||
|
* This class provides static methods only; it is not intended to be
|
||||||
|
* instantiated or subclassed by clients.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final class Flags {
|
||||||
|
/**
|
||||||
|
* Not instantiable.
|
||||||
|
*/
|
||||||
|
private Flags() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the <code>abstract</code> modifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the <code>abstract</code> modifier is included
|
||||||
|
*/
|
||||||
|
public static boolean isAbstract(int flags) {
|
||||||
|
return (flags & IConstants.AccAbstract) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Return whether the give integer include the keyword <code>export</code> modifier.
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the element is <code>export</code>
|
||||||
|
*/
|
||||||
|
public static boolean isExport(int flags) {
|
||||||
|
return (flags & IConstants.AccExport) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the <code>inline</code> modifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the <code>inline</code> modifier is included
|
||||||
|
*/
|
||||||
|
public static boolean isInline(int flags) {
|
||||||
|
return (flags & IConstants.AccInline) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the <code>explicit</code> modifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if <code>explicit</code> modifier is included
|
||||||
|
*/
|
||||||
|
public static boolean isExplicit(int flags) {
|
||||||
|
return (flags & IConstants.AccExplicit) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the <code>private</code> modifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the <code>private</code> modifier is included
|
||||||
|
*/
|
||||||
|
public static boolean isPrivate(int flags) {
|
||||||
|
return (flags & IConstants.AccPrivate) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the <code>protected</code> modifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the <code>protected</code> modifier is included
|
||||||
|
*/
|
||||||
|
public static boolean isProtected(int flags) {
|
||||||
|
return (flags & IConstants.AccProtected) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the <code>public</code> modifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the <code>public</code> modifier is included
|
||||||
|
*/
|
||||||
|
public static boolean isPublic(int flags) {
|
||||||
|
return (flags & IConstants.AccPublic) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the <code>static</code> modifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the <code>static</code> modifier is included
|
||||||
|
*/
|
||||||
|
public static boolean isStatic(int flags) {
|
||||||
|
return (flags & IConstants.AccStatic) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the <code>extern</code> modifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the <code>extern</code> modifier is included
|
||||||
|
*/
|
||||||
|
public static boolean isExtern(int flags) {
|
||||||
|
return (flags & IConstants.AccExtern) != 0;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the <code>mutable</code> modifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the <code>mutable</code> modifier is included
|
||||||
|
*/
|
||||||
|
public static boolean isMutable(int flags) {
|
||||||
|
return (flags & IConstants.AccMutable) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the indication that the
|
||||||
|
* element is a register storage specifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the element is marked register storage specifier
|
||||||
|
*/
|
||||||
|
public static boolean isRegister(int flags) {
|
||||||
|
return (flags & IConstants.AccRegister) != 0;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the <code>virtual</code> modifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the <code>virtual</code> modifier is included
|
||||||
|
*/
|
||||||
|
public static boolean isVirtual(int flags) {
|
||||||
|
return (flags & IConstants.AccVirtual) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given integer includes the <code>volatile</code> modifier.
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return <code>true</code> if the <code>volatile</code> modifier is included
|
||||||
|
*/
|
||||||
|
public static boolean isVolatile(int flags) {
|
||||||
|
return (flags & IConstants.AccVolatile) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a standard string describing the given modifier flags.
|
||||||
|
* Only modifier flags are included in the output; the deprecated and
|
||||||
|
* synthetic flags are ignored if set.
|
||||||
|
* <p>
|
||||||
|
* Examples results:
|
||||||
|
* <pre>
|
||||||
|
* <code>"public static"</code>
|
||||||
|
* <code>"private"</code>
|
||||||
|
* </pre>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param flags the flags
|
||||||
|
* @return the standard string representation of the given flags
|
||||||
|
*/
|
||||||
|
public static String toString(int flags) {
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
|
||||||
|
if (isPublic(flags)) sb.append("public "); //$NON-NLS-1$
|
||||||
|
if (isProtected(flags)) sb.append("protected "); //$NON-NLS-1$
|
||||||
|
if (isPrivate(flags)) sb.append("private "); //$NON-NLS-1$
|
||||||
|
if (isStatic(flags)) sb.append("static "); //$NON-NLS-1$
|
||||||
|
if (isAbstract(flags)) sb.append("abstract "); //$NON-NLS-1$
|
||||||
|
if (isVirtual(flags)) sb.append("virtual "); //$NON-NLS-1$
|
||||||
|
if (isInline(flags)) sb.append("inline "); //$NON-NLS-1$
|
||||||
|
if (isExtern(flags)) sb.append("extern "); //$NON-NLS-1$
|
||||||
|
if (isExport(flags)) sb.append("export "); //$NON-NLS-1$
|
||||||
|
if (isVolatile(flags)) sb.append("volatile "); //$NON-NLS-1$
|
||||||
|
if (isExplicit(flags)) sb.append("explicit "); //$NON-NLS-1$
|
||||||
|
|
||||||
|
int len = sb.length();
|
||||||
|
if (len == 0) return ""; //$NON-NLS-1$
|
||||||
|
sb.setLength(len-1);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An IArchive represents a group of files combined into a
|
||||||
|
* single file(the Archive), for example libxx.a.
|
||||||
|
*/
|
||||||
|
public interface IArchive extends ICFile {
|
||||||
|
/**
|
||||||
|
* Return the binaries contain in the archive.
|
||||||
|
* It does not actually extract the files.
|
||||||
|
*/
|
||||||
|
public IBinary[] getBinaries();
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a container of all the IArchive's found in the project
|
||||||
|
* while inspecting the project.
|
||||||
|
*/
|
||||||
|
public interface IArchiveContainer extends IParent, ICElement {
|
||||||
|
public IArchive[] getArchives();
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Binary file, for example an ELF excutable.
|
||||||
|
* An ELF parser will inspect the binary.
|
||||||
|
*/
|
||||||
|
public interface IBinary extends ICFile {
|
||||||
|
/**
|
||||||
|
* Return whether the file was compiling with debug symbols.
|
||||||
|
*/
|
||||||
|
public boolean hasDebug();
|
||||||
|
|
||||||
|
public boolean isExecutable();
|
||||||
|
|
||||||
|
public boolean isObject();
|
||||||
|
|
||||||
|
public boolean isSharedLib();
|
||||||
|
|
||||||
|
public String [] getNeededSharedLibs();
|
||||||
|
|
||||||
|
public String getSoname();
|
||||||
|
|
||||||
|
public String getCPU();
|
||||||
|
|
||||||
|
public long getText();
|
||||||
|
|
||||||
|
public long getData();
|
||||||
|
|
||||||
|
public long getBSS();
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a container of all the IBinary's found in the project
|
||||||
|
* while inspecting the project.
|
||||||
|
*/
|
||||||
|
public interface IBinaryContainer extends IParent, ICElement {
|
||||||
|
|
||||||
|
public IBinary[] getBinaries();
|
||||||
|
}
|
|
@ -0,0 +1,289 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common protocol for all elements provided by the C model.
|
||||||
|
*/
|
||||||
|
public interface ICElement extends IAdaptable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IResource from 10-20
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant representing a C Root workspace (IWorkspaceRoot object).
|
||||||
|
* A C element with this type can be safely cast to <code>ICRoot</code>.
|
||||||
|
*/
|
||||||
|
public static final int C_ROOT = 10;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant representing a C project(IProject object).
|
||||||
|
* A C element with this type can be safely cast to <code>ICProject</code>.
|
||||||
|
*/
|
||||||
|
public static final int C_PROJECT = 11;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant representing a folder(ICFolder object).
|
||||||
|
* A C element with this type can be safely cast to <code>ICFolder</code>.
|
||||||
|
*/
|
||||||
|
public static final int C_FOLDER = 12;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant representing a file(ICFile object).
|
||||||
|
* A C element with this type can be safely cast to <code>ICFile</code>.
|
||||||
|
*/
|
||||||
|
public static final int C_FILE = 13;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Virtual container serving as a place holder.
|
||||||
|
*/
|
||||||
|
public static final int C_CONTAINER = 30;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant representing a C/C++ children of a Translation Unit
|
||||||
|
*/
|
||||||
|
public static final int C_UNIT = 60;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Namespace.
|
||||||
|
*/
|
||||||
|
public static final int C_NAMESPACE = 61;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Using.
|
||||||
|
*/
|
||||||
|
public static final int C_USING = 62;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enumeration.
|
||||||
|
*/
|
||||||
|
public static final int C_ENUMERATION = 63;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant representing a class structure.
|
||||||
|
*/
|
||||||
|
public static final int C_CLASS = 64;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant representing a struct structure.
|
||||||
|
*/
|
||||||
|
public static final int C_STRUCT = 65;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant representing a union structure.
|
||||||
|
*/
|
||||||
|
public static final int C_UNION = 66;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A method definition part of a structure(class, struct, union).
|
||||||
|
*/
|
||||||
|
public static final int C_METHOD = 67;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A method declaration part of a structure(class, struct, union).
|
||||||
|
*/
|
||||||
|
public static final int C_METHOD_DECLARATION = 68;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Field definition part of a structure(class, struct, union).
|
||||||
|
*/
|
||||||
|
public static final int C_FIELD = 69;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a C/C++ function prototype.
|
||||||
|
*/
|
||||||
|
public static final int C_FUNCTION_DECLARATION = 70;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a C/C++ function.
|
||||||
|
*/
|
||||||
|
public static final int C_FUNCTION = 71;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Preprocessor #include directive.
|
||||||
|
*/
|
||||||
|
public static final int C_INCLUDE = 72;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* C++ template class.
|
||||||
|
*/
|
||||||
|
public static final int C_TEMPLATE = 73;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Global variable.
|
||||||
|
*/
|
||||||
|
public static final int C_VARIABLE = 74;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* variable Declaration.
|
||||||
|
*/
|
||||||
|
public static final int C_VARIABLE_DECLARATION = 75;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Local Variable.
|
||||||
|
*/
|
||||||
|
public static final int C_VARIABLE_LOCAL = 76;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A preprocessor macro.
|
||||||
|
*/
|
||||||
|
public static final int C_MACRO = 77;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a Typedef.
|
||||||
|
*/
|
||||||
|
public static final int C_TYPEDEF = 78;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifier indicating a class constructor
|
||||||
|
*/
|
||||||
|
public static final int C_CLASS_CTOR = 0x100;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifier indicating a class destructor
|
||||||
|
*/
|
||||||
|
public static final int C_CLASS_DTOR = 0x200;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifier indicating a static storage attribute
|
||||||
|
*/
|
||||||
|
public static final int C_STORAGE_STATIC = 0x400;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifier indicating an extern storage attribute
|
||||||
|
*/
|
||||||
|
public static final int C_STORAGE_EXTERN = 0x800;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifier indicating a private class
|
||||||
|
*/
|
||||||
|
public static final int CPP_PRIVATE = 0x1000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifier indicating a public class
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static final int CPP_PUBLIC = 0x2000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifier indicating a friend class
|
||||||
|
*/
|
||||||
|
public static final int CPP_FRIEND = 0x4000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this C element exists in the model.
|
||||||
|
*
|
||||||
|
* @return <code>true</code> if this element exists in the C model
|
||||||
|
*/
|
||||||
|
boolean exists();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the resource that corresponds directly to this element,
|
||||||
|
* or <code>null</code> if there is no resource that corresponds to
|
||||||
|
* this element.
|
||||||
|
* <p>
|
||||||
|
* For example, the corresponding resource for an <code>ATranslationUnit</code>
|
||||||
|
* is its underlying <code>IFile</code>.
|
||||||
|
*
|
||||||
|
* @return the corresponding resource, or <code>null</code> if none
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource
|
||||||
|
*/
|
||||||
|
IResource getCorrespondingResource() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name of this element.
|
||||||
|
*
|
||||||
|
* @return the element name
|
||||||
|
*/
|
||||||
|
String getElementName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns this element's kind encoded as an integer.
|
||||||
|
* This is a handle-only method.
|
||||||
|
*
|
||||||
|
* @return the kind of element; one of the constants declared in
|
||||||
|
* <code>ICElement</code>
|
||||||
|
* @see ICElement
|
||||||
|
*/
|
||||||
|
public int getElementType();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the C model.
|
||||||
|
*
|
||||||
|
* @return the C model
|
||||||
|
*/
|
||||||
|
ICRoot getCRoot();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the C project this element is contained in,
|
||||||
|
* or <code>null</code> if this element is not contained in any C project
|
||||||
|
*
|
||||||
|
* @return the containing C project, or <code>null</code> if this element is
|
||||||
|
* not contained in a C project
|
||||||
|
*/
|
||||||
|
ICProject getCProject();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the element directly containing this element,
|
||||||
|
* or <code>null</code> if this element has no parent.
|
||||||
|
*
|
||||||
|
* @return the parent element, or <code>null</code> if this element has no parent
|
||||||
|
*/
|
||||||
|
ICElement getParent();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the path to the innermost resource enclosing this element.
|
||||||
|
* If this element is not included in an external archive,
|
||||||
|
* the path returned is the full, absolute path to the underlying resource,
|
||||||
|
* relative to the workbench.
|
||||||
|
* If this element is included in an external archive,
|
||||||
|
* the path returned is the absolute path to the archive in the file system.
|
||||||
|
* This is a handle-only method.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
IPath getPath();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the underlying resource that contains
|
||||||
|
* this element, or <code>null</code> if this element is not contained
|
||||||
|
* in a resource.
|
||||||
|
*
|
||||||
|
* @return the underlying resource, or <code>null</code> if none
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its underlying resource
|
||||||
|
*/
|
||||||
|
IResource getUnderlyingResource() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this C element is read-only. An element is read-only
|
||||||
|
* if its structure cannot be modified by the C model.
|
||||||
|
*
|
||||||
|
* @return <code>true</code> if this element is read-only
|
||||||
|
*/
|
||||||
|
boolean isReadOnly();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the structure of this element is known. For example, for a
|
||||||
|
* translation unit that could not be parsed, <code>false</code> is returned.
|
||||||
|
* If the structure of an element is unknown, navigations will return reasonable
|
||||||
|
* defaults. For example, <code>getChildren</code> will return an empty collection.
|
||||||
|
* <p>
|
||||||
|
* Note: This does not imply anything about consistency with the
|
||||||
|
* underlying resource/buffer contents.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @return <code>true</code> if the structure of this element is known
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource
|
||||||
|
*/
|
||||||
|
boolean isStructureKnown() throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,187 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
import org.eclipse.core.resources.IResourceDelta;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C element delta describes changes in C element between two discrete
|
||||||
|
* points in time. Given a delta, clients can access the element that has
|
||||||
|
* changed, and any children that have changed.
|
||||||
|
* <p>
|
||||||
|
* Deltas have a different status depending on the kind of change they represent.
|
||||||
|
* The list below summarizes each status (as returned by <code>getKind</code>)
|
||||||
|
* and its meaning:
|
||||||
|
* <ul>
|
||||||
|
* <li><code>ADDED</code> - The element described by the delta
|
||||||
|
* has been added.
|
||||||
|
* <li><code>REMOVED</code> - The element described by the delta
|
||||||
|
* has been removed.
|
||||||
|
* <li><code>CHANGED</code> - The element described by the delta
|
||||||
|
* has been changed in some way.
|
||||||
|
* </li>
|
||||||
|
* </ul>
|
||||||
|
* <p>
|
||||||
|
* Move operations are indicated by other change flags, layered on top
|
||||||
|
* of the change flags described above. If element A is moved to become B,
|
||||||
|
* the delta for the change in A will have status <code>REMOVED</code>,
|
||||||
|
* with change flag <code>F_MOVED_TO</code>. In this case,
|
||||||
|
* <code>getMovedToElement</code> on delta A will return the handle for B.
|
||||||
|
* The delta for B will have status <code>ADDED</code>, with change flag
|
||||||
|
* <code>F_MOVED_FROM</code>, and <code>getMovedFromElement</code> on delta
|
||||||
|
* B will return the handle for A. (Note, the handle to A in this case represents
|
||||||
|
* an element that no longer exists).
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Note that the move change flags only describe the changes to a single element, they
|
||||||
|
* do not imply anything about the parent or children of the element.
|
||||||
|
*/
|
||||||
|
public interface ICElementDelta {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that the element has been added.
|
||||||
|
*/
|
||||||
|
public int ADDED = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that the element has been removed.
|
||||||
|
*/
|
||||||
|
public int REMOVED = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that the element has been changed,
|
||||||
|
* as described by the change flags.
|
||||||
|
*/
|
||||||
|
public int CHANGED = 4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change flag indicating that the content of the element has changed.
|
||||||
|
*/
|
||||||
|
public int F_CONTENT = 0x0001;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change flag indicating that the modifiers of the element have changed.
|
||||||
|
*/
|
||||||
|
public int F_MODIFIERS = 0x0002;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change flag indicating that there are changes to the children of the element.
|
||||||
|
*/
|
||||||
|
public int F_CHILDREN = 0x0008;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change flag indicating that the element was moved from another location.
|
||||||
|
* The location of the old element can be retrieved using <code>getMovedFromElement</code>.
|
||||||
|
*/
|
||||||
|
public int F_MOVED_FROM = 0x0010;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change flag indicating that the element was moved to another location.
|
||||||
|
* The location of the new element can be retrieved using <code>getMovedToElement</code>.
|
||||||
|
*/
|
||||||
|
public int F_MOVED_TO = 0x0020;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change flag indicating that the underlying <code>IProject</code> has been
|
||||||
|
* opened.
|
||||||
|
*/
|
||||||
|
public int F_OPENED = 0x0200;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change flag indicating that the underlying <code>IProject</code> has been
|
||||||
|
* closed.
|
||||||
|
*/
|
||||||
|
public int F_CLOSED = 0x0400;
|
||||||
|
|
||||||
|
//public int F_ADDED_TO_CLASSPATH = 0x0040;
|
||||||
|
//public int F_REMOVED_FROM_CLASSPATH = 0x0080;
|
||||||
|
//public int F_CLASSPATH_REORDER = 0x0100;
|
||||||
|
//public int F_SUPER_TYPES = 0x0800;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change flag indicating that a source jar has been attached to a binary jar.
|
||||||
|
*/
|
||||||
|
public int F_SOURCEATTACHED = 0x1000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change flag indicating that a source jar has been detached to a binary jar.
|
||||||
|
*/
|
||||||
|
public int F_SOURCEDETACHED = 0x2000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change flag indicating that this is a fine-grained delta, i.e. an analysis down
|
||||||
|
* to the members level was done to determine if there were structural changes to
|
||||||
|
* members.
|
||||||
|
*/
|
||||||
|
public int F_FINE_GRAINED = 0x4000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns deltas for the children that have been added.
|
||||||
|
*/
|
||||||
|
public ICElementDelta[] getAddedChildren();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns deltas for the affected (added, removed, or changed) children.
|
||||||
|
*/
|
||||||
|
public ICElementDelta[] getAffectedChildren();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns deltas for the children which have changed.
|
||||||
|
*/
|
||||||
|
public ICElementDelta[] getChangedChildren();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the element that this delta describes a change to.
|
||||||
|
*/
|
||||||
|
public ICElement getElement();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns flags that describe how an element has changed.
|
||||||
|
*
|
||||||
|
* @see ICElementDelta#F_CHILDREN
|
||||||
|
* @see ICElementDelta#F_CONTENT
|
||||||
|
* @see ICElementDelta#F_MODIFIERS
|
||||||
|
* @see ICElementDelta#F_MOVED_FROM
|
||||||
|
* @see ICElementDelta#F_MOVED_TO
|
||||||
|
*/
|
||||||
|
public int getFlags();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the kind of this delta - one of <code>ADDED</code>, <code>REMOVED</code>,
|
||||||
|
* or <code>CHANGED</code>.
|
||||||
|
*/
|
||||||
|
public int getKind();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an element describing this element before it was moved
|
||||||
|
* to its current location, or <code>null</code> if the
|
||||||
|
* <code>F_MOVED_FROM</code> change flag is not set.
|
||||||
|
*/
|
||||||
|
public ICElement getMovedFromElement();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an element describing this element in its new location,
|
||||||
|
* or <code>null</code> if the <code>F_MOVED_TO</code> change
|
||||||
|
* flag is not set.
|
||||||
|
*/
|
||||||
|
public ICElement getMovedToElement();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns deltas for the children which have been removed.
|
||||||
|
*/
|
||||||
|
public ICElementDelta[] getRemovedChildren();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the collection of resource deltas.
|
||||||
|
* <p>
|
||||||
|
* Note that resource deltas, like C element deltas, are generally only valid
|
||||||
|
* for the dynamic scope of an event notification. Clients must not hang on to
|
||||||
|
* these objects.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @return the underlying resource deltas, or <code>null</code> if none
|
||||||
|
*/
|
||||||
|
public IResourceDelta[] getResourceDeltas();
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C File Resource.
|
||||||
|
*/
|
||||||
|
public interface ICFile extends IParent, ICElement {
|
||||||
|
|
||||||
|
public boolean isBinary();
|
||||||
|
|
||||||
|
public boolean isArchive();
|
||||||
|
|
||||||
|
public boolean isTranslationUnit();
|
||||||
|
|
||||||
|
public IFile getFile();
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C Folder Resource.
|
||||||
|
*/
|
||||||
|
public interface ICFolder extends IParent, ICElement {
|
||||||
|
|
||||||
|
public IFolder getFolder();
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.CCorePlugin;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Markers used by the C model.
|
||||||
|
* <p>
|
||||||
|
* This interface declares constants only; it is not intended to be implemented
|
||||||
|
* or extended.
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public interface ICModelMarker {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* C model problem marker type (value <code>"org.eclipse.cdt.core.problem"</code>).
|
||||||
|
* This can be used to recognize those markers in the workspace that flag problems
|
||||||
|
* detected by the C ompilers.
|
||||||
|
*/
|
||||||
|
public static final String C_MODEL_PROBLEM_MARKER = CCorePlugin.PLUGIN_ID + ".problem"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* C model extension to the marker problem markers which may hold a hint on
|
||||||
|
* the variable name that caused the error. Used by the ui to highlight the variable
|
||||||
|
* itself if it can be found.
|
||||||
|
*/
|
||||||
|
public static final String C_MODEL_MARKER_VARIABLE = "problem.variable"; //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the outcome of an C model operation. Status objects are
|
||||||
|
* used inside <code>CModelException</code> objects to indicate what went
|
||||||
|
* wrong.
|
||||||
|
* <p>
|
||||||
|
* C model status object are distinguished by their plug-in id:
|
||||||
|
* <code>getPlugin</code> returns <code>"org.eclipse.cdt.core"</code>.
|
||||||
|
* <code>getCode</code> returns one of the status codes declared in
|
||||||
|
* <code>ICModelStatusConstants</code>.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* A C model status may also carry additional information (that is, in
|
||||||
|
* addition to the information defined in <code>IStatus</code>):
|
||||||
|
* <ul>
|
||||||
|
* <li>elements - optional handles to C elements associated with the failure</li>
|
||||||
|
* <li>string - optional string associated with the failure</li>
|
||||||
|
* </ul>
|
||||||
|
* <p>
|
||||||
|
* This interface is not intended to be implemented by clients.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @see org.eclipse.core.runtime.IStatus
|
||||||
|
* @see ICModelStatusConstants
|
||||||
|
*/
|
||||||
|
public interface ICModelStatus extends IStatus {
|
||||||
|
/**
|
||||||
|
* Returns any C elements associated with the failure (see specification
|
||||||
|
* of the status code), or an empty array if no elements are related to this
|
||||||
|
* particular status code.
|
||||||
|
*
|
||||||
|
* @return the list of C element culprits
|
||||||
|
* @see ICModelStatusConstants
|
||||||
|
*/
|
||||||
|
ICElement[] getElements();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the path associated with the failure (see specification
|
||||||
|
* of the status code), or <code>null</code> if the failure is not
|
||||||
|
* one of <code>DEVICE_PATH</code>, <code>INVALID_PATH</code>,
|
||||||
|
* <code>PATH_OUTSIDE_PROJECT</code>, or <code>RELATIVE_PATH</code>.
|
||||||
|
*
|
||||||
|
* @return the path that caused the failure, or <code>null</code> if none
|
||||||
|
* @see ICModelStatusConstants#DEVICE_PATH
|
||||||
|
* @see ICModelStatusConstants#INVALID_PATH
|
||||||
|
* @see ICModelStatusConstants#PATH_OUTSIDE_PROJECT
|
||||||
|
* @see ICModelStatusConstants#RELATIVE_PATH
|
||||||
|
*/
|
||||||
|
IPath getPath();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the string associated with the failure (see specification
|
||||||
|
* of the status code), or <code>null</code> if no string is related to this
|
||||||
|
* particular status code.
|
||||||
|
*
|
||||||
|
* @return the string culprit, or <code>null</code> if none
|
||||||
|
* @see ICModelStatusConstants
|
||||||
|
*/
|
||||||
|
String getString();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this status indicates that a C model element does not exist.
|
||||||
|
* This convenience method is equivalent to
|
||||||
|
* <code>getCode() == ICModelStatusConstants.ELEMENT_DOES_NOT_EXIST</code>.
|
||||||
|
*
|
||||||
|
* @return <code>true</code> if the status code indicates that a C model
|
||||||
|
* element does not exist
|
||||||
|
* @see ICModelStatusConstants#ELEMENT_DOES_NOT_EXIST
|
||||||
|
*/
|
||||||
|
boolean doesNotExist();
|
||||||
|
}
|
|
@ -0,0 +1,224 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status codes used with C model status objects.
|
||||||
|
* <p>
|
||||||
|
* This interface declares constants only; it is not intended to be implemented
|
||||||
|
* or extended.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @see ICModelStatus
|
||||||
|
* @see org.eclipse.core.runtime.IStatus#getCode
|
||||||
|
*/
|
||||||
|
public interface ICModelStatusConstants {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a variable path was not resolvable
|
||||||
|
* indicating either the referred variable is undefined, unbound or the resolved
|
||||||
|
* variable path does not correspond to an existing file or folder.
|
||||||
|
*/
|
||||||
|
public static final int CP_VARIABLE_PATH_UNBOUND = 965;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating a core exception occurred.
|
||||||
|
* Use <code>getException</code> to retrieve a <code>CoreException</code>.
|
||||||
|
*/
|
||||||
|
public static final int CORE_EXCEPTION = 966;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating one or more of the elements
|
||||||
|
* supplied are not of a valid type for the operation to
|
||||||
|
* process.
|
||||||
|
* The element(s) can be retrieved using <code>getElements</code> on the status object.
|
||||||
|
*/
|
||||||
|
public static final int INVALID_ELEMENT_TYPES = 967;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that no elements were
|
||||||
|
* provided to the operation for processing.
|
||||||
|
*/
|
||||||
|
public static final int NO_ELEMENTS_TO_PROCESS = 968;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that one or more elements
|
||||||
|
* supplied do not exist.
|
||||||
|
* The element(s) can be retrieved using <code>getElements</code> on the status object.
|
||||||
|
*
|
||||||
|
* @see ICModelStatus#isDoesNotExist
|
||||||
|
*/
|
||||||
|
public static final int ELEMENT_DOES_NOT_EXIST = 969;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a <code>null</code> path was
|
||||||
|
* supplied to the operation.
|
||||||
|
*/
|
||||||
|
public static final int NULL_PATH = 970;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a path outside of the
|
||||||
|
* project was supplied to the operation. The path can be retrieved using
|
||||||
|
* <code>getPath</code> on the status object.
|
||||||
|
*/
|
||||||
|
public static final int PATH_OUTSIDE_PROJECT = 971;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a relative path
|
||||||
|
* was supplied to the operation when an absolute path is
|
||||||
|
* required. The path can be retrieved using <code>getPath</code> on the
|
||||||
|
* status object.
|
||||||
|
*/
|
||||||
|
public static final int RELATIVE_PATH = 972;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a path specifying a device
|
||||||
|
* was supplied to the operation when a path with no device is
|
||||||
|
* required. The path can be retrieved using <code>getPath</code> on the
|
||||||
|
* status object.
|
||||||
|
*/
|
||||||
|
public static final int DEVICE_PATH = 973;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a string
|
||||||
|
* was supplied to the operation that was <code>null</code>.
|
||||||
|
*/
|
||||||
|
public static final int NULL_STRING = 974;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that the operation encountered
|
||||||
|
* a read-only element.
|
||||||
|
* The element(s) can be retrieved using <code>getElements</code> on the status object.
|
||||||
|
*/
|
||||||
|
public static final int READ_ONLY = 976;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a naming collision would occur
|
||||||
|
* if the operation proceeded.
|
||||||
|
*/
|
||||||
|
public static final int NAME_COLLISION = 977;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a destination provided for a copy/move/rename operation
|
||||||
|
* is invalid.
|
||||||
|
* The destination element can be retrieved using <code>getElements</code> on the status object.
|
||||||
|
*/
|
||||||
|
public static final int INVALID_DESTINATION = 978;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a path provided to an operation
|
||||||
|
* is invalid. The path can be retrieved using <code>getPath</code> on the
|
||||||
|
* status object.
|
||||||
|
*/
|
||||||
|
public static final int INVALID_PATH = 979;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating the given source position is out of bounds.
|
||||||
|
*/
|
||||||
|
public static final int INDEX_OUT_OF_BOUNDS = 980;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating there is an update conflict
|
||||||
|
* for a working copy. The translation unit on which the
|
||||||
|
* working copy is based has changed since the working copy
|
||||||
|
* was created.
|
||||||
|
*/
|
||||||
|
public static final int UPDATE_CONFLICT = 981;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that <code>null</code> was specified
|
||||||
|
* as a name argument.
|
||||||
|
*/
|
||||||
|
public static final int NULL_NAME = 982;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a name provided is not syntactically correct.
|
||||||
|
* The name can be retrieved from <code>getString</code>.
|
||||||
|
*/
|
||||||
|
public static final int INVALID_NAME = 983;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that the specified contents
|
||||||
|
* are not valid.
|
||||||
|
*/
|
||||||
|
public static final int INVALID_CONTENTS = 984;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that an <code>java.io.IOException</code>
|
||||||
|
* occurred.
|
||||||
|
*/
|
||||||
|
public static final int IO_EXCEPTION = 985;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a <code>DOMException</code>
|
||||||
|
* occurred.
|
||||||
|
*/
|
||||||
|
public static final int DOM_EXCEPTION = 986;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a <code>TargetException</code>
|
||||||
|
* occurred.
|
||||||
|
*/
|
||||||
|
public static final int TARGET_EXCEPTION = 987;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that the C builder
|
||||||
|
* could not be initialized.
|
||||||
|
*/
|
||||||
|
public static final int BUILDER_INITIALIZATION_ERROR = 990;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that the C builder's last built state
|
||||||
|
* could not be serialized or deserialized.
|
||||||
|
*/
|
||||||
|
public static final int BUILDER_SERIALIZATION_ERROR = 991;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that an error was encountered while
|
||||||
|
* trying to evaluate a code snippet, or other item.
|
||||||
|
*/
|
||||||
|
public static final int EVALUATION_ERROR = 992;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status constant indicating that a sibling specified is not valid.
|
||||||
|
*/
|
||||||
|
public static final int INVALID_SIBLING = 993;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status indicating that a C element could not be created because
|
||||||
|
* the underlying resource is invalid.
|
||||||
|
* @see CCore
|
||||||
|
*/
|
||||||
|
public static final int INVALID_RESOURCE = 995;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status indicating that a C element could not be created because
|
||||||
|
* the underlying resource is not of an appropriate type.
|
||||||
|
* @see CCore
|
||||||
|
*/
|
||||||
|
public static final int INVALID_RESOURCE_TYPE = 996;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status indicating that a C element could not be created because
|
||||||
|
* the project owning underlying resource does not have the C nature.
|
||||||
|
* @see CCore
|
||||||
|
*/
|
||||||
|
public static final int INVALID_PROJECT = 997;
|
||||||
|
|
||||||
|
//public static final int INVALID_NAMESPACE = 998;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status indicating that the corresponding resource has no local contents yet.
|
||||||
|
* This might happen when attempting to use a resource before its contents
|
||||||
|
* has been made locally available.
|
||||||
|
*/
|
||||||
|
public static final int NO_LOCAL_CONTENTS = 999;
|
||||||
|
|
||||||
|
///**
|
||||||
|
//* Status constant indicating that a classpath entry was invalid
|
||||||
|
//*/
|
||||||
|
//public static final int INVALID_CLASSPATH = 964;
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C project represents a view of a project resource in terms of C
|
||||||
|
* elements such as ICFile, ICFolder ....
|
||||||
|
* <code>CCore.create(project)</code>.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @see CCore#create(org.eclipse.core.resources.IProject)
|
||||||
|
* @see IBuildEntry
|
||||||
|
*/
|
||||||
|
public interface ICProject extends IParent, ICElement {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the <code>ICElement</code> corresponding to the given
|
||||||
|
* path, or <code>null</code> if no such
|
||||||
|
* <code>ICElement</code> is found.
|
||||||
|
*
|
||||||
|
* @exception CModelException if the given path is <code>null</code>
|
||||||
|
* or absolute
|
||||||
|
*/
|
||||||
|
ICElement findElement(IPath path) throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the ArchiveContainer of this Project.
|
||||||
|
*/
|
||||||
|
IArchiveContainer getArchiveContainer();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the BinaryContainer of this Project.
|
||||||
|
*/
|
||||||
|
IBinaryContainer getBinaryContainer();
|
||||||
|
|
||||||
|
IProject getProject();
|
||||||
|
}
|
|
@ -0,0 +1,179 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
|
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represent the root C element corresponding to the workspace.
|
||||||
|
* Since there is only one such root element, it is commonly referred to as
|
||||||
|
* <em>the</em> C model element.
|
||||||
|
* The C model element needs to be opened before it can be navigated or manipulated.
|
||||||
|
* The C model element has no parent (it is the root of the C element
|
||||||
|
* hierarchy). Its children are <code>ICProject</code>s.
|
||||||
|
* <p>
|
||||||
|
* This interface provides methods for performing copy, move, rename, and
|
||||||
|
* delete operations on multiple C elements.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @see CCore#create(org.eclipse.core.resources.IWorkspaceRoot)
|
||||||
|
*/
|
||||||
|
public interface ICRoot extends ICElement, IParent {
|
||||||
|
/**
|
||||||
|
* Copies the given elements to the specified container(s).
|
||||||
|
* If one container is specified, all elements are copied to that
|
||||||
|
* container. If more than one container is specified, the number of
|
||||||
|
* elements and containers must match, and each element is copied to
|
||||||
|
* its associated container.
|
||||||
|
* <p>
|
||||||
|
* Optionally, each copy can positioned before a sibling
|
||||||
|
* element. If <code>null</code> is specified for a given sibling, the copy
|
||||||
|
* is inserted as the last child of its associated container.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Optionally, each copy can be renamed. If
|
||||||
|
* <code>null</code> is specified for the new name, the copy
|
||||||
|
* is not renamed.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Optionally, any existing child in the destination container with
|
||||||
|
* the same name can be replaced by specifying <code>true</code> for
|
||||||
|
* force. Otherwise an exception is thrown in the event that a name
|
||||||
|
* collision occurs.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param elements the elements to copy
|
||||||
|
* @param containers the container, or list of containers
|
||||||
|
* @param siblings the list of siblings element any of which may be
|
||||||
|
* <code>null</code>; or <code>null</code>
|
||||||
|
* @param renamings the list of new names any of which may be
|
||||||
|
* <code>null</code>; or <code>null</code>
|
||||||
|
* @param replace <code>true</code> if any existing child in a target container
|
||||||
|
* with the target name should be replaced, and <code>false</code> to throw an
|
||||||
|
* exception in the event of a name collision
|
||||||
|
* @param monitor a progress monitor
|
||||||
|
* @exception CModelException if an element could not be copied. Reasons include:
|
||||||
|
* <ul>
|
||||||
|
* <li> A specified element, container, or sibling does not exist (ELEMENT_DOES_NOT_EXIST)</li>
|
||||||
|
* <li> A <code>CoreException</code> occurred while updating an underlying resource
|
||||||
|
* <li> A container is of an incompatible type (<code>INVALID_DESTINATION</code>)
|
||||||
|
* <li> A sibling is not a child of it associated container (<code>INVALID_SIBLING</code>)
|
||||||
|
* <li> A new name is invalid (<code>INVALID_NAME</code>)
|
||||||
|
* <li> A child in its associated container already exists with the same
|
||||||
|
* name and <code>replace</code> has been specified as <code>false</code> (<code>NAME_COLLISION</code>)
|
||||||
|
* <li> A container or element is read-only (<code>READ_ONLY</code>)
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
void copy(ICElement[] elements, ICElement[] containers, ICElement[] siblings, String[] renamings, boolean replace, IProgressMonitor monitor) throws CModelException;
|
||||||
|
/**
|
||||||
|
* Deletes the given elements, forcing the operation if necessary and specified.
|
||||||
|
*
|
||||||
|
* @param elements the elements to delete
|
||||||
|
* @param force a flag controlling whether underlying resources that are not
|
||||||
|
* in sync with the local file system will be tolerated
|
||||||
|
* @param monitor a progress monitor
|
||||||
|
* @exception CModelException if an element could not be deleted. Reasons include:
|
||||||
|
* <ul>
|
||||||
|
* <li> A specified element does not exist (ELEMENT_DOES_NOT_EXIST)</li>
|
||||||
|
* <li> A <code>CoreException</code> occurred while updating an underlying resource
|
||||||
|
* <li> An element is read-only (<code>READ_ONLY</code>)
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
void delete(ICElement[] elements, boolean force, IProgressMonitor monitor) throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves the given elements to the specified container(s).
|
||||||
|
* If one container is specified, all elements are moved to that
|
||||||
|
* container. If more than one container is specified, the number of
|
||||||
|
* elements and containers must match, and each element is moved to
|
||||||
|
* its associated container.
|
||||||
|
* <p>
|
||||||
|
* Optionally, each element can positioned before a sibling
|
||||||
|
* element. If <code>null</code> is specified for sibling, the element
|
||||||
|
* is inserted as the last child of its associated container.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Optionally, each element can be renamed. If
|
||||||
|
* <code>null</code> is specified for the new name, the element
|
||||||
|
* is not renamed.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Optionally, any existing child in the destination container with
|
||||||
|
* the same name can be replaced by specifying <code>true</code> for
|
||||||
|
* force. Otherwise an exception is thrown in the event that a name
|
||||||
|
* collision occurs.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param elements the elements to move
|
||||||
|
* @param containers the container, or list of containers
|
||||||
|
* @param siblings the list of siblings element any of which may be
|
||||||
|
* <code>null</code>; or <code>null</code>
|
||||||
|
* @param renamings the list of new names any of which may be
|
||||||
|
* <code>null</code>; or <code>null</code>
|
||||||
|
* @param replace <code>true</code> if any existing child in a target container
|
||||||
|
* with the target name should be replaced, and <code>false</code> to throw an
|
||||||
|
* exception in the event of a name collision
|
||||||
|
* @param monitor a progress monitor
|
||||||
|
* @exception CModelException if an element could not be moved. Reasons include:
|
||||||
|
* <ul>
|
||||||
|
* <li> A specified element, container, or sibling does not exist (ELEMENT_DOES_NOT_EXIST)</li>
|
||||||
|
* <li> A <code>CoreException</code> occurred while updating an underlying resource
|
||||||
|
* <li> A container is of an incompatible type (<code>INVALID_DESTINATION</code>)
|
||||||
|
* <li> A sibling is not a child of it associated container (<code>INVALID_SIBLING</code>)
|
||||||
|
* <li> A new name is invalid (<code>INVALID_NAME</code>)
|
||||||
|
* <li> A child in its associated container already exists with the same
|
||||||
|
* name and <code>replace</code> has been specified as <code>false</code> (<code>NAME_COLLISION</code>)
|
||||||
|
* <li> A container or element is read-only (<code>READ_ONLY</code>)
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @exception IllegalArgumentException any element or container is <code>null</code>
|
||||||
|
*/
|
||||||
|
void move(ICElement[] elements, ICElement[] containers, ICElement[] siblings, String[] renamings, boolean replace, IProgressMonitor monitor) throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renames the given elements as specified.
|
||||||
|
* If one container is specified, all elements are renamed within that
|
||||||
|
* container. If more than one container is specified, the number of
|
||||||
|
* elements and containers must match, and each element is renamed within
|
||||||
|
* its associated container.
|
||||||
|
*
|
||||||
|
* @param elements the elements to rename
|
||||||
|
* @param destinations the container, or list of containers
|
||||||
|
* @param names the list of new names
|
||||||
|
* @param replace <code>true</code> if an existing child in a target container
|
||||||
|
* with the target name should be replaced, and <code>false</code> to throw an
|
||||||
|
* exception in the event of a name collision
|
||||||
|
* @param monitor a progress monitor
|
||||||
|
* @exception CModelException if an element could not be renamed. Reasons include:
|
||||||
|
* <ul>
|
||||||
|
* <li> A specified element does not exist (ELEMENT_DOES_NOT_EXIST)</li>
|
||||||
|
* <li> A <code>CoreException</code> occurred while updating an underlying resource
|
||||||
|
* <li> A new name is invalid (<code>INVALID_NAME</code>)
|
||||||
|
* <li> A child already exists with the same name and <code>replace</code> has been specified as <code>false</code> (<code>NAME_COLLISION</code>)
|
||||||
|
* <li> An element is read-only (<code>READ_ONLY</code>)
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
void rename(ICElement[] elements, ICElement[] destinations, String[] names, boolean replace, IProgressMonitor monitor) throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the C project with the given name. This is a handle-only method.
|
||||||
|
* The project may or may not exist.
|
||||||
|
*/
|
||||||
|
ICProject getCProject(String name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the C projects.
|
||||||
|
*/
|
||||||
|
ICProject[] getCProjects();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the workspace associated with this C model.
|
||||||
|
*/
|
||||||
|
IWorkspace getWorkspace();
|
||||||
|
|
||||||
|
IWorkspaceRoot getRoot();
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An element changed listener receives notification of changes to C elements
|
||||||
|
* maintained by the C model.
|
||||||
|
*/
|
||||||
|
public interface IElementChangedListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notifies that one or more attributes of one or more C elements have changed.
|
||||||
|
* The specific details of the change are described by the given event.
|
||||||
|
*
|
||||||
|
* @param event the change event
|
||||||
|
*/
|
||||||
|
public void elementChanged(ElementChangedEvent event);
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An Enumeration type.
|
||||||
|
*/
|
||||||
|
public interface IEnumeration extends IVariable {
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a field(variable) declared in an IStructure(struct, class, union).
|
||||||
|
*/
|
||||||
|
public interface IField extends IMember, IVariable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this storage specifier is mutable for the member.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
public boolean isMutable() throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a function.
|
||||||
|
*/
|
||||||
|
public interface IFunction extends ICElement, ISourceReference, ISourceManipulation {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the exceptions this method throws, in the order declared in the source.
|
||||||
|
* or an empty array if this method throws no exceptions.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declaring <code>"void f(int a) throw (x2, x3);"</code>,
|
||||||
|
* would return the array <code>{"x2", "x3"}</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public String[] getExceptions() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of parameters of this method.
|
||||||
|
*/
|
||||||
|
public int getNumberOfParameters();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the initializer of parameters pos for this method.
|
||||||
|
* Returns an empty string if this argument has no initializer.
|
||||||
|
*
|
||||||
|
* <p>For example, a method declared as <code>void foo(String text, int length=9)</code>
|
||||||
|
* would return the array <code>{"9"}</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this argument does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
public String getParameterInitializer(int pos);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type signatures for the parameters of this method.
|
||||||
|
* Returns an empty array if this method has no parameters.
|
||||||
|
* This is a handle-only method.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declared as <code>void foo(string text, int length)</code>
|
||||||
|
* would return the array <code>{"string","int"}</code>.
|
||||||
|
*
|
||||||
|
* @see Signature
|
||||||
|
*/
|
||||||
|
public String[] getParameterTypes();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type signature of the return value of this method.
|
||||||
|
* For constructors, this returns the signature for void.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declared as <code>int getName()</code>
|
||||||
|
* would return <code>"int"</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*
|
||||||
|
* @see Signature
|
||||||
|
*/
|
||||||
|
public String getReturnType() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the access Control of the member. The value can be
|
||||||
|
* can be examined using class <code>Flags</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
* @see Flags
|
||||||
|
*/
|
||||||
|
public int getAccessControl() throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,80 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a function
|
||||||
|
*/
|
||||||
|
public interface IFunctionDeclaration extends ICElement, ISourceReference, ISourceManipulation {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type signatures of the exceptions this method throws,
|
||||||
|
* in the order declared in the source. Returns an empty array
|
||||||
|
* if this method throws no exceptions.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declaring <code>"void f(int a) throw (x1, x2);"</code>,
|
||||||
|
* would return the array <code>{"x1", "x2"}</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*
|
||||||
|
* @see Signature
|
||||||
|
*/
|
||||||
|
String[] getExceptions() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of parameters of this method.
|
||||||
|
*/
|
||||||
|
int getNumberOfParameters();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the initializer of parameters position for this method.
|
||||||
|
* Returns an empty string if this argument has no initializer.
|
||||||
|
*
|
||||||
|
* <p>For example, a method declared as <code>public void foo(String text, int length=9)</code>
|
||||||
|
* would return the array <code>{"9"}</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this argument does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
String getParameterInitializer(int pos);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type signatures for the parameters of this method.
|
||||||
|
* Returns an empty array if this method has no parameters.
|
||||||
|
* This is a handle-only method.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declared as <code>void foo(string text, int length)</code>
|
||||||
|
* would return the array <code>{"string","int"}</code>.
|
||||||
|
*
|
||||||
|
* @see Signature
|
||||||
|
*/
|
||||||
|
String[] getParameterTypes();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type signature of the return value of this method.
|
||||||
|
* For constructors, this returns the signature for void.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declared as <code>public String getName()</code>
|
||||||
|
* would return <code>"String"</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*
|
||||||
|
* @see Signature
|
||||||
|
*/
|
||||||
|
String getReturnType() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the access Control of the member. The access qualifier
|
||||||
|
* can be examine using the AccessControl class.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
* @see IAccessControl
|
||||||
|
*/
|
||||||
|
int getAccessControl() throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an include declaration in a C translation unit.
|
||||||
|
*/
|
||||||
|
public interface IInclude extends ICElement, ISourceReference, ISourceManipulation {
|
||||||
|
/**
|
||||||
|
* Returns the name that of the included file.
|
||||||
|
* For example, for the statement <code>"#include <stdio.h></code>,
|
||||||
|
* this returns <code>"stdio.h"</code>.
|
||||||
|
*/
|
||||||
|
String getIncludeName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the included was search on "standard places" like /usr/include first .
|
||||||
|
* An include is standard if it starts with <code>"\<"</code>.
|
||||||
|
* For example, <code>"#include \<stdio.h\>"</code> returns true and
|
||||||
|
* <code>"#include "foobar.h"</code> returns false.
|
||||||
|
*/
|
||||||
|
boolean isStandard();
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Place holder of the inherited class from struct or class(IStructure).
|
||||||
|
*/
|
||||||
|
public interface IInheritance {
|
||||||
|
/**
|
||||||
|
* Return the inherited structures.
|
||||||
|
*/
|
||||||
|
public IStructure [] getBaseTypes() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the access control for each inherited structure.
|
||||||
|
*/
|
||||||
|
public int getAccessControl(int pos) throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public interface ILibraryReference extends IParent, ICElement {
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a field declared in a type.
|
||||||
|
*/
|
||||||
|
public interface IMacro extends ICElement, ISourceManipulation, ISourceReference {
|
||||||
|
String getIdentifierList();
|
||||||
|
String getTokenSequence();
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common protocol for C elements that can be members of types.
|
||||||
|
* This set consists of <code>IType</code>, <code>IMethod</code>,
|
||||||
|
* <code>IField</code>.
|
||||||
|
*/
|
||||||
|
public interface IMember extends ICElement, ISourceReference, ISourceManipulation {
|
||||||
|
|
||||||
|
///**
|
||||||
|
//* Returns the structure in which this member is declared, or <code>null</code>
|
||||||
|
//* if this member is not declared in a type (for example, a top-level type).
|
||||||
|
//*/
|
||||||
|
//IStructure belongsTo() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the member as class scope.
|
||||||
|
* For example static methods in C++ have class scope
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
public boolean hasClassScope() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this method/field is declared constant.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
public boolean isConst() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the access Control of the member. The access qualifier
|
||||||
|
* can be examine using the AccessControl class.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
* @see IAccessControl
|
||||||
|
*/
|
||||||
|
public int getAccessControl() throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,117 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the definition method of a class.
|
||||||
|
*/
|
||||||
|
public interface IMethod extends IMember {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type signatures of the exceptions this method throws,
|
||||||
|
* in the order declared in the source. Returns an empty array
|
||||||
|
* if this method throws no exceptions.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declaring <code>"throws IOException"</code>,
|
||||||
|
* would return the array <code>{"QIOException;"}</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*
|
||||||
|
* @see Signature
|
||||||
|
*/
|
||||||
|
String[] getExceptions() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of parameters of this method.
|
||||||
|
*/
|
||||||
|
int getNumberOfParameters();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the initializer of parameters pos for this method.
|
||||||
|
* Returns an empty string if this argument has no initializer.
|
||||||
|
*
|
||||||
|
* <p>For example, a method declared as <code>public void foo(String text, int length=9)</code>
|
||||||
|
* would return the array <code>{"9"}</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this argument does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
String getParameterInitializer(int pos);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type signatures for the parameters of this method.
|
||||||
|
* Returns an empty array if this method has no parameters.
|
||||||
|
* This is a handle-only method.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declared as <code>void foo(String text, int length)</code>
|
||||||
|
* would return the array <code>{"String","int"}</code>.
|
||||||
|
*
|
||||||
|
* @see Signature
|
||||||
|
*/
|
||||||
|
String[] getParameterTypes();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type signature of the return value of this method.
|
||||||
|
* For constructors, this returns the signature for void.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declared as <code>public String getName()</code>
|
||||||
|
* would return <code>"String"</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*
|
||||||
|
* @see Signature
|
||||||
|
*/
|
||||||
|
String getReturnType() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this method is a constructor.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
boolean isConstructor() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this method is a destructor.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
boolean isDestructor() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this method is an operator method.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
boolean isOperator() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this method is declared pure virtual.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declared as <code>virtual void m() = 0;</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
boolean isAbstract() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this method is declared virtual.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
boolean isVirtual() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return true if the member is a friend.
|
||||||
|
*/
|
||||||
|
public boolean isFriend() throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,117 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the declaration method of a class
|
||||||
|
*/
|
||||||
|
public interface IMethodDeclaration extends IMember {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type signatures of the exceptions this method throws,
|
||||||
|
* in the order declared in the source. Returns an empty array
|
||||||
|
* if this method throws no exceptions.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declaring <code>"throws IOException"</code>,
|
||||||
|
* would return the array <code>{"QIOException;"}</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*
|
||||||
|
* @see Signature
|
||||||
|
*/
|
||||||
|
String[] getExceptions() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of parameters of this method.
|
||||||
|
*/
|
||||||
|
int getNumberOfParameters();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the initializer of parameters pos for this method.
|
||||||
|
* Returns an empty string if this argument has no initializer.
|
||||||
|
*
|
||||||
|
* <p>For example, a method declared as <code>public void foo(String text, int length=9)</code>
|
||||||
|
* would return the array <code>{"9"}</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this argument does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
String getParameterInitializer(int pos);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type signatures for the parameters of this method.
|
||||||
|
* Returns an empty array if this method has no parameters.
|
||||||
|
* This is a handle-only method.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declared as <code>void foo(String text, int length)</code>
|
||||||
|
* would return the array <code>{"String","int"}</code>.
|
||||||
|
*
|
||||||
|
* @see Signature
|
||||||
|
*/
|
||||||
|
String[] getParameterTypes();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type signature of the return value of this method.
|
||||||
|
* For constructors, this returns the signature for void.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declared as <code>public String getName()</code>
|
||||||
|
* would return <code>"String"</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*
|
||||||
|
* @see Signature
|
||||||
|
*/
|
||||||
|
String getReturnType() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this method is a constructor.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
boolean isConstructor() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this method is a destructor.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
boolean isDestructor() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this method is an operator method.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
boolean isOperator() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this method is declared pure virtual.
|
||||||
|
*
|
||||||
|
* <p>For example, a source method declared as <code>virtual void m() = 0;</code>.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
boolean isAbstract() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this method is declared virtual.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource.
|
||||||
|
*/
|
||||||
|
boolean isVirtual() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return true if the member is a friend.
|
||||||
|
*/
|
||||||
|
public boolean isFriend() throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a package declaration in a C translation unit.
|
||||||
|
*/
|
||||||
|
public interface INamespace extends ICElement, ISourceManipulation, ISourceReference {
|
||||||
|
/**
|
||||||
|
* Returns the name of the package the statement refers to.
|
||||||
|
* This is a handle-only method.
|
||||||
|
*/
|
||||||
|
String getElementName();
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common protocol for C elements that contain other C elements.
|
||||||
|
*/
|
||||||
|
public interface IParent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the immediate children of this element.
|
||||||
|
* The children are in no particular order.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource
|
||||||
|
*/
|
||||||
|
ICElement[] getChildren(); //throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this element has one or more immediate children.
|
||||||
|
* This is a convenience method, and may be more efficient than
|
||||||
|
* testing whether <code>getChildren</code> is an empty array.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource
|
||||||
|
*/
|
||||||
|
boolean hasChildren(); //throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,109 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common protocol for C elements that support source code manipulations such
|
||||||
|
* as copy, move, rename, and delete.
|
||||||
|
*/
|
||||||
|
public interface ISourceManipulation {
|
||||||
|
/**
|
||||||
|
* Copies this element to the given container.
|
||||||
|
*
|
||||||
|
* @param container the container
|
||||||
|
* @param sibling the sibling element before which the copy should be inserted,
|
||||||
|
* or <code>null</code> if the copy should be inserted as the last child of
|
||||||
|
* the container
|
||||||
|
* @param rename the new name for the element, or <code>null</code> if the copy
|
||||||
|
* retains the name of this element
|
||||||
|
* @param replace <code>true</code> if any existing child in the container with
|
||||||
|
* the target name should be replaced, and <code>false</code> to throw an
|
||||||
|
* exception in the event of a name collision
|
||||||
|
* @param monitor a progress monitor
|
||||||
|
* @exception CModelException if this element could not be copied. Reasons include:
|
||||||
|
* <ul>
|
||||||
|
* <li> This C element, container element, or sibling does not exist (ELEMENT_DOES_NOT_EXIST)</li>
|
||||||
|
* <li> A <code>CoreException</code> occurred while updating an underlying resource
|
||||||
|
* <li> The container is of an incompatible type (INVALID_DESTINATION)
|
||||||
|
* <li> The sibling is not a child of the given container (INVALID_SIBLING)
|
||||||
|
* <li> The new name is invalid (INVALID_NAME)
|
||||||
|
* <li> A child in the container already exists with the same name (NAME_COLLISION)
|
||||||
|
* and <code>replace</code> has been specified as <code>false</code>
|
||||||
|
* <li> The container or this element is read-only (READ_ONLY)
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @exception IllegalArgumentException if container is <code>null</code>
|
||||||
|
*/
|
||||||
|
void copy(ICElement container, ICElement sibling, String rename, boolean replace, IProgressMonitor monitor) throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes this element, forcing if specified and necessary.
|
||||||
|
*
|
||||||
|
* @param force a flag controlling whether underlying resources that are not
|
||||||
|
* in sync with the local file system will be tolerated (same as the force flag
|
||||||
|
* in IResource operations).
|
||||||
|
* @param monitor a progress monitor
|
||||||
|
* @exception CModelException if this element could not be deleted. Reasons include:
|
||||||
|
* <ul>
|
||||||
|
* <li> This C element does not exist (ELEMENT_DOES_NOT_EXIST)</li>
|
||||||
|
* <li> A <code>CoreException</code> occurred while updating an underlying resource (CORE_EXCEPTION)</li>
|
||||||
|
* <li> This element is read-only (READ_ONLY)</li>
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
void delete(boolean force, IProgressMonitor monitor) throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves this element to the given container.
|
||||||
|
*
|
||||||
|
* @param container the container
|
||||||
|
* @param sibling the sibling element before which the element should be inserted,
|
||||||
|
* or <code>null</code> if the element should be inserted as the last child of
|
||||||
|
* the container
|
||||||
|
* @param rename the new name for the element, or <code>null</code> if the
|
||||||
|
* element retains its name
|
||||||
|
* @param replace <code>true</code> if any existing child in the container with
|
||||||
|
* the target name should be replaced, and <code>false</code> to throw an
|
||||||
|
* exception in the event of a name collision
|
||||||
|
* @param monitor a progress monitor
|
||||||
|
* @exception CModelException if this element could not be moved. Reasons include:
|
||||||
|
* <ul>
|
||||||
|
* <li> This C element, container element, or sibling does not exist (ELEMENT_DOES_NOT_EXIST)</li>
|
||||||
|
* <li> A <code>CoreException</code> occurred while updating an underlying resource
|
||||||
|
* <li> The container is of an incompatible type (INVALID_DESTINATION)
|
||||||
|
* <li> The sibling is not a child of the given container (INVALID_SIBLING)
|
||||||
|
* <li> The new name is invalid (INVALID_NAME)
|
||||||
|
* <li> A child in the container already exists with the same name (NAME_COLLISION)
|
||||||
|
* and <code>replace</code> has been specified as <code>false</code>
|
||||||
|
* <li> The container or this element is read-only (READ_ONLY)
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @exception IllegalArgumentException if container is <code>null</code>
|
||||||
|
*/
|
||||||
|
|
||||||
|
void move(ICElement container, ICElement sibling, String rename, boolean replace, IProgressMonitor monitor) throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renames this element to the given name.
|
||||||
|
*
|
||||||
|
* @param name the new name for the element
|
||||||
|
* @param replace <code>true</code> if any existing element with the target name
|
||||||
|
* should be replaced, and <code>false</code> to throw an exception in the
|
||||||
|
* event of a name collision
|
||||||
|
* @param monitor a progress monitor
|
||||||
|
* @exception CModelException if this element could not be renamed. Reasons include:
|
||||||
|
* <ul>
|
||||||
|
* <li> This C element does not exist (ELEMENT_DOES_NOT_EXIST)</li>
|
||||||
|
* <li> A <code>CoreException</code> occurred while updating an underlying resource
|
||||||
|
* <li> The new name is invalid (INVALID_NAME)
|
||||||
|
* <li> A child in the container already exists with the same name (NAME_COLLISION)
|
||||||
|
* and <code>replace</code> has been specified as <code>false</code>
|
||||||
|
* <li> This element is read-only (READ_ONLY)
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
void rename(String name, boolean replace, IProgressMonitor monitor) throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A source range defines an element's source coordinates
|
||||||
|
*/
|
||||||
|
public interface ISourceRange {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the 0-based starting position of this element.
|
||||||
|
*/
|
||||||
|
public int getStartPos();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of characters of the source code for this element.
|
||||||
|
*/
|
||||||
|
public int getLength();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the Id starting position of this element.
|
||||||
|
*/
|
||||||
|
public int getIdStartPos();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of characters of the Id for this element.
|
||||||
|
*/
|
||||||
|
public int getIdLength();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the 1-based starting line of this element.
|
||||||
|
*/
|
||||||
|
public int getStartLine();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the 1-based ending line of this element.
|
||||||
|
*/
|
||||||
|
public int getEndLine();
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common protocol for C elements that have associated source code.
|
||||||
|
* <p>
|
||||||
|
* Note: For <code>IBinary</code>, <code>IArchive</code> and other members
|
||||||
|
* derived from a binary type, the implementation returns source iff the
|
||||||
|
* element has attached source code and debuging information.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface ISourceReference {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the source code associated with this element.
|
||||||
|
* <p>
|
||||||
|
* For binary files, this returns the source of the entire translation unit
|
||||||
|
* associated with the binary file (if there is one).
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @return the source code, or <code>null</code> if this element has no
|
||||||
|
* associated source code
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource
|
||||||
|
*/
|
||||||
|
String getSource() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the source range associated with this element.
|
||||||
|
* <p>
|
||||||
|
* For binary files, this returns the range of the entire translation unit
|
||||||
|
* associated with the binary file (if there is one).
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @return the source range, or <code>null</code> if if this element has no
|
||||||
|
* associated source code
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource
|
||||||
|
*/
|
||||||
|
ISourceRange getSourceRange() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the translation unit in which this member is declared, or <code>null</code>
|
||||||
|
* if this member is not declared in a translation unit (for example, a binary type).
|
||||||
|
*/
|
||||||
|
ITranslationUnit getTranslationUnit();
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represent struct(ure), class or union.
|
||||||
|
*/
|
||||||
|
public interface IStructure extends IInheritance, IParent, ICElement, IVariable {
|
||||||
|
//public String instantiatesTemplate();
|
||||||
|
|
||||||
|
public IField getField(String name);
|
||||||
|
public IField[] getFields();
|
||||||
|
|
||||||
|
public IMethod getMethod(String name);
|
||||||
|
public IMethod [] getMethods();
|
||||||
|
|
||||||
|
public boolean isUnion();
|
||||||
|
|
||||||
|
public boolean isClass();
|
||||||
|
|
||||||
|
public boolean isStruct();
|
||||||
|
|
||||||
|
public boolean isAbstract();
|
||||||
|
}
|
|
@ -0,0 +1,120 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an entire C translation unit (<code>.c</code> source file).
|
||||||
|
* The children are of type <code>IStructureElement</code>,
|
||||||
|
* <code>IInclude</code>, etc..
|
||||||
|
* and appear in the order in which they are declared in the source.
|
||||||
|
* If a <code>.c</code> file cannot be parsed, its structure remains unknown.
|
||||||
|
* Use <code>ICElement.isStructureKnown</code> to determine whether this is
|
||||||
|
* the case.
|
||||||
|
*/
|
||||||
|
public interface ITranslationUnit extends ICFile , ISourceReference, ISourceManipulation {
|
||||||
|
/**
|
||||||
|
* Creates and returns an include declaration in this translation unit
|
||||||
|
* with the given name.
|
||||||
|
* <p>
|
||||||
|
* Optionally, the new element can be positioned before the specified
|
||||||
|
* sibling. If no sibling is specified, the element will be inserted
|
||||||
|
* as the last import declaration in this translation unit.
|
||||||
|
* <p>
|
||||||
|
* If the translation unit already includes the specified include declaration,
|
||||||
|
* the import is not generated (it does not generate duplicates).
|
||||||
|
*
|
||||||
|
* @param name the name of the include declaration to add (For example: <code>"stdio.h"</code> or
|
||||||
|
* <code>"sys/types.h"</code>)
|
||||||
|
* @param sibling the existing element which the include declaration will be inserted immediately before (if
|
||||||
|
* <code> null </code>, then this include will be inserted as the last include declaration.
|
||||||
|
* @param monitor the progress monitor to notify
|
||||||
|
* @return the newly inserted include declaration (or the previously existing one in case attempting to create a duplicate)
|
||||||
|
*
|
||||||
|
* @exception CModelException if the element could not be created. Reasons include:
|
||||||
|
* <ul>
|
||||||
|
* <li> This C element does not exist or the specified sibling does not exist (ELEMENT_DOES_NOT_EXIST)</li>
|
||||||
|
* <li> A <code>CoreException</code> occurred while updating an underlying resource
|
||||||
|
* <li> The specified sibling is not a child of this translation unit (INVALID_SIBLING)
|
||||||
|
* <li> The name is not a valid import name (INVALID_NAME)
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
IInclude createInclude(String name, ICElement sibling, IProgressMonitor monitor) throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and returns a namesapce declaration in this translation unit
|
||||||
|
* with the given package name.
|
||||||
|
*
|
||||||
|
* <p>If the translation unit already includes the specified package declaration,
|
||||||
|
* it is not generated (it does not generate duplicates).
|
||||||
|
*
|
||||||
|
* @param name the name of the namespace declaration to add (For example, <code>"std"</code>)
|
||||||
|
* @param monitor the progress monitor to notify
|
||||||
|
* @return the newly inserted namespace declaration (or the previously existing one in case attempting to create a duplicate)
|
||||||
|
*
|
||||||
|
* @exception CModelException if the element could not be created. Reasons include:
|
||||||
|
* <ul>
|
||||||
|
* <li>This C element does not exist (ELEMENT_DOES_NOT_EXIST)</li>
|
||||||
|
* <li> A <code>CoreException</code> occurred while updating an underlying resource
|
||||||
|
* <li> The name is not a valid package name (INVALID_NAME)
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
IUsing createUsing (String name, IProgressMonitor monitor) throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smallest element within this translation unit that
|
||||||
|
* includes the given source position (that is, a method, field, etc.), or
|
||||||
|
* <code>null</code> if there is no element other than the translation
|
||||||
|
* unit itself at the given position, or if the given position is not
|
||||||
|
* within the source range of this translation unit.
|
||||||
|
*
|
||||||
|
* @param position a source position inside the translation unit
|
||||||
|
* @return the innermost C element enclosing a given source position or <code>null</code>
|
||||||
|
* if none (excluding the translation unit).
|
||||||
|
* @exception CModelException if the translation unit does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource
|
||||||
|
*/
|
||||||
|
ICElement getElementAtLine(int line) throws CModelException;
|
||||||
|
|
||||||
|
ICElement getElement(String name) throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the include declaration in this translation unit with the given name.
|
||||||
|
*
|
||||||
|
* @param the name of the include to find (For example: <code>"stdio.h"</code>
|
||||||
|
* or <code>"sys/types.h"</code>)
|
||||||
|
* @return a handle onto the corresponding include declaration. The include declaration may or may not exist.
|
||||||
|
*/
|
||||||
|
IInclude getInclude(String name) ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the include declarations in this translation unit
|
||||||
|
* in the order in which they appear in the source.
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource
|
||||||
|
*/
|
||||||
|
IInclude[] getIncludes() throws CModelException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first namespace declaration in this translation unit with the given package name
|
||||||
|
* This is a handle-only method. The namespace declaration may or may not exist.
|
||||||
|
*
|
||||||
|
* @param name the name of the namespace declaration (For example, <code>"std"</code>)
|
||||||
|
*/
|
||||||
|
IUsing getUsing(String name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the namespace declarations in this translation unit
|
||||||
|
* in the order in which they appear in the source.
|
||||||
|
*
|
||||||
|
* @return an array of namespace declaration (normally of size one)
|
||||||
|
*
|
||||||
|
* @exception CModelException if this element does not exist or if an
|
||||||
|
* exception occurs while accessing its corresponding resource
|
||||||
|
*/
|
||||||
|
IUsing[] getUsings() throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a field declared in a type.
|
||||||
|
*/
|
||||||
|
public interface ITypeDef extends ICElement, ISourceManipulation, ISourceReference {
|
||||||
|
/**
|
||||||
|
* Return the type beeing alias.
|
||||||
|
*/
|
||||||
|
String getType() throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a "using" declaration in C translation unit.
|
||||||
|
*/
|
||||||
|
public interface IUsing extends ICElement, ISourceManipulation, ISourceReference {
|
||||||
|
/**
|
||||||
|
* Returns the name of the package the statement refers to.
|
||||||
|
* This is a handle-only method.
|
||||||
|
*/
|
||||||
|
String getElementName();
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a global variable.
|
||||||
|
*/
|
||||||
|
public interface IVariable extends ICElement , ISourceManipulation, ISourceReference {
|
||||||
|
public String getType();
|
||||||
|
public String getInitializer();
|
||||||
|
public int getAccessControl() throws CModelException;
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the declaration of a variable.
|
||||||
|
*/
|
||||||
|
public interface IVariableDeclaration extends ICElement, ISourceManipulation, ISourceReference {
|
||||||
|
|
||||||
|
public String getType ();
|
||||||
|
public int getAccesControl();
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright IBM Corp. 2000, 2001.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a static variable.
|
||||||
|
*/
|
||||||
|
public interface IVariableLocal extends IVariable {
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
package org.eclipse.cdt.internal.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.IArchive;
|
||||||
|
import org.eclipse.cdt.core.model.IBinary;
|
||||||
|
|
||||||
|
public class Archive extends CFile implements IArchive {
|
||||||
|
|
||||||
|
public Archive(ICElement parent, IFile file) {
|
||||||
|
super(parent, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Archive(ICElement parent, IPath path) {
|
||||||
|
super (parent, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isReadOnly() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isArchive() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IBinary[] getBinaries() {
|
||||||
|
return (IBinary[])getChildren();
|
||||||
|
}
|
||||||
|
|
||||||
|
public CElementInfo createElementInfo() {
|
||||||
|
return new ArchiveInfo(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ArchiveInfo getArchiveInfo() {
|
||||||
|
return (ArchiveInfo)getElementInfo();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
package org.eclipse.cdt.internal.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IFolder;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.IArchive;
|
||||||
|
import org.eclipse.cdt.core.model.IArchiveContainer;
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
|
||||||
|
public class ArchiveContainer extends Parent implements IArchiveContainer {
|
||||||
|
|
||||||
|
CProject cProject;
|
||||||
|
private long modificationStamp;
|
||||||
|
|
||||||
|
public ArchiveContainer (CProject cProject) {
|
||||||
|
super (cProject, null, "lib", CElement.C_CONTAINER);
|
||||||
|
this.cProject = cProject;
|
||||||
|
IProject project = cProject.getProject();
|
||||||
|
IFolder folder = project.getFolder("Virtual.lib");
|
||||||
|
setUnderlyingResource(folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IArchive[] getArchives() {
|
||||||
|
ICElement[] e = getChildren(false);
|
||||||
|
IArchive[] a = new IArchive[e.length];
|
||||||
|
System.arraycopy(e, 0, a, 0, e.length);
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasChildren() {
|
||||||
|
return (getChildren().length > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICElement [] getChildren() {
|
||||||
|
return getChildren(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICElement [] getChildren(boolean sync) {
|
||||||
|
if (!cProject.hasRunElf()) {
|
||||||
|
// It is vital to set this to true first, if not we are going to loop
|
||||||
|
cProject.setRunElf(true);
|
||||||
|
ElfRunner runner = new ElfRunner(cProject);
|
||||||
|
Thread thread = new Thread(runner, "Archive Runner");
|
||||||
|
// thread.setPriority(Thread.NORM_PRIORITY - 1);
|
||||||
|
thread.setDaemon(true);
|
||||||
|
thread.start();
|
||||||
|
if (sync) {
|
||||||
|
try {
|
||||||
|
thread.join();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.getChildren();
|
||||||
|
}
|
||||||
|
|
||||||
|
//public IResource getUnderlyingResource() {
|
||||||
|
// return null;
|
||||||
|
//}
|
||||||
|
|
||||||
|
public IResource getCorrespondingResource() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
void addChildIfLib(IFile file) {
|
||||||
|
CModelManager factory = CModelManager.getDefault();
|
||||||
|
if (factory.isArchive(file)) {
|
||||||
|
ICElement celement = factory.create(file);
|
||||||
|
if (celement != null) {
|
||||||
|
if (celement instanceof IArchive) {
|
||||||
|
addChild (celement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CElementInfo createElementInfo() {
|
||||||
|
return new CElementInfo(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
package org.eclipse.cdt.internal.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.utils.elf.AR;
|
||||||
|
import org.eclipse.cdt.utils.elf.ElfHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Info for ICProject.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ArchiveInfo extends CFileInfo {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public ArchiveInfo(CElement element) {
|
||||||
|
super(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICElement [] getChildren() {
|
||||||
|
init();
|
||||||
|
return super.getChildren();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init() {
|
||||||
|
if (hasChanged()) {
|
||||||
|
removeChildren();
|
||||||
|
loadInfo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isArchive() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void loadInfo() {
|
||||||
|
IPath location = ((CFile)getElement()).getLocation();
|
||||||
|
IFile file = ((CFile)getElement()).getFile();
|
||||||
|
try {
|
||||||
|
AR ar = new AR(location.toOSString());
|
||||||
|
AR.ARHeader[] header = ar.getHeaders();
|
||||||
|
for (int i = 0; i < header.length; i++) {
|
||||||
|
ElfHelper helper = new ElfHelper(header[i].getElf());
|
||||||
|
//IPath path = new Path(header[i].getObjectName());
|
||||||
|
// FIXME: We should create a special IResource for this files
|
||||||
|
// but for now, just bypass.
|
||||||
|
Binary binary = new Binary(getElement(), file, header[i].getObjectName()) {
|
||||||
|
public IResource getCorrespondingResource() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// Force the loading so we can dispose;
|
||||||
|
((BinaryInfo)(binary.getElementInfo())).elfHelper = helper;
|
||||||
|
// Force the loading of the chidren right away so we can
|
||||||
|
// dispose of the elf Elper.
|
||||||
|
binary.getChildren();
|
||||||
|
((BinaryInfo)(binary.getElementInfo())).elfHelper = null;
|
||||||
|
helper.dispose();
|
||||||
|
addChild(binary);
|
||||||
|
}
|
||||||
|
ar.dispose();
|
||||||
|
} catch (IOException e) {
|
||||||
|
//e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,80 @@
|
||||||
|
package org.eclipse.cdt.internal.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.IBinary;
|
||||||
|
|
||||||
|
public class Binary extends CFile implements IBinary {
|
||||||
|
|
||||||
|
public Binary(ICElement parent, IFile file) {
|
||||||
|
super(parent, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Binary(ICElement parent, IPath path) {
|
||||||
|
super (parent, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Binary(ICElement parent, IFile file, String name) {
|
||||||
|
super(parent, file, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isReadOnly () {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isBinary() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasDebug () {
|
||||||
|
return ((BinaryInfo)getElementInfo()).hasDebug();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isExecutable() {
|
||||||
|
return ((BinaryInfo)getElementInfo()).isExecutable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isObject() {
|
||||||
|
return ((BinaryInfo)getElementInfo()).isObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSharedLib() {
|
||||||
|
return ((BinaryInfo)getElementInfo()).isSharedLib();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String [] getNeededSharedLibs() {
|
||||||
|
return ((BinaryInfo)getElementInfo()).getNeededSharedLibs();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCPU() {
|
||||||
|
return ((BinaryInfo)getElementInfo()).getCPU();
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getText() {
|
||||||
|
return ((BinaryInfo)getElementInfo()).getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getData() {
|
||||||
|
return ((BinaryInfo)getElementInfo()).getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getBSS() {
|
||||||
|
return ((BinaryInfo)getElementInfo()).getBSS();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSoname() {
|
||||||
|
return ((BinaryInfo)getElementInfo()).getSoname();
|
||||||
|
}
|
||||||
|
|
||||||
|
public CElementInfo createElementInfo() {
|
||||||
|
return new BinaryInfo(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,147 @@
|
||||||
|
package org.eclipse.cdt.internal.core.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software Systems Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IFolder;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IResourceVisitor;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.IBinary;
|
||||||
|
import org.eclipse.cdt.core.model.IBinaryContainer;
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.ICRoot;
|
||||||
|
|
||||||
|
public class BinaryContainer extends Parent implements IBinaryContainer {
|
||||||
|
|
||||||
|
CProject cProject;
|
||||||
|
private long modificationStamp;
|
||||||
|
|
||||||
|
public BinaryContainer (CProject cProject) {
|
||||||
|
this (cProject, "bin");
|
||||||
|
}
|
||||||
|
|
||||||
|
public BinaryContainer (CProject cProject, String name) {
|
||||||
|
super (cProject, null, name, CElement.C_CONTAINER);
|
||||||
|
this.cProject = cProject;
|
||||||
|
IProject project = cProject.getProject();
|
||||||
|
IFolder folder = project.getFolder("Virtual.bin");
|
||||||
|
setUnderlyingResource(folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IBinary[] getBinaries() {
|
||||||
|
ICElement[] e = getChildren(false);
|
||||||
|
IBinary[] b = new IBinary[e.length];
|
||||||
|
System.arraycopy(e, 0, b, 0, e.length);
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasChildren() {
|
||||||
|
return (getChildren().length > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICElement [] getChildren() {
|
||||||
|
return getChildren(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICElement [] getChildren(boolean sync) {
|
||||||
|
// The first time probe the entire project to discover binaries.
|
||||||
|
if (!cProject.hasRunElf()) {
|
||||||
|
cProject.setRunElf(true);
|
||||||
|
ElfRunner runner = new ElfRunner(cProject);
|
||||||
|
Thread thread = new Thread(runner, "Elf Runner");
|
||||||
|
// thread.setPriority(Thread.NORM_PRIORITY - 1);
|
||||||
|
thread.setDaemon(true);
|
||||||
|
thread.start();
|
||||||
|
if (sync) {
|
||||||
|
try {
|
||||||
|
thread.join();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.getChildren();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IResource getCorrespondingResource() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//public IResource getUnderlyingResource() {
|
||||||
|
// return null;
|
||||||
|
//}
|
||||||
|
|
||||||
|
void addChildIfExec(CoreModel factory, IFile file) {
|
||||||
|
// Attempt to speed things up by rejecting up front
|
||||||
|
// Things we know should not be Elf/Binary files.
|
||||||
|
if (!factory.isTranslationUnit(file)) {
|
||||||
|
ICElement celement = factory.create(file);
|
||||||
|
if (celement != null) {
|
||||||
|
if (celement instanceof IBinary) {
|
||||||
|
IBinary bin = (IBinary)celement;
|
||||||
|
if (bin.isExecutable() || bin.isSharedLib()) {
|
||||||
|
addChild (bin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CElementInfo createElementInfo() {
|
||||||
|
return new CElementInfo(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
class Visitor implements IResourceVisitor {
|
||||||
|
CoreModel factory = CoreModel.getDefault();
|
||||||
|
BinaryContainer cbin;
|
||||||
|
|
||||||
|
public Visitor (BinaryContainer element) {
|
||||||
|
cbin = element;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean visit(IResource res) throws CoreException {
|
||||||
|
if (res instanceof IFile) {
|
||||||
|
cbin.addChildIfExec(factory, (IFile)res);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class BinaryRunnable implements Runnable {
|
||||||
|
BinaryContainer cbin;
|
||||||
|
|
||||||
|
public BinaryRunnable(BinaryContainer element) {
|
||||||
|
cbin = element;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
((IProject)cbin.getCProject().getUnderlyingResource()).accept(new Visitor(cbin));
|
||||||
|
} catch (CoreException e) {
|
||||||
|
//e.printStackTrace();
|
||||||
|
}
|
||||||
|
// Fired the event.
|
||||||
|
ICElement[] children = cbin.getChildren();
|
||||||
|
if (children.length > 0) {
|
||||||
|
CModelManager factory = CModelManager.getDefault();
|
||||||
|
ICElement root = (ICRoot)factory.getCRoot();
|
||||||
|
CElementDelta cdelta = new CElementDelta(root);
|
||||||
|
cdelta.added(cbin.getCProject());
|
||||||
|
cdelta.added(cbin);
|
||||||
|
for (int i = 0; i < children.length; i++) {
|
||||||
|
ICElement child = children[i];
|
||||||
|
cdelta.added(child);
|
||||||
|
}
|
||||||
|
factory.registerCModelDelta(cdelta);
|
||||||
|
factory.fire();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|