Beispiel #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);
  }
Beispiel #2
0
 @Override
 public boolean hasUnresolvedInclude() throws CoreException {
   PDOMInclude include = getFirstInclude();
   while (include != null) {
     if (!include.isResolved() && include.isActive()) return true;
     include = include.getNextInIncludes();
   }
   return false;
 }
Beispiel #3
0
 @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()]);
 }
Beispiel #4
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();
  }
Beispiel #5
0
 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);
 }
Beispiel #6
0
  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;
    }
  }
Beispiel #7
0
 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);
   }
 }
Beispiel #8
0
 @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);
     }
   }
 }
Beispiel #9
0
  @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);
    }
  }
Beispiel #10
0
 public void setFirstIncludedBy(PDOMInclude includedBy) throws CoreException {
   long rec = includedBy != null ? includedBy.getRecord() : 0;
   fLinkage.getDB().putRecPtr(record + FIRST_INCLUDED_BY, rec);
 }