コード例 #1
0
ファイル: PDOMFile.java プロジェクト: PARAG00991/cdt
  public void addMacros(IASTPreprocessorStatement[] macros) throws CoreException {
    assert getFirstMacro() == null;

    PDOMMacro lastMacro = null;
    final PDOMLinkage linkage = getLinkage();
    for (IASTPreprocessorStatement stmt : macros) {
      PDOMMacro pdomMacro = null;
      if (stmt instanceof IASTPreprocessorMacroDefinition) {
        IASTPreprocessorMacroDefinition macro = (IASTPreprocessorMacroDefinition) stmt;
        PDOMMacroContainer container = linkage.getMacroContainer(macro.getName().getSimpleID());
        pdomMacro = new PDOMMacro(fLinkage, container, macro, this);
      } else if (stmt instanceof IASTPreprocessorUndefStatement) {
        IASTPreprocessorUndefStatement undef = (IASTPreprocessorUndefStatement) stmt;
        PDOMMacroContainer container =
            linkage.getMacroContainer(undef.getMacroName().getSimpleID());
        pdomMacro = new PDOMMacro(fLinkage, container, undef, this);
      }
      if (pdomMacro != null) {
        if (lastMacro == null) {
          setFirstMacro(pdomMacro);
        } else {
          lastMacro.setNextMacro(pdomMacro);
        }
        lastMacro = pdomMacro;
      }
    }
  }
コード例 #2
0
ファイル: PDOMFile.java プロジェクト: PARAG00991/cdt
  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);
  }
コード例 #3
0
ファイル: PDOMFile.java プロジェクト: PARAG00991/cdt
  /**
   * 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();
  }