DependencyType[] getTypesInternal() { if (typeSet == null) { return new DependencyType[0]; } DependencyType[] types = typeSet.getTypes(); if (typeFilter == null) { return types; } DependencyType[] result = new DependencyType[types.length]; int i = 0; for (DependencyType type : types) { if (filter(type)) { result[i++] = type; } } return i == result.length ? result : Arrays.copyOf(result, i); }
@Override public String[] getTypes() { if (typeSet == null) { return new String[0]; } DependencyType[] types = typeSet.getTypes(); String[] result = new String[types.length]; int i = 0; for (DependencyType type : types) { if (filter(type)) { result[i++] = type.getName(); } } return i == result.length ? result : Arrays.copyOf(result, i); }
private void scheduleSingleType(DependencyType type, Runnable action) { if (DependencyAnalyzer.shouldLog) { for (DependencyNode node : typeSet.domain) { if (node.filter(type)) { System.out.println(node.tag + " -> " + type.getName()); } } } Transition[] transitions = typeSet.getTransitions().toArray(Transition.class); List<ConsumerWithNode> consumerEntries = typeSet.getConsumers(); if (action != null) { action.run(); } for (Transition transition : transitions) { if (transition.source.filter(type) && transition.filterType(type)) { dependencyAnalyzer.schedulePropagation(transition, type); } } for (ConsumerWithNode entry : consumerEntries) { if (entry.node.filter(type)) { for (DependencyConsumer consumer : entry.consumers) { dependencyAnalyzer.schedulePropagation(consumer, type); } } } }
void consume(DependencyType type) { if (!destination.hasType(type) && filterType(type) && destination.filter(type)) { propagate(type); } }
for (int index : filteredTypes) { DependencyType type = dependencyAnalyzer.types.get(index); if (sourceNode.filter(type) && !targetNode.hasType(type) && targetNode.filter(type) && (filter == null || filter.match(type))) { types[j++] = type; for (int index = this.types.nextSetBit(0); index >= 0; index = this.types.nextSetBit(index + 1)) { DependencyType type = dependencyAnalyzer.types.get(index); if (sourceNode.filter(type) && !targetNode.hasType(type) && targetNode.filter(type) && (filter == null || filter.match(type))) { types[j++] = type; for (int i = 0; i < types.length; ++i) { DependencyType type = dependencyAnalyzer.types.get(smallTypes[i]); if (sourceNode.filter(type) && !targetNode.hasType(type) && targetNode.filter(type) && (filter == null || filter.match(type))) { types[j++] = type;
void schedulePropagation(Transition consumer, DependencyType type) { if (!consumer.destination.filter(type)) { return; } if (consumer.pendingTypes == null && propagationDepth < PROPAGATION_STACK_THRESHOLD && consumer.pointsToDomainOrigin() && consumer.destination.propagateCount < 20) { ++propagationDepth; consumer.consume(type); --propagationDepth; } else { if (consumer.pendingTypes == null) { pendingTransitions.add(consumer); consumer.pendingTypes = new IntHashSet(50); } consumer.pendingTypes.add(type.index); } }
public void propagate(DependencyType type) { if (degree > DEGREE_THRESHOLD) { return; } if (!hasType(type) && filter(type)) { propagateCount++; moveToSeparateDomain(); typeSet.addType(type); scheduleSingleType(type, null); } }
for (DependencyNode node : typeSet.domain) { for (DependencyType type : newTypes) { if (node.filter(type)) { System.out.println(node.tag + " -> " + type.getName()); for (int i = 0; i < typesToPropagate.length; ++i) { DependencyType type = typesToPropagate[i]; if (transition.source.filter(type) && transition.filterType(type)) { typesToPropagate[j++] = type; } else if (typesToPropagate == newTypes) { for (int i = 0; i < filteredTypes.length; ++i) { DependencyType type = filteredTypes[i]; if (node.filter(type)) { filteredTypes[j++] = type; } else {
for (DependencyType type : types) { boolean added = false; if (!destination.hasType(type) && destination.filter(type)) { types[j++] = type; added = true; for (DependencyType type : types) { boolean added = false; if (filterType(type) && !destination.hasType(type) && destination.filter(type)) { types[j++] = type; added = true;
for (int i = 0; i < newTypes.length; ++i) { DependencyType type = newTypes[i]; if (!hasType(type) && filter(type)) { newTypes[j++] = type; } else if (!copied) {