public void clear() throws CoreException { ICPPUsingDirective[] directives = getUsingDirectives(); for (ICPPUsingDirective ud : directives) { if (ud instanceof IPDOMNode) { ((IPDOMNode) ud).delete(null); } } setLastUsingDirective(0); // Remove the includes PDOMInclude include = getFirstInclude(); while (include != null) { PDOMInclude nextInclude = include.getNextInIncludes(); // if (contextsRemoved != null && include.getPrevInIncludedByRecord() == 0) { // contextsRemoved.add(include.getIncludesLocation()); // } include.delete(); include = nextInclude; } setFirstInclude(null); // Delete all the macros in this file PDOMLinkage linkage = getLinkage(); PDOMMacro macro = getFirstMacro(); while (macro != null) { PDOMMacro nextMacro = macro.getNextMacro(); macro.delete(linkage); macro = nextMacro; } setFirstMacro(null); // Delete all the names in this file ArrayList<PDOMName> names = new ArrayList<PDOMName>(); PDOMName name = getFirstName(); while (name != null) { names.add(name); linkage.onDeleteName(name); name = name.getNextInFile(); } for (Iterator<PDOMName> iterator = names.iterator(); iterator.hasNext(); ) { name = iterator.next(); name.delete(); } setFirstName(null); // Delete all macro references ArrayList<PDOMMacroReferenceName> mrefs = new ArrayList<PDOMMacroReferenceName>(); PDOMMacroReferenceName mref = getFirstMacroReference(); while (mref != null) { mrefs.add(mref); mref = mref.getNextInFile(); } for (PDOMMacroReferenceName m : mrefs) { m.delete(); } setFirstMacroReference(null); setSourceReadTime(0); setTimestamp(-1); }
@Override public boolean hasUnresolvedInclude() throws CoreException { PDOMInclude include = getFirstInclude(); while (include != null) { if (!include.isResolved() && include.isActive()) return true; include = include.getNextInIncludes(); } return false; }
@Override public IIndexInclude[] getIncludes() throws CoreException { List<PDOMInclude> result = new ArrayList<PDOMInclude>(); PDOMInclude include = getFirstInclude(); while (include != null) { result.add(include); include = include.getNextInIncludes(); } return result.toArray(new IIndexInclude[result.size()]); }
/** * Transfers names, macros and includes from another file to this one and deletes the other file. * * @param sourceFile the file to transfer the local bindings from. * @throws CoreException */ public void replaceContentsFrom(PDOMFile sourceFile) throws CoreException { // Delete current content clear(); // Link in the using directives setLastUsingDirective(sourceFile.getLastUsingDirectiveRec()); // Link in the includes, replace the owner. PDOMInclude include = sourceFile.getFirstInclude(); setFirstInclude(include); for (; include != null; include = include.getNextInIncludes()) { include.setIncludedBy(this); } // In the unexpected case that there is an included by relation, append it. transferIncluders(sourceFile); // Link in the macros. PDOMMacro macro = sourceFile.getFirstMacro(); setFirstMacro(macro); for (; macro != null; macro = macro.getNextMacro()) { macro.setFile(this); } // Link in macro references PDOMMacroReferenceName mref = sourceFile.getFirstMacroReference(); setFirstMacroReference(mref); for (; mref != null; mref = mref.getNextInFile()) { mref.setFile(this); } // Replace all the names in this file PDOMName name = sourceFile.getFirstName(); setFirstName(name); for (; name != null; name = name.getNextInFile()) { name.setFile(this); } setTimestamp(sourceFile.getTimestamp()); setSourceReadTime(sourceFile.getSourceReadTime()); setSizeAndEncodingHashcode(sourceFile.getSizeAndEncodingHashcode()); setContentsHash(sourceFile.getContentsHash()); // Transfer the flags. Database db = fLinkage.getDB(); db.putByte(record + FLAGS, db.getByte(sourceFile.record + FLAGS)); // Transfer the replacement header. db.putRecPtr(record + REPLACEMENT_HEADER, db.getRecPtr(sourceFile.record + REPLACEMENT_HEADER)); db.putRecPtr(sourceFile.record + REPLACEMENT_HEADER, 0); // Delete the source file sourceFile.delete(); }
public void convertIncludersToUnresolved() throws CoreException { // Remove the includes PDOMInclude include = getFirstIncludedBy(); while (include != null) { PDOMInclude nextInclude = include.getNextInIncludedBy(); include.convertToUnresolved(); include.setNextInIncludedBy(null); include.setPrevInIncludedBy(null); include = nextInclude; } setFirstIncludedBy(null); }
public void addIncludesTo(IncludeInformation[] includeInfos) throws CoreException { assert getFirstInclude() == null; PDOMInclude lastInclude = null; for (final IncludeInformation info : includeInfos) { final PDOMFile targetFile = (PDOMFile) info.fTargetFile; PDOMInclude pdomInclude = new PDOMInclude(fLinkage, info.fStatement, this, targetFile); assert targetFile == null || targetFile.getIndexFragment() instanceof IWritableIndexFragment; if (targetFile != null) { targetFile.addIncludedBy(pdomInclude, info.fIsContext); } if (lastInclude == null) { setFirstInclude(pdomInclude); } else { lastInclude.setNextInIncludes(pdomInclude); } lastInclude = pdomInclude; } }
public void addIncludedBy(PDOMInclude include, boolean isContext) throws CoreException { PDOMInclude firstIncludedBy = getFirstIncludedBy(); if (firstIncludedBy != null) { if (isContext) { setFirstIncludedBy(include); include.setNextInIncludedBy(firstIncludedBy); firstIncludedBy.setPrevInIncludedBy(include); } else { PDOMInclude secondIncludedBy = firstIncludedBy.getNextInIncludedBy(); if (secondIncludedBy != null) { include.setNextInIncludedBy(secondIncludedBy); secondIncludedBy.setPrevInIncludedBy(include); } include.setPrevInIncludedBy(firstIncludedBy); firstIncludedBy.setNextInIncludedBy(include); } } else { setFirstIncludedBy(include); } }
@Override public void transferIncluders(IIndexFragmentFile sourceFile) throws CoreException { PDOMFile source = (PDOMFile) sourceFile; PDOMInclude include = source.getFirstIncludedBy(); if (include != null) { // Detach the includes source.setFirstIncludedBy(null); // Adjust the includes for (PDOMInclude i = include; i != null; i = i.getNextInIncludedBy()) { i.setIncludes(this); } // Append the includes PDOMInclude last = getFirstIncludedBy(); if (last == null) { setFirstIncludedBy(include); } else { for (PDOMInclude i = last; i != null; i = i.getNextInIncludedBy()) { last = i; } last.setNextInIncludedBy(include); include.setPrevInIncludedBy(last); } } }
@Override public void transferContext(IIndexFragmentFile sourceFile) throws CoreException { PDOMFile source = (PDOMFile) sourceFile; PDOMInclude include = source.getFirstIncludedBy(); if (include != null) { // Detach the include final PDOMInclude next = include.getNextInIncludedBy(); include.setNextInIncludedBy(null); source.setFirstIncludedBy(next); if (next != null) next.setPrevInIncludedBy(null); // Adjust the include include.setIncludes(this); // Insert the include addIncludedBy(include, false); } }
public void setFirstIncludedBy(PDOMInclude includedBy) throws CoreException { long rec = includedBy != null ? includedBy.getRecord() : 0; fLinkage.getDB().putRecPtr(record + FIRST_INCLUDED_BY, rec); }