mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 17:56:01 +02:00
Fix for PR 91964: Dom Indexer misses give a friend declaration for forward decls. Fixed detection of friend class/struct declaration.
Fix for PR 92060: [DOM Indexer] for C projects only seems to do macros now. Taken a different approach by wrapping calls to IIndexerOutput in anticipation of its soon change.
This commit is contained in:
parent
1c7f6f77c0
commit
2bd5fd9dfa
6 changed files with 400 additions and 229 deletions
|
@ -1,3 +1,16 @@
|
||||||
|
2005-04-21 Vladimir Hirsl
|
||||||
|
Fix for PR 91964: Dom Indexer misses give a friend declaration for forward decls
|
||||||
|
Fixed detection of friend class/struct declaration.
|
||||||
|
Fix for PR 92060: [DOM Indexer] for C projects only seems to do macros now
|
||||||
|
Taken a different approach by wrapping calls to IIndexerOutput in anticipation
|
||||||
|
of its soon change.
|
||||||
|
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/domsourceindexer/CGenerateIndexVisitor.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/domsourceindexer/CPPGenerateIndexerVisitor.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/domsourceindexerDOMSourceIndexerRunner.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/domsourceindexer/IndexerEncoderUtil.java
|
||||||
|
+ index/org/eclipse/cdt/internal/core/index/domsourceindexer/IndexerOutputWrapper.java
|
||||||
|
|
||||||
2005-04-15 Vladimir Hirsl
|
2005-04-15 Vladimir Hirsl
|
||||||
Fix for PR 91405: Search does not find declarations of printf
|
Fix for PR 91405: Search does not find declarations of printf
|
||||||
Index entries form include files external to workspace were erroneously stored
|
Index entries form include files external to workspace were erroneously stored
|
||||||
|
|
|
@ -30,6 +30,7 @@ import org.eclipse.cdt.core.dom.ast.ITypedef;
|
||||||
import org.eclipse.cdt.core.dom.ast.IVariable;
|
import org.eclipse.cdt.core.dom.ast.IVariable;
|
||||||
import org.eclipse.cdt.core.dom.ast.c.CASTVisitor;
|
import org.eclipse.cdt.core.dom.ast.c.CASTVisitor;
|
||||||
import org.eclipse.cdt.internal.core.index.cindexstorage.ICIndexStorageConstants;
|
import org.eclipse.cdt.internal.core.index.cindexstorage.ICIndexStorageConstants;
|
||||||
|
import org.eclipse.cdt.internal.core.index.domsourceindexer.IndexerOutputWrapper.EntryType;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.runtime.Path;
|
import org.eclipse.core.runtime.Path;
|
||||||
|
|
||||||
|
@ -93,12 +94,7 @@ public class CGenerateIndexVisitor extends CASTVisitor {
|
||||||
* @throws DOMException
|
* @throws DOMException
|
||||||
*/
|
*/
|
||||||
private void processName(IASTName name) throws DOMException {
|
private void processName(IASTName name) throws DOMException {
|
||||||
// Quick check to see if the name is a reference in an external header file
|
IBinding binding = name.resolveBinding();
|
||||||
//if (IndexEncoderUtil.nodeInExternalHeader(name) && name.isReference())
|
|
||||||
if (IndexEncoderUtil.nodeInExternalHeader(name))
|
|
||||||
return;
|
|
||||||
|
|
||||||
IBinding binding = name.resolveBinding();
|
|
||||||
// check for IProblemBinding
|
// check for IProblemBinding
|
||||||
if (binding instanceof IProblemBinding) {
|
if (binding instanceof IProblemBinding) {
|
||||||
IProblemBinding problem = (IProblemBinding) binding;
|
IProblemBinding problem = (IProblemBinding) binding;
|
||||||
|
@ -109,7 +105,6 @@ public class CGenerateIndexVisitor extends CASTVisitor {
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the location
|
// Get the location
|
||||||
IASTFileLocation loc = IndexEncoderUtil.getFileLocation(name);
|
IASTFileLocation loc = IndexEncoderUtil.getFileLocation(name);
|
||||||
if (loc != null) {
|
if (loc != null) {
|
||||||
|
@ -143,90 +138,59 @@ public class CGenerateIndexVisitor extends CASTVisitor {
|
||||||
* @param indexFlag
|
* @param indexFlag
|
||||||
* @throws DOMException
|
* @throws DOMException
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private void processNameBinding(IASTName name, IBinding binding, IASTFileLocation loc, int fileNumber) throws DOMException {
|
private void processNameBinding(IASTName name, IBinding binding, IASTFileLocation loc, int fileNumber) throws DOMException {
|
||||||
// determine type
|
// determine type
|
||||||
|
EntryType entryType = null;
|
||||||
if (binding instanceof ICompositeType) {
|
if (binding instanceof ICompositeType) {
|
||||||
int compositeKey = ((ICompositeType) binding).getKey();
|
int compositeKey = ((ICompositeType) binding).getKey();
|
||||||
ASTNodeProperty prop = name.getPropertyInParent();
|
ASTNodeProperty prop = name.getPropertyInParent();
|
||||||
switch (compositeKey) {
|
switch (compositeKey) {
|
||||||
case ICompositeType.k_struct:
|
case ICompositeType.k_struct:
|
||||||
|
entryType = IndexerOutputWrapper.STRUCT;
|
||||||
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
||||||
if (name.isDeclaration()) {
|
entryType = IndexerOutputWrapper.FWD_STRUCT;
|
||||||
indexer.getOutput().addFwd_StructDecl(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (name.isReference()) {
|
|
||||||
indexer.getOutput().addFwd_StructRef(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (name.isDeclaration()) {
|
|
||||||
indexer.getOutput().addStructDecl(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (name.isReference()) {
|
|
||||||
indexer.getOutput().addStructRef(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case ICompositeType.k_union:
|
case ICompositeType.k_union:
|
||||||
|
entryType = IndexerOutputWrapper.UNION;
|
||||||
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
||||||
if (name.isDeclaration()) {
|
entryType = IndexerOutputWrapper.FWD_UNION;
|
||||||
indexer.getOutput().addFwd_UnionDecl(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (name.isReference()) {
|
|
||||||
indexer.getOutput().addFwd_UnionRef(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (name.isDeclaration()) {
|
|
||||||
indexer.getOutput().addUnionDecl(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (name.isReference()) {
|
|
||||||
indexer.getOutput().addUnionRef(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (binding instanceof IEnumeration)
|
else if (binding instanceof IEnumeration)
|
||||||
if (name.isDeclaration()) {
|
entryType = IndexerOutputWrapper.ENUM;
|
||||||
indexer.getOutput().addEnumDecl(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (name.isReference()) {
|
|
||||||
indexer.getOutput().addEnumRef(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (binding instanceof ITypedef)
|
else if (binding instanceof ITypedef)
|
||||||
if (name.isDeclaration()) {
|
entryType = IndexerOutputWrapper.TYPEDEF;
|
||||||
indexer.getOutput().addTypedefDecl(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (name.isReference()) {
|
|
||||||
indexer.getOutput().addTypedefRef(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (binding instanceof IEnumerator)
|
else if (binding instanceof IEnumerator)
|
||||||
if (name.isDeclaration()) {
|
entryType = IndexerOutputWrapper.ENUMERATOR;
|
||||||
indexer.getOutput().addEnumtorDecl(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (name.isReference()) {
|
|
||||||
indexer.getOutput().addEnumtorRef(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (binding instanceof IField)
|
else if (binding instanceof IField)
|
||||||
if (name.isDeclaration()) {
|
entryType = IndexerOutputWrapper.FIELD;
|
||||||
indexer.getOutput().addFieldDecl(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (name.isReference()) {
|
|
||||||
indexer.getOutput().addFieldRef(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (binding instanceof IParameter ||
|
else if (binding instanceof IParameter ||
|
||||||
binding instanceof IVariable)
|
binding instanceof IVariable)
|
||||||
if (name.isDeclaration()) {
|
entryType = IndexerOutputWrapper.VAR;
|
||||||
indexer.getOutput().addVarDecl(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (name.isReference()) {
|
|
||||||
indexer.getOutput().addVarRef(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (binding instanceof IFunction)
|
else if (binding instanceof IFunction)
|
||||||
|
entryType = IndexerOutputWrapper.FUNCTION;
|
||||||
|
|
||||||
|
if (entryType != null) {
|
||||||
if (name.isDeclaration()) {
|
if (name.isDeclaration()) {
|
||||||
indexer.getOutput().addFunctionDecl(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
IndexerOutputWrapper.addNameDecl(indexer.getOutput(),
|
||||||
|
getFullyQualifiedName(name),
|
||||||
|
entryType,
|
||||||
|
fileNumber,
|
||||||
|
loc.getNodeOffset(),
|
||||||
|
loc.getNodeLength(),
|
||||||
|
ICIndexStorageConstants.OFFSET);
|
||||||
}
|
}
|
||||||
else if (name.isReference()) {
|
else if (name.isReference()) {
|
||||||
indexer.getOutput().addFunctionRef(fileNumber, getFullyQualifiedName(name),loc.getNodeOffset(),loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
IndexerOutputWrapper.addNameRef(indexer.getOutput(),
|
||||||
|
getFullyQualifiedName(name),
|
||||||
|
entryType,
|
||||||
|
fileNumber,
|
||||||
|
loc.getNodeOffset(),
|
||||||
|
loc.getNodeLength(),
|
||||||
|
ICIndexStorageConstants.OFFSET);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -29,6 +29,7 @@ import org.eclipse.cdt.core.dom.ast.IProblemBinding;
|
||||||
import org.eclipse.cdt.core.dom.ast.ITypedef;
|
import org.eclipse.cdt.core.dom.ast.ITypedef;
|
||||||
import org.eclipse.cdt.core.dom.ast.IVariable;
|
import org.eclipse.cdt.core.dom.ast.IVariable;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor;
|
import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
||||||
|
@ -37,7 +38,10 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
|
||||||
|
import org.eclipse.cdt.core.search.ICSearchConstants;
|
||||||
|
import org.eclipse.cdt.core.search.ICSearchConstants.LimitTo;
|
||||||
import org.eclipse.cdt.internal.core.index.cindexstorage.ICIndexStorageConstants;
|
import org.eclipse.cdt.internal.core.index.cindexstorage.ICIndexStorageConstants;
|
||||||
|
import org.eclipse.cdt.internal.core.index.domsourceindexer.IndexerOutputWrapper.EntryType;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.runtime.Path;
|
import org.eclipse.core.runtime.Path;
|
||||||
|
|
||||||
|
@ -123,7 +127,7 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor {
|
||||||
//or if it occurs in another file
|
//or if it occurs in another file
|
||||||
int indexFlag = IndexEncoderUtil.calculateIndexFlags(indexer, loc);
|
int indexFlag = IndexEncoderUtil.calculateIndexFlags(indexer, loc);
|
||||||
|
|
||||||
processNameBinding(name, binding, loc, indexFlag); // function will determine Ref or Decl
|
processNameBinding(name, binding, loc, indexFlag, null); // function will determine limitTo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,162 +154,152 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor {
|
||||||
* @param limitTo
|
* @param limitTo
|
||||||
* @throws DOMException
|
* @throws DOMException
|
||||||
*/
|
*/
|
||||||
|
private void processNameBinding(IASTName name, IBinding binding, IASTFileLocation loc, int fileNumber, LimitTo limitTo) throws DOMException {
|
||||||
private void processNameDeclBinding(IASTName name, IBinding binding, IASTFileLocation loc, int fileNumber) throws DOMException {
|
// determine LimitTo
|
||||||
if (binding instanceof ICompositeType) {
|
if (limitTo == null) {
|
||||||
ICompositeType compBinding = (ICompositeType) binding;
|
|
||||||
int compositeKey = compBinding.getKey();
|
|
||||||
ASTNodeProperty prop = name.getPropertyInParent();
|
|
||||||
switch (compositeKey) {
|
|
||||||
case ICPPClassType.k_class:
|
|
||||||
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
|
||||||
indexer.getOutput().addFwd_ClassDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else
|
|
||||||
indexer.getOutput().addClassDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
break;
|
|
||||||
case ICompositeType.k_struct:
|
|
||||||
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
|
||||||
indexer.getOutput().addFwd_StructDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else
|
|
||||||
indexer.getOutput().addStructDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
break;
|
|
||||||
case ICompositeType.k_union:
|
|
||||||
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
|
||||||
indexer.getOutput().addFwd_UnionDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else
|
|
||||||
indexer.getOutput().addUnionDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
addDerivedAndFriendDeclaration(name, compBinding, loc, fileNumber);
|
|
||||||
}
|
|
||||||
else if (binding instanceof IEnumeration)
|
|
||||||
indexer.getOutput().addEnumDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof ITypedef)
|
|
||||||
indexer.getOutput().addTypedefDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof ICPPNamespace)
|
|
||||||
indexer.getOutput().addNamespaceDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof IEnumerator)
|
|
||||||
indexer.getOutput().addEnumtorDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof IField)
|
|
||||||
indexer.getOutput().addFieldDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof IParameter ||
|
|
||||||
binding instanceof IVariable)
|
|
||||||
indexer.getOutput().addVarDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof ICPPMethod)
|
|
||||||
indexer.getOutput().addMethodDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof IFunction) {
|
|
||||||
indexer.getOutput().addFunctionDecl(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
// TODO In case we want to add friend function declarations to index
|
|
||||||
// addDerivedAndFriendDeclaration(name, binding, loc, fileNumber);
|
|
||||||
}
|
|
||||||
else if (binding instanceof ICPPUsingDeclaration) {
|
|
||||||
ICPPDelegate[] delegates = ((ICPPUsingDeclaration)binding).getDelegates();
|
|
||||||
for (int i = 0; i < delegates.length; i++) {
|
|
||||||
IBinding orig = delegates[i].getBinding();
|
|
||||||
processNameRefBinding(name, orig, loc, fileNumber); // reference to the original binding
|
|
||||||
processNameDeclBinding(name, delegates[i], loc, fileNumber); // declaration of the new name
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processNameRefBinding(IASTName name, IBinding binding, IASTFileLocation loc, int fileNumber) throws DOMException {
|
|
||||||
if (binding instanceof ICompositeType) {
|
|
||||||
ICompositeType compBinding = (ICompositeType) binding;
|
|
||||||
int compositeKey = compBinding.getKey();
|
|
||||||
ASTNodeProperty prop = name.getPropertyInParent();
|
|
||||||
switch (compositeKey) {
|
|
||||||
case ICPPClassType.k_class:
|
|
||||||
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
|
||||||
indexer.getOutput().addFwd_ClassRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else
|
|
||||||
indexer.getOutput().addClassRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
break;
|
|
||||||
case ICompositeType.k_struct:
|
|
||||||
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
|
||||||
indexer.getOutput().addFwd_StructRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else
|
|
||||||
indexer.getOutput().addStructRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
break;
|
|
||||||
case ICompositeType.k_union:
|
|
||||||
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
|
||||||
indexer.getOutput().addFwd_UnionRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else
|
|
||||||
indexer.getOutput().addUnionRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
addDerivedAndFriendDeclaration(name, compBinding, loc, fileNumber);
|
|
||||||
}
|
|
||||||
else if (binding instanceof IEnumeration)
|
|
||||||
indexer.getOutput().addEnumRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof ITypedef)
|
|
||||||
indexer.getOutput().addTypedefRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof ICPPNamespace)
|
|
||||||
indexer.getOutput().addNamespaceRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof IEnumerator)
|
|
||||||
indexer.getOutput().addEnumtorRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof IField)
|
|
||||||
indexer.getOutput().addFieldRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof IParameter ||
|
|
||||||
binding instanceof IVariable)
|
|
||||||
indexer.getOutput().addVarRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof ICPPMethod)
|
|
||||||
indexer.getOutput().addMethodRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
else if (binding instanceof IFunction) {
|
|
||||||
indexer.getOutput().addFunctionRef(fileNumber, getFullyQualifiedName(binding), loc.getNodeOffset(), loc.getNodeLength(),ICIndexStorageConstants.OFFSET);
|
|
||||||
// TODO In case we want to add friend function declarations to index
|
|
||||||
// addDerivedAndFriendDeclaration(name, binding, loc, fileNumber);
|
|
||||||
}
|
|
||||||
else if (binding instanceof ICPPUsingDeclaration) {
|
|
||||||
ICPPDelegate[] delegates = ((ICPPUsingDeclaration)binding).getDelegates();
|
|
||||||
for (int i = 0; i < delegates.length; i++) {
|
|
||||||
IBinding orig = delegates[i].getBinding();
|
|
||||||
processNameRefBinding(name, orig, loc, fileNumber); // reference to the original binding
|
|
||||||
processNameDeclBinding(name, delegates[i], loc, fileNumber); // declaration of the new name
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private void processNameBinding(IASTName name, IBinding binding, IASTFileLocation loc, int fileNumber) throws DOMException {
|
|
||||||
if (name.isDeclaration()) {
|
if (name.isDeclaration()) {
|
||||||
processNameDeclBinding(name, binding, loc, fileNumber);
|
limitTo = ICSearchConstants.DECLARATIONS;
|
||||||
}
|
}
|
||||||
else if (name.isReference()) {
|
else if (name.isReference()) {
|
||||||
processNameRefBinding(name, binding, loc, fileNumber);
|
limitTo = ICSearchConstants.REFERENCES;
|
||||||
}
|
}
|
||||||
// else
|
else {
|
||||||
// ICSearchConstants.UNKNOWN_LIMIT_TO;
|
limitTo = ICSearchConstants.UNKNOWN_LIMIT_TO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// determine type
|
||||||
|
EntryType entryType = null;
|
||||||
|
if (binding instanceof ICompositeType) {
|
||||||
|
ICompositeType compBinding = (ICompositeType) binding;
|
||||||
|
int compositeKey = compBinding.getKey();
|
||||||
|
ASTNodeProperty prop = name.getPropertyInParent();
|
||||||
|
switch (compositeKey) {
|
||||||
|
case ICPPClassType.k_class:
|
||||||
|
entryType = IndexerOutputWrapper.CLASS;
|
||||||
|
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
||||||
|
entryType = IndexerOutputWrapper.FWD_CLASS;
|
||||||
|
break;
|
||||||
|
case ICompositeType.k_struct:
|
||||||
|
entryType = IndexerOutputWrapper.STRUCT;
|
||||||
|
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
||||||
|
entryType = IndexerOutputWrapper.FWD_STRUCT;
|
||||||
|
break;
|
||||||
|
case ICompositeType.k_union:
|
||||||
|
entryType = IndexerOutputWrapper.UNION;
|
||||||
|
if (name.isDeclaration() && prop == IASTElaboratedTypeSpecifier.TYPE_NAME)
|
||||||
|
entryType = IndexerOutputWrapper.FWD_UNION;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
addDerivedDeclaratiion(name, compBinding, loc, fileNumber);
|
||||||
|
if (isFriendDeclaration(name, binding)) {
|
||||||
|
entryType = IndexerOutputWrapper.FRIEND;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (binding instanceof IEnumeration)
|
||||||
|
entryType = IndexerOutputWrapper.ENUM;
|
||||||
|
else if (binding instanceof ITypedef)
|
||||||
|
entryType = IndexerOutputWrapper.TYPEDEF;
|
||||||
|
else if (binding instanceof ICPPNamespace)
|
||||||
|
entryType = IndexerOutputWrapper.NAMESPACE;
|
||||||
|
else if (binding instanceof IEnumerator)
|
||||||
|
entryType = IndexerOutputWrapper.ENUMERATOR;
|
||||||
|
else if (binding instanceof IField)
|
||||||
|
entryType = IndexerOutputWrapper.FIELD;
|
||||||
|
else if (binding instanceof IParameter ||
|
||||||
|
binding instanceof IVariable)
|
||||||
|
entryType = IndexerOutputWrapper.VAR;
|
||||||
|
else if (binding instanceof ICPPMethod) {
|
||||||
|
entryType = IndexerOutputWrapper.METHOD;
|
||||||
|
// TODO In case we want to add friend method declarations to index
|
||||||
|
// if (isFriendDeclaration(name, binding)) {
|
||||||
|
// entryType = IndexerOutputWrapper.FRIEND;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
else if (binding instanceof IFunction) {
|
||||||
|
entryType = IndexerOutputWrapper.FUNCTION;
|
||||||
|
// TODO In case we want to add friend function declarations to index
|
||||||
|
// if (isFriendDeclaration(name, binding)) {
|
||||||
|
// entryType = IndexerOutputWrapper.FRIEND;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
else if (binding instanceof ICPPUsingDeclaration) {
|
||||||
|
ICPPDelegate[] delegates = ((ICPPUsingDeclaration)binding).getDelegates();
|
||||||
|
for (int i = 0; i < delegates.length; i++) {
|
||||||
|
IBinding orig = delegates[i].getBinding();
|
||||||
|
processNameBinding(name, orig, loc, fileNumber, ICSearchConstants.REFERENCES); // reference to the original binding
|
||||||
|
processNameBinding(name, delegates[i], loc, fileNumber, ICSearchConstants.DECLARATIONS); // declaration of the new name
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entryType != null) {
|
||||||
|
if (limitTo == ICSearchConstants.DECLARATIONS) {
|
||||||
|
IndexerOutputWrapper.addNameDecl(indexer.getOutput(),
|
||||||
|
getFullyQualifiedName(binding),
|
||||||
|
entryType,
|
||||||
|
fileNumber,
|
||||||
|
loc.getNodeOffset(),
|
||||||
|
loc.getNodeLength(),
|
||||||
|
ICIndexStorageConstants.OFFSET);
|
||||||
|
}
|
||||||
|
else if (limitTo == ICSearchConstants.REFERENCES) {
|
||||||
|
IndexerOutputWrapper.addNameRef(indexer.getOutput(),
|
||||||
|
getFullyQualifiedName(binding),
|
||||||
|
entryType,
|
||||||
|
fileNumber,
|
||||||
|
loc.getNodeOffset(),
|
||||||
|
loc.getNodeLength(),
|
||||||
|
ICIndexStorageConstants.OFFSET);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param name
|
* @param name
|
||||||
* @param fileNumber
|
|
||||||
* @param loc
|
|
||||||
* @param compBinding
|
* @param compBinding
|
||||||
|
* @param loc
|
||||||
|
* @param fileNumber
|
||||||
* @throws DOMException
|
* @throws DOMException
|
||||||
*/
|
*/
|
||||||
private void addDerivedAndFriendDeclaration(IASTName name, IBinding binding, IASTFileLocation loc, int fileNumber) throws DOMException {
|
private void addDerivedDeclaratiion(IASTName name, ICompositeType compBinding, IASTFileLocation loc, int fileNumber) throws DOMException {
|
||||||
|
ASTNodeProperty prop = name.getPropertyInParent();
|
||||||
|
int compositeKey = compBinding.getKey();
|
||||||
|
if (compositeKey == ICPPClassType.k_class || compositeKey == ICompositeType.k_struct) {
|
||||||
|
if (prop == ICPPASTBaseSpecifier.NAME) {
|
||||||
|
// base class
|
||||||
|
IndexerOutputWrapper.addNameDecl(indexer.getOutput(), getFullyQualifiedName(compBinding),
|
||||||
|
IndexerOutputWrapper.DERIVED,
|
||||||
|
fileNumber,
|
||||||
|
loc.getNodeOffset(),
|
||||||
|
loc.getNodeLength(),
|
||||||
|
ICIndexStorageConstants.OFFSET);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param name
|
||||||
|
* @param fileNumber
|
||||||
|
* @param loc
|
||||||
|
* @param binding
|
||||||
|
* @throws DOMException
|
||||||
|
*/
|
||||||
|
private boolean isFriendDeclaration(IASTName name, IBinding binding) throws DOMException {
|
||||||
|
boolean rc = false;
|
||||||
|
if (!name.isDeclaration())
|
||||||
|
return rc;
|
||||||
ASTNodeProperty prop = name.getPropertyInParent();
|
ASTNodeProperty prop = name.getPropertyInParent();
|
||||||
if (binding instanceof ICompositeType) {
|
if (binding instanceof ICompositeType) {
|
||||||
ICompositeType compBinding = (ICompositeType) binding;
|
ICompositeType compBinding = (ICompositeType) binding;
|
||||||
int compositeKey = compBinding.getKey();
|
int compositeKey = compBinding.getKey();
|
||||||
if (compositeKey == ICPPClassType.k_class ||
|
if (compositeKey == ICPPClassType.k_class || compositeKey == ICompositeType.k_struct) {
|
||||||
compositeKey == ICompositeType.k_struct) {
|
if (prop == IASTElaboratedTypeSpecifier.TYPE_NAME) {
|
||||||
if (prop == ICPPASTBaseSpecifier.NAME) {
|
IASTElaboratedTypeSpecifier elaboratedTypeSpec = (IASTElaboratedTypeSpecifier) name.getParent();
|
||||||
// base class
|
if (elaboratedTypeSpec instanceof ICPPASTDeclSpecifier) {
|
||||||
indexer.getOutput().addDerivedDecl(fileNumber,
|
ICPPASTDeclSpecifier cppDeclSpec = (ICPPASTDeclSpecifier) elaboratedTypeSpec;
|
||||||
getFullyQualifiedName(binding),
|
rc = cppDeclSpec.isFriend();
|
||||||
loc.getNodeOffset(),
|
}
|
||||||
loc.getNodeLength(),
|
|
||||||
ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
|
||||||
else if (prop == IASTElaboratedTypeSpecifier.TYPE_NAME) {
|
|
||||||
// friend
|
|
||||||
indexer.getOutput().addFriendDecl(fileNumber,
|
|
||||||
getFullyQualifiedName(binding),
|
|
||||||
loc.getNodeOffset(),
|
|
||||||
loc.getNodeLength(),
|
|
||||||
ICIndexStorageConstants.OFFSET);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -320,17 +314,12 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor {
|
||||||
// IASTDeclSpecifier declSpec = sDecl.getDeclSpecifier();
|
// IASTDeclSpecifier declSpec = sDecl.getDeclSpecifier();
|
||||||
// if (declSpec instanceof ICPPASTSimpleDeclSpecifier) {
|
// if (declSpec instanceof ICPPASTSimpleDeclSpecifier) {
|
||||||
// ICPPASTSimpleDeclSpecifier fDeclSpec = (ICPPASTSimpleDeclSpecifier) declSpec;
|
// ICPPASTSimpleDeclSpecifier fDeclSpec = (ICPPASTSimpleDeclSpecifier) declSpec;
|
||||||
// if (fDeclSpec.isFriend()) {
|
// rc = fDeclSpec.isFriend();
|
||||||
// // friend
|
|
||||||
// indexer.getOutput().addRef(fileNumber, IndexEncoderUtil.encodeEntry(
|
|
||||||
// getFullyQualifiedName(binding),
|
|
||||||
// ICIndexStorageConstants.FRIEND,
|
|
||||||
// ICSearchConstants.DECLARATIONS));
|
|
||||||
// }
|
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -202,10 +202,14 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
|
||||||
getOutput().addIncludeRef(fileNumber, include);
|
getOutput().addIncludeRef(fileNumber, include);
|
||||||
getOutput().addRelatives(fileNumber, include,
|
getOutput().addRelatives(fileNumber, include,
|
||||||
(parent != null) ? parent.getIncludeDirective().getPath() : null);
|
(parent != null) ? parent.getIncludeDirective().getPath() : null);
|
||||||
getOutput().addIncludeRef(fileNumber,
|
|
||||||
new char[][] {include.toCharArray()},
|
IndexerOutputWrapper.addNameRef(getOutput(),
|
||||||
1,1, ICIndexStorageConstants.LINE
|
new char[][] {include.toCharArray()},
|
||||||
);
|
IndexerOutputWrapper.INCLUDE,
|
||||||
|
fileNumber,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
ICIndexStorageConstants.OFFSET);
|
||||||
|
|
||||||
/* See if this file has been encountered before */
|
/* See if this file has been encountered before */
|
||||||
indexer.haveEncounteredHeader(resourceFile.getProject().getFullPath(), new Path(include));
|
indexer.haveEncounteredHeader(resourceFile.getProject().getFullPath(), new Path(include));
|
||||||
|
@ -224,9 +228,11 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
|
||||||
// Get the location
|
// Get the location
|
||||||
IASTFileLocation loc = IndexEncoderUtil.getFileLocation(macro);
|
IASTFileLocation loc = IndexEncoderUtil.getFileLocation(macro);
|
||||||
int fileNumber = IndexEncoderUtil.calculateIndexFlags(this, loc);
|
int fileNumber = IndexEncoderUtil.calculateIndexFlags(this, loc);
|
||||||
getOutput().addMacroDecl(fileNumber,
|
IndexerOutputWrapper.addNameDecl(getOutput(),
|
||||||
new char[][] {macro.toCharArray()},
|
new char[][] {macro.toCharArray()},
|
||||||
loc.getNodeOffset(),
|
IndexerOutputWrapper.MACRO,
|
||||||
|
fileNumber,
|
||||||
|
loc.getNodeOffset(),
|
||||||
loc.getNodeLength(),
|
loc.getNodeLength(),
|
||||||
ICIndexStorageConstants.OFFSET);
|
ICIndexStorageConstants.OFFSET);
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,11 +85,4 @@ public class IndexEncoderUtil {
|
||||||
return fileLoc;
|
return fileLoc;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean nodeInExternalHeader(IASTNode node) {
|
|
||||||
String fileName = node.getContainingFilename();
|
|
||||||
return (CCorePlugin.getWorkspace().getRoot().getFileForLocation(new Path(fileName)) == null)
|
|
||||||
? true : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,206 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2004 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Common Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/cpl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM - Initial API and implementation
|
||||||
|
**********************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.core.index.IIndexerOutput;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrapper for calls to IIndexerOutput
|
||||||
|
* (in anticipation that the interface is going to change)
|
||||||
|
*
|
||||||
|
* @author vhirsl
|
||||||
|
*/
|
||||||
|
class IndexerOutputWrapper {
|
||||||
|
static class EntryType {
|
||||||
|
public int toInt() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
private EntryType(int type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
private int type;
|
||||||
|
|
||||||
|
}
|
||||||
|
private final static int CLASS_CONST = 1;
|
||||||
|
private final static int STRUCT_CONST = 2;
|
||||||
|
private final static int UNION_CONST = 3;
|
||||||
|
private final static int ENUM_CONST = 4;
|
||||||
|
private final static int VAR_CONST = 5;
|
||||||
|
private final static int TYPEDEF_CONST = 6;
|
||||||
|
private final static int DERIVED_CONST = 7;
|
||||||
|
private final static int FRIEND_CONST = 8;
|
||||||
|
private final static int FWD_CLASS_CONST = 9;
|
||||||
|
private final static int FWD_STRUCT_CONST = 10;
|
||||||
|
private final static int FWD_UNION_CONST = 11;
|
||||||
|
private final static int NAMESPACE_CONST = 12;
|
||||||
|
private final static int ENUMERATOR_CONST = 13;
|
||||||
|
private final static int FIELD_CONST = 14;
|
||||||
|
private final static int METHOD_CONST = 15;
|
||||||
|
private final static int FUNCTION_CONST = 16;
|
||||||
|
private final static int MACRO_CONST = 17;
|
||||||
|
private final static int INCLUDE_CONST = 18;
|
||||||
|
|
||||||
|
|
||||||
|
// entry types
|
||||||
|
final static EntryType CLASS = new EntryType(CLASS_CONST);
|
||||||
|
final static EntryType STRUCT = new EntryType(STRUCT_CONST);
|
||||||
|
final static EntryType UNION = new EntryType(UNION_CONST);
|
||||||
|
final static EntryType ENUM = new EntryType(ENUM_CONST);
|
||||||
|
final static EntryType VAR = new EntryType(VAR_CONST);
|
||||||
|
final static EntryType TYPEDEF = new EntryType(TYPEDEF_CONST);
|
||||||
|
final static EntryType DERIVED = new EntryType(DERIVED_CONST);
|
||||||
|
final static EntryType FRIEND = new EntryType(FRIEND_CONST);
|
||||||
|
final static EntryType FWD_CLASS = new EntryType(FWD_CLASS_CONST);
|
||||||
|
final static EntryType FWD_STRUCT = new EntryType(FWD_STRUCT_CONST);
|
||||||
|
final static EntryType FWD_UNION = new EntryType(FWD_UNION_CONST);
|
||||||
|
final static EntryType NAMESPACE = new EntryType(NAMESPACE_CONST);
|
||||||
|
final static EntryType ENUMERATOR = new EntryType(ENUMERATOR_CONST);
|
||||||
|
final static EntryType FIELD = new EntryType(FIELD_CONST);
|
||||||
|
final static EntryType METHOD = new EntryType(METHOD_CONST);
|
||||||
|
final static EntryType FUNCTION = new EntryType(FUNCTION_CONST);
|
||||||
|
final static EntryType MACRO = new EntryType(MACRO_CONST);
|
||||||
|
final static EntryType INCLUDE = new EntryType(INCLUDE_CONST);
|
||||||
|
|
||||||
|
|
||||||
|
private IndexerOutputWrapper() {
|
||||||
|
}
|
||||||
|
|
||||||
|
static void addNameDecl(IIndexerOutput indexerOutput,
|
||||||
|
char[][] name,
|
||||||
|
EntryType entryType,
|
||||||
|
int fileNumber,
|
||||||
|
int offset,
|
||||||
|
int length,
|
||||||
|
int offsetType) {
|
||||||
|
//TODO temporary until all bindings are completed
|
||||||
|
if (name == null)
|
||||||
|
name = new char[][] {"NPE".toCharArray()}; //$NON-NLS-1$
|
||||||
|
switch (entryType.toInt()) {
|
||||||
|
case CLASS_CONST:
|
||||||
|
indexerOutput.addClassDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case STRUCT_CONST:
|
||||||
|
indexerOutput.addStructDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case UNION_CONST:
|
||||||
|
indexerOutput.addUnionDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case ENUM_CONST:
|
||||||
|
indexerOutput.addEnumDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case VAR_CONST:
|
||||||
|
indexerOutput.addVarDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case TYPEDEF_CONST:
|
||||||
|
indexerOutput.addTypedefDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case DERIVED_CONST:
|
||||||
|
indexerOutput.addDerivedDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FRIEND_CONST:
|
||||||
|
indexerOutput.addFriendDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FWD_CLASS_CONST:
|
||||||
|
indexerOutput.addFwd_ClassDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FWD_STRUCT_CONST:
|
||||||
|
indexerOutput.addFwd_StructDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FWD_UNION_CONST:
|
||||||
|
indexerOutput.addFwd_UnionDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case NAMESPACE_CONST:
|
||||||
|
indexerOutput.addNamespaceDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case ENUMERATOR_CONST:
|
||||||
|
indexerOutput.addEnumtorDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FIELD_CONST:
|
||||||
|
indexerOutput.addFieldDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case METHOD_CONST:
|
||||||
|
indexerOutput.addMethodDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FUNCTION_CONST:
|
||||||
|
indexerOutput.addFunctionDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case MACRO_CONST:
|
||||||
|
indexerOutput.addMacroDecl(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void addNameRef(IIndexerOutput indexerOutput,
|
||||||
|
char[][] name,
|
||||||
|
EntryType entryType,
|
||||||
|
int fileNumber,
|
||||||
|
int offset,
|
||||||
|
int length,
|
||||||
|
int offsetType) {
|
||||||
|
//TODO temporary until all bindings are completed
|
||||||
|
if (name == null)
|
||||||
|
name = new char[][] {"NPE".toCharArray()}; //$NON-NLS-1$
|
||||||
|
switch (entryType.toInt()) {
|
||||||
|
case CLASS_CONST:
|
||||||
|
indexerOutput.addClassRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case STRUCT_CONST:
|
||||||
|
indexerOutput.addStructRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case UNION_CONST:
|
||||||
|
indexerOutput.addUnionRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case ENUM_CONST:
|
||||||
|
indexerOutput.addEnumRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case VAR_CONST:
|
||||||
|
indexerOutput.addVarRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case TYPEDEF_CONST:
|
||||||
|
indexerOutput.addTypedefRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case DERIVED_CONST:
|
||||||
|
indexerOutput.addDerivedRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FRIEND_CONST:
|
||||||
|
indexerOutput.addFriendRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FWD_CLASS_CONST:
|
||||||
|
indexerOutput.addFwd_ClassRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FWD_STRUCT_CONST:
|
||||||
|
indexerOutput.addFwd_StructRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FWD_UNION_CONST:
|
||||||
|
indexerOutput.addFwd_UnionRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case NAMESPACE_CONST:
|
||||||
|
indexerOutput.addNamespaceRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case ENUMERATOR_CONST:
|
||||||
|
indexerOutput.addEnumtorRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FIELD_CONST:
|
||||||
|
indexerOutput.addFieldRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case METHOD_CONST:
|
||||||
|
indexerOutput.addMethodRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case FUNCTION_CONST:
|
||||||
|
indexerOutput.addFunctionRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
case INCLUDE_CONST:
|
||||||
|
indexerOutput.addIncludeRef(fileNumber, name, offset, length, offsetType);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue