Пример #1
0
  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);
  }
Пример #2
0
  /**
   * 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();
  }
Пример #3
0
 public PDOMFile(
     PDOMLinkage linkage, IIndexFileLocation location, int linkageID, ISignificantMacros macros)
     throws CoreException {
   fLinkage = linkage;
   this.location = location;
   Database db = fLinkage.getDB();
   record = db.malloc(RECORD_SIZE);
   String locationString = fLinkage.getPDOM().getLocationConverter().toInternalFormat(location);
   if (locationString == null)
     throw new CoreException(
         CCorePlugin.createStatus(
             Messages.getString("PDOMFile.toInternalProblem") + location.getURI())); // $NON-NLS-1$
   IString locationDBString = db.newString(locationString);
   db.putRecPtr(record + LOCATION_REPRESENTATION, locationDBString.getRecord());
   db.put3ByteUnsignedInt(record + LINKAGE_ID, linkageID);
   db.putRecPtr(record + SIGNIFICANT_MACROS, db.newString(macros.encode()).getRecord());
   setTimestamp(-1);
 }