private void fixAncestors() { BitVector ancestors = new BitVector(0); BitVector indirectAncestors = new BitVector(0); for (TypeVariable typeVariable : parents) { TypeVariable parent = typeVariable.ecr(); if (parent.ancestors == null) { parent.fixAncestors(); } ancestors.set(parent.id); ancestors.or(parent.ancestors); indirectAncestors.or(parent.ancestors); } this.ancestors = ancestors; this.indirectAncestors = indirectAncestors; }
private void remove_transitive_constraints() throws TypeException { refresh_solved(); BitVector list = new BitVector(); list.or(solved); list.or(unsolved); for (BitSetIterator varIt = list.iterator(); varIt.hasNext();) { final TypeVariableBV var = typeVariableForId(varIt.next()); var.removeIndirectRelations(); } }
ancestors.or(parent.ancestors); parent.fixDescendants(id);
private void fixAncestors() { BitVector ancestors = new BitVector(0); BitVector indirectAncestors = new BitVector(0); fixParents(); for (BitSetIterator i = parents.iterator(); i.hasNext();) { TypeVariableBV parent = resolver.typeVariableForId(i.next()).ecr(); if (parent.ancestors == null) { parent.fixAncestors(); } ancestors.set(parent.id); ancestors.or(parent.ancestors); indirectAncestors.or(parent.ancestors); } this.ancestors = ancestors; this.indirectAncestors = indirectAncestors; }
private void merge(TypeVariableBV var) throws TypeException { if (depth != 0 || var.depth != 0) { throw new InternalTypingException(); } // Merge types if (type == null) { type = var.type; } else if (var.type != null) { error("Type Error(1): Attempt to merge two types."); } parents.or(var.parents); parents.clear(var.ownId()); parents.clear(this.ownId()); children.or(var.children); children.clear(var.ownId()); children.clear(this.ownId()); }
final private BitVector makeMaskOfInterface(SootClass interf) { if (!(interf.isInterface())) { throw new RuntimeException(); } BitVector ret = new BitVector(pag.getAllocNodeNumberer().size()); typeMask.put(interf.getType(), ret); Collection<SootClass> implementers = getFastHierarchy().getAllImplementersOfInterface(interf); for (SootClass impl : implementers) { BitVector other = typeMask.get(impl.getType()); if (other == null) { other = makeClassTypeMask(impl); } ret.or(other); } // I think, the following can be eliminated. It is added to make // type-masks exactly the same as the original type-masks if (implementers.size() == 0) { for (AllocNode an : anySubtypeAllocs) { ret.set(an.getNumber()); } } return ret; }
ancestors.or(parent.ancestors); parent.fixDescendants(id);
mask.or(makeClassTypeMask(subcl));
private void fixParents() { if (rep != this) { ecr().fixParents(); } BitVector invalid = new BitVector(); invalid.or(parents); invalid.and(resolver.invalidIds()); for (BitSetIterator i = invalid.iterator(); i.hasNext();) { parents.set(resolver.typeVariableForId(i.next()).id()); } parents.clear(this.id); parents.clear(this.id()); parents.andNot(invalid); }
private void fixAncestors() { BitVector ancestors = new BitVector(0); BitVector indirectAncestors = new BitVector(0); for (TypeVariable typeVariable : parents) { TypeVariable parent = typeVariable.ecr(); if(parent.ancestors == null) { parent.fixAncestors(); } ancestors.set(parent.id); ancestors.or(parent.ancestors); indirectAncestors.or(parent.ancestors); } this.ancestors = ancestors; this.indirectAncestors = indirectAncestors; }
private void remove_transitive_constraints() throws TypeException { refresh_solved(); BitVector list = new BitVector(); list.or(solved); list.or(unsolved); for( BitSetIterator varIt = list.iterator(); varIt.hasNext(); ) { final TypeVariableBV var = typeVariableForId(varIt.next()); var.removeIndirectRelations(); } }
private void remove_transitive_constraints() throws TypeException { refresh_solved(); BitVector list = new BitVector(); list.or(solved); list.or(unsolved); for( BitSetIterator varIt = list.iterator(); varIt.hasNext(); ) { final TypeVariableBV var = typeVariableForId(varIt.next()); var.removeIndirectRelations(); } }
private void fixParents() { if(rep != this) { ecr().fixParents(); } BitVector invalid = new BitVector(); invalid.or(parents); invalid.and(resolver.invalidIds()); for(BitSetIterator i = invalid.iterator(); i.hasNext();) { parents.set(resolver.typeVariableForId(i.next()).id()); } parents.clear(this.id); parents.clear(this.id()); parents.andNot(invalid); }
private void fixParents() { if(rep != this) { ecr().fixParents(); } BitVector invalid = new BitVector(); invalid.or(parents); invalid.and(resolver.invalidIds()); for(BitSetIterator i = invalid.iterator(); i.hasNext();) { parents.set(resolver.typeVariableForId(i.next()).id()); } parents.clear(this.id); parents.clear(this.id()); parents.andNot(invalid); }