1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 22:52:11 +02:00

The following changes are made:

- xxIndexVisitor objects are reused
- NamedEntry objects are reused where possible (not always).

Result:
overall memory consumption during indexation
is decreased by 10% approximately.
This commit is contained in:
Oleg Krasilnikov 2006-03-03 12:41:56 +00:00
parent 2e43c1a04b
commit 632cfdc3d6
6 changed files with 137 additions and 68 deletions

View file

@ -40,4 +40,12 @@ public class FunctionEntry extends NamedEntry implements IFunctionEntry {
output.addIndexEntry(this); output.addIndexEntry(this);
} }
/* BugZilla ID#124618 */
public void setFunctionEntry(int meta_kind, int entry_type, char[][] fullName, int modifiers, int fileNumber) {
setNamedEntry(meta_kind, entry_type, fullName, modifiers, fileNumber);
// since we reuse FunctionEntry instance,
// the following vars should be cleared.
this.signature = null;
this.returnString = null;
}
} }

View file

@ -39,4 +39,11 @@ public class NamedEntry extends CIndexStorageEntry implements INamedEntry {
output.addIndexEntry(this); output.addIndexEntry(this);
} }
/* BugZilla ID#124618 */
public void setNamedEntry(int meta_kind, int entry_type, char[][] fullName, int modifiers, int fileNumber) {
this.entry_type = entry_type;
this.fileNumber = fileNumber;
this.fullName = fullName;
this.modifiers = modifiers;
}
} }

View file

@ -47,4 +47,16 @@ public class TypeEntry extends NamedEntry implements ITypeEntry {
this.friends = friends; this.friends = friends;
} }
/* BugZilla ID#124618 */
public void setTypeEntry(int type_kind, int entry_type, char[][] fullName, int modifiers, int fileNumber) {
this.entry_type = entry_type;
this.fileNumber = fileNumber;
this.fullName = fullName;
this.modifiers = modifiers;
this.type_kind = type_kind;
// since we reuse TypeEntry instance,
// the following vars should be cleared.
this.baseTypes = null;
this.friends = null;
}
} }

View file

@ -37,7 +37,12 @@ import org.eclipse.cdt.internal.core.index.TypeEntry;
import org.eclipse.cdt.internal.core.model.Util; import org.eclipse.cdt.internal.core.model.Util;
public class CGenerateIndexVisitor extends CASTVisitor { public class CGenerateIndexVisitor extends CASTVisitor {
private DOMSourceIndexerRunner indexer; private DOMSourceIndexerRunner indexer;
private FunctionEntry commonFunctionEntry;
private TypeEntry commonTypeEntry;
private NamedEntry commonNamedEntry;
{ {
shouldVisitNames = true; shouldVisitNames = true;
shouldVisitDeclarations = true; shouldVisitDeclarations = true;
@ -58,6 +63,16 @@ public class CGenerateIndexVisitor extends CASTVisitor {
public CGenerateIndexVisitor(DOMSourceIndexerRunner indexer) { public CGenerateIndexVisitor(DOMSourceIndexerRunner indexer) {
super(); super();
this.indexer = indexer; this.indexer = indexer;
// reuse of XXXEntry object allows to reduce memory consumption
char[][] dummy = new char[][] { null };
commonFunctionEntry = new FunctionEntry(IIndex.FUNCTION, 0, dummy, 0, 0);
commonTypeEntry = new TypeEntry (0, 0, dummy, 0, 0);
commonNamedEntry = new NamedEntry(0, 0, dummy, 0, 0);
}
/* BugZilla ID#124618 */
public void setCGenerateIndexVisitor(DOMSourceIndexerRunner indexer) {
this.indexer = indexer;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -187,10 +202,10 @@ public class CGenerateIndexVisitor extends CASTVisitor {
} }
// guard against cpp entities in c project // guard against cpp entities in c project
if (iEntryType != 0) { if (iEntryType != 0) {
TypeEntry indexEntry = new TypeEntry(iEntryType, entryKind, qualifiedName, modifiers, fileNumber); commonTypeEntry.setTypeEntry(iEntryType, entryKind, qualifiedName, modifiers, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonTypeEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
indexEntry.serialize(indexer.getOutput()); commonTypeEntry.serialize(indexer.getOutput());
} }
} }
else if (binding instanceof IEnumeration){ else if (binding instanceof IEnumeration){
@ -198,32 +213,32 @@ public class CGenerateIndexVisitor extends CASTVisitor {
if (entryKind != IIndex.REFERENCE) { if (entryKind != IIndex.REFERENCE) {
modifiers = IndexVisitorUtil.getModifiers(name, binding); modifiers = IndexVisitorUtil.getModifiers(name, binding);
} }
TypeEntry indexEntry = new TypeEntry(IIndex.TYPE_ENUM, entryKind, qualifiedName, modifiers, fileNumber); commonTypeEntry.setTypeEntry(IIndex.TYPE_ENUM, entryKind, qualifiedName, modifiers, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonTypeEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
indexEntry.serialize(indexer.getOutput()); commonTypeEntry.serialize(indexer.getOutput());
} }
else if (binding instanceof ITypedef) { else if (binding instanceof ITypedef) {
TypeEntry indexEntry = new TypeEntry(IIndex.TYPE_TYPEDEF, entryKind, qualifiedName, 0, fileNumber); commonTypeEntry.setTypeEntry(IIndex.TYPE_TYPEDEF, entryKind, qualifiedName, 0, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonTypeEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
indexEntry.serialize(indexer.getOutput()); commonTypeEntry.serialize(indexer.getOutput());
} }
else if (binding instanceof IEnumerator) { else if (binding instanceof IEnumerator) {
NamedEntry indexEntry = new NamedEntry(IIndex.ENUMTOR, entryKind, qualifiedName, 0, fileNumber); commonNamedEntry.setNamedEntry(IIndex.ENUMTOR, entryKind, qualifiedName, 0, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonNamedEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
indexEntry.serialize(indexer.getOutput()); commonNamedEntry.serialize(indexer.getOutput());
} }
else if (binding instanceof IField) { else if (binding instanceof IField) {
int modifiers = 0; int modifiers = 0;
if (entryKind != IIndex.REFERENCE) { if (entryKind != IIndex.REFERENCE) {
modifiers = IndexVisitorUtil.getModifiers(name, binding); modifiers = IndexVisitorUtil.getModifiers(name, binding);
} }
NamedEntry indexEntry = new NamedEntry(IIndex.FIELD, entryKind, qualifiedName, modifiers, fileNumber); commonNamedEntry.setNamedEntry(IIndex.FIELD, entryKind, qualifiedName, modifiers, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonNamedEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
indexEntry.serialize(indexer.getOutput()); commonNamedEntry.serialize(indexer.getOutput());
} }
else if (binding instanceof IVariable && else if (binding instanceof IVariable &&
!(binding instanceof IParameter)) { !(binding instanceof IParameter)) {
@ -234,10 +249,10 @@ public class CGenerateIndexVisitor extends CASTVisitor {
if (entryKind != IIndex.REFERENCE) { if (entryKind != IIndex.REFERENCE) {
modifiers = IndexVisitorUtil.getModifiers(name, binding); modifiers = IndexVisitorUtil.getModifiers(name, binding);
} }
NamedEntry indexEntry = new NamedEntry(IIndex.VAR, entryKind, qualifiedName, modifiers, fileNumber); commonNamedEntry.setNamedEntry(IIndex.VAR, entryKind, qualifiedName, modifiers, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonNamedEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
indexEntry.serialize(indexer.getOutput()); commonNamedEntry.serialize(indexer.getOutput());
} }
} }
else if (binding instanceof IFunction) { else if (binding instanceof IFunction) {
@ -245,12 +260,12 @@ public class CGenerateIndexVisitor extends CASTVisitor {
if (entryKind != IIndex.REFERENCE) { if (entryKind != IIndex.REFERENCE) {
modifiers = IndexVisitorUtil.getModifiers(name, binding); modifiers = IndexVisitorUtil.getModifiers(name, binding);
} }
FunctionEntry indexEntry = new FunctionEntry(IIndex.FUNCTION, entryKind, qualifiedName, modifiers, fileNumber); commonFunctionEntry.setFunctionEntry(IIndex.FUNCTION, entryKind, qualifiedName, modifiers, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonFunctionEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
indexEntry.setSignature(IndexVisitorUtil.getParameters((IFunction) binding)); commonFunctionEntry.setSignature(IndexVisitorUtil.getParameters((IFunction) binding));
indexEntry.setReturnType(IndexVisitorUtil.getReturnType((IFunction) binding)); commonFunctionEntry.setReturnType(IndexVisitorUtil.getReturnType((IFunction) binding));
indexEntry.serialize(indexer.getOutput()); commonFunctionEntry.serialize(indexer.getOutput());
} }
} }

View file

@ -59,6 +59,9 @@ import org.eclipse.cdt.internal.core.model.Util;
public class CPPGenerateIndexVisitor extends CPPASTVisitor { public class CPPGenerateIndexVisitor extends CPPASTVisitor {
private DOMSourceIndexerRunner indexer; private DOMSourceIndexerRunner indexer;
private FunctionEntry commonFunctionEntry;
private TypeEntry commonTypeEntry;
private NamedEntry commonNamedEntry;
{ {
shouldVisitNames = true; shouldVisitNames = true;
shouldVisitDeclarations = true; shouldVisitDeclarations = true;
@ -81,8 +84,19 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor {
public CPPGenerateIndexVisitor(DOMSourceIndexerRunner indexer) { public CPPGenerateIndexVisitor(DOMSourceIndexerRunner indexer) {
super(); super();
this.indexer = indexer; this.indexer = indexer;
// reuse of XXXEntry object allows to reduce memory consumption
char[][] dummy = new char[0][0];
commonFunctionEntry = new FunctionEntry(IIndex.FUNCTION, 0, dummy, 0, 0);
commonTypeEntry = new TypeEntry (0, 0, dummy, 0, 0);
commonNamedEntry = new NamedEntry(0, 0, dummy, 0, 0);
} }
/* BugZilla ID#124618 */
public void setCPPGenerateIndexVisitor(DOMSourceIndexerRunner indexer) {
this.indexer = indexer;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor#visit(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition) * @see org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor#visit(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition)
*/ */
@ -228,52 +242,52 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor {
if (entryKind != IIndex.REFERENCE) { if (entryKind != IIndex.REFERENCE) {
modifiers = IndexVisitorUtil.getModifiers(name, binding); modifiers = IndexVisitorUtil.getModifiers(name, binding);
} }
TypeEntry indexEntry = new TypeEntry(iEntryType, entryKind, qualifiedName, modifiers, fileNumber); commonTypeEntry.setTypeEntry(iEntryType, entryKind, qualifiedName, modifiers, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonTypeEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
if (entryKind == IIndex.DEFINITION && binding instanceof ICPPClassType) { if (entryKind == IIndex.DEFINITION && binding instanceof ICPPClassType) {
addDerivedDeclarations(name, (ICPPClassType)binding, indexEntry, fileNumber); addDerivedDeclarations(name, (ICPPClassType)binding, commonTypeEntry, fileNumber);
addFriendDeclarations(name, (ICPPClassType)binding, indexEntry, fileNumber); addFriendDeclarations(name, (ICPPClassType)binding, commonTypeEntry, fileNumber);
} }
serialize(indexEntry); serialize(commonTypeEntry);
} }
else if (binding instanceof IEnumeration) { else if (binding instanceof IEnumeration) {
int modifiers = 0; int modifiers = 0;
if (entryKind != IIndex.REFERENCE) { if (entryKind != IIndex.REFERENCE) {
modifiers = IndexVisitorUtil.getModifiers(name, binding); modifiers = IndexVisitorUtil.getModifiers(name, binding);
} }
TypeEntry indexEntry = new TypeEntry(IIndex.TYPE_ENUM, entryKind, qualifiedName, modifiers, fileNumber); commonTypeEntry.setTypeEntry(IIndex.TYPE_ENUM, entryKind, qualifiedName, modifiers, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonTypeEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
serialize(indexEntry); serialize(commonTypeEntry);
} }
else if (binding instanceof ITypedef) { else if (binding instanceof ITypedef) {
TypeEntry indexEntry = new TypeEntry(IIndex.TYPE_TYPEDEF, entryKind, qualifiedName, 0, fileNumber); commonTypeEntry.setTypeEntry(IIndex.TYPE_TYPEDEF, entryKind, qualifiedName, 0, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonTypeEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
serialize(indexEntry); serialize(commonTypeEntry);
} }
else if (binding instanceof ICPPNamespace) { else if (binding instanceof ICPPNamespace) {
NamedEntry indexEntry = new NamedEntry(IIndex.NAMESPACE, entryKind, qualifiedName, 0, fileNumber); commonNamedEntry.setNamedEntry(IIndex.NAMESPACE, entryKind, qualifiedName, 0, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonNamedEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
serialize(indexEntry); serialize(commonNamedEntry);
} }
else if (binding instanceof IEnumerator) { else if (binding instanceof IEnumerator) {
NamedEntry indexEntry = new NamedEntry(IIndex.ENUMTOR, entryKind, qualifiedName, 0, fileNumber); commonNamedEntry.setNamedEntry(IIndex.ENUMTOR, entryKind, qualifiedName, 0, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonNamedEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
serialize(indexEntry); serialize(commonNamedEntry);
} }
else if (binding instanceof IField) { else if (binding instanceof IField) {
int modifiers = 0; int modifiers = 0;
if (entryKind != IIndex.REFERENCE) { if (entryKind != IIndex.REFERENCE) {
modifiers = IndexVisitorUtil.getModifiers(name, binding); modifiers = IndexVisitorUtil.getModifiers(name, binding);
} }
NamedEntry indexEntry = new NamedEntry(IIndex.FIELD, entryKind, qualifiedName, modifiers, fileNumber); commonNamedEntry.setNamedEntry(IIndex.FIELD, entryKind, qualifiedName, modifiers, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonNamedEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
serialize(indexEntry); serialize(commonNamedEntry);
} }
else if (binding instanceof IVariable && else if (binding instanceof IVariable &&
!(binding instanceof IParameter)) { !(binding instanceof IParameter)) {
@ -284,10 +298,10 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor {
if (entryKind != IIndex.REFERENCE) { if (entryKind != IIndex.REFERENCE) {
modifiers = IndexVisitorUtil.getModifiers(name, binding); modifiers = IndexVisitorUtil.getModifiers(name, binding);
} }
NamedEntry indexEntry = new NamedEntry(IIndex.VAR, entryKind, qualifiedName, modifiers, fileNumber); commonNamedEntry.setNamedEntry(IIndex.VAR, entryKind, qualifiedName, modifiers, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonNamedEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
serialize(indexEntry); serialize(commonNamedEntry);
} }
} }
else if (binding instanceof ICPPMethod) { else if (binding instanceof ICPPMethod) {
@ -295,12 +309,12 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor {
if (entryKind != IIndex.REFERENCE) { if (entryKind != IIndex.REFERENCE) {
modifiers = IndexVisitorUtil.getModifiers(name, binding); modifiers = IndexVisitorUtil.getModifiers(name, binding);
} }
FunctionEntry indexEntry = new FunctionEntry(IIndex.METHOD, entryKind, qualifiedName, modifiers, fileNumber); commonFunctionEntry.setFunctionEntry(IIndex.METHOD, entryKind, qualifiedName, modifiers, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonFunctionEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
indexEntry.setSignature(IndexVisitorUtil.getParameters((ICPPMethod) binding)); commonFunctionEntry.setSignature(IndexVisitorUtil.getParameters((ICPPMethod) binding));
indexEntry.setReturnType(IndexVisitorUtil.getReturnType((ICPPMethod) binding)); commonFunctionEntry.setReturnType(IndexVisitorUtil.getReturnType((ICPPMethod) binding));
serialize(indexEntry); serialize(commonFunctionEntry);
// TODO In case we want to add friend method declarations to index // TODO In case we want to add friend method declarations to index
// if (isFriendDeclaration(name, binding)) { // if (isFriendDeclaration(name, binding)) {
// entryType = IndexerOutputWrapper.FRIEND; // entryType = IndexerOutputWrapper.FRIEND;
@ -311,12 +325,12 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor {
if (entryKind != IIndex.REFERENCE) { if (entryKind != IIndex.REFERENCE) {
modifiers = IndexVisitorUtil.getModifiers(name, binding); modifiers = IndexVisitorUtil.getModifiers(name, binding);
} }
FunctionEntry indexEntry = new FunctionEntry(IIndex.FUNCTION, entryKind, qualifiedName, modifiers, fileNumber); commonFunctionEntry.setFunctionEntry(IIndex.FUNCTION, entryKind, qualifiedName, modifiers, fileNumber);
indexEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET); commonFunctionEntry.setNameOffset(fileLoc.getNodeOffset(), fileLoc.getNodeLength(), IIndex.OFFSET);
indexEntry.setSignature(IndexVisitorUtil.getParameters((IFunction) binding)); commonFunctionEntry.setSignature(IndexVisitorUtil.getParameters((IFunction) binding));
indexEntry.setReturnType(IndexVisitorUtil.getReturnType((IFunction) binding)); commonFunctionEntry.setReturnType(IndexVisitorUtil.getReturnType((IFunction) binding));
serialize(indexEntry); serialize(commonFunctionEntry);
// TODO In case we want to add friend function declarations to index // TODO In case we want to add friend function declarations to index
// if (isFriendDeclaration(name, binding)) { // if (isFriendDeclaration(name, binding)) {
// entryType = IndexerOutputWrapper.FRIEND; // entryType = IndexerOutputWrapper.FRIEND;

View file

@ -59,7 +59,11 @@ import org.eclipse.core.runtime.Path;
public class DOMSourceIndexerRunner extends AbstractIndexerRunner { public class DOMSourceIndexerRunner extends AbstractIndexerRunner {
private DOMSourceIndexer indexer; private DOMSourceIndexer indexer;
// Bug 124618: reuse NamedEntry & Visitor instances to reduce memory consumption
private NamedEntry commonNamedEntry;
static CGenerateIndexVisitor visitorC = null;
static CPPGenerateIndexVisitor visitorCPP = null;
// for running JUnit tests // for running JUnit tests
private static boolean skipScannerInfoTest=false; private static boolean skipScannerInfoTest=false;
@ -73,6 +77,7 @@ public class DOMSourceIndexerRunner extends AbstractIndexerRunner {
public DOMSourceIndexerRunner(IFile resource, DOMSourceIndexer indexer) { public DOMSourceIndexerRunner(IFile resource, DOMSourceIndexer indexer) {
this.resourceFile = resource; this.resourceFile = resource;
this.indexer = indexer; this.indexer = indexer;
commonNamedEntry = new NamedEntry(0, 0, new char[][] { null }, 0, 0);
} }
/** /**
@ -118,18 +123,26 @@ public class DOMSourceIndexerRunner extends AbstractIndexerRunner {
if (AbstractIndexerRunner.TIMING) if (AbstractIndexerRunner.TIMING)
parseTime = System.currentTimeMillis(); parseTime = System.currentTimeMillis();
// first clear all problem markers on non-external include files // first clear all problem markers on non-external include files
clearProblemMarkers(tu.getIncludeDirectives()); clearProblemMarkers(tu.getIncludeDirectives());
ASTVisitor visitor = null; ASTVisitor visitor = null;
//C or CPP? //C or CPP?
if (tu.getParserLanguage() == ParserLanguage.CPP) { if (tu.getParserLanguage() == ParserLanguage.CPP) {
visitor = new CPPGenerateIndexVisitor(this); if (visitorCPP == null)
visitorCPP = new CPPGenerateIndexVisitor(this);
else
visitorCPP.setCPPGenerateIndexVisitor(this);
visitor = visitorCPP;
} else { } else {
visitor = new CGenerateIndexVisitor(this); if (visitorC == null)
visitorC = new CGenerateIndexVisitor(this);
else
visitorC.setCGenerateIndexVisitor(this);
visitor = visitorC;
} }
tu.accept(visitor); tu.accept(visitor);
processMacroDefinitions(tu.getMacroDefinitions()); processMacroDefinitions(tu.getMacroDefinitions());
@ -284,9 +297,9 @@ public class DOMSourceIndexerRunner extends AbstractIndexerRunner {
getOutput().addRelatives(fileNumber, include, getOutput().addRelatives(fileNumber, include,
(parent != null) ? parent.getIncludeDirective().getPath() : null); (parent != null) ? parent.getIncludeDirective().getPath() : null);
NamedEntry namedEntry = new NamedEntry(IIndex.INCLUDE, IIndex.REFERENCE, new char[][] {include.toCharArray()}, 0, fileNumber); commonNamedEntry.setNamedEntry(IIndex.INCLUDE, IIndex.REFERENCE, new char[][] {include.toCharArray()}, 0, fileNumber);
namedEntry.setNameOffset(1, 1, IIndex.OFFSET); commonNamedEntry.setNameOffset(1, 1, IIndex.OFFSET);
namedEntry.serialize(getOutput()); commonNamedEntry.serialize(getOutput());
/* See if this file has been encountered before */ /* See if this file has been encountered before */
indexer.haveEncounteredHeader(resourceFile.getProject().getFullPath(), new Path(include), true); indexer.haveEncounteredHeader(resourceFile.getProject().getFullPath(), new Path(include), true);
@ -310,9 +323,9 @@ public class DOMSourceIndexerRunner extends AbstractIndexerRunner {
IASTFileLocation loc = IndexEncoderUtil.getFileLocation(macro); IASTFileLocation loc = IndexEncoderUtil.getFileLocation(macro);
int fileNumber = IndexEncoderUtil.calculateIndexFlags(this, loc); int fileNumber = IndexEncoderUtil.calculateIndexFlags(this, loc);
NamedEntry namedEntry = new NamedEntry(IIndex.MACRO, IIndex.DECLARATION, new char[][] {macro.toCharArray()}, 0, fileNumber); commonNamedEntry.setNamedEntry(IIndex.MACRO, IIndex.DECLARATION, new char[][] {macro.toCharArray()}, 0, fileNumber);
namedEntry.setNameOffset(loc.getNodeOffset(), loc.getNodeLength(), IIndex.OFFSET); commonNamedEntry.setNameOffset(loc.getNodeOffset(), loc.getNodeLength(), IIndex.OFFSET);
namedEntry.serialize(getOutput()); commonNamedEntry.serialize(getOutput());
} }
} }