List of usage examples for com.google.common.collect FluentIterable allMatch
@CheckReturnValue public final boolean allMatch(Predicate<? super E> predicate)
From source file:org.sosy_lab.cpachecker.core.algorithm.bmc.CandidateInvariantConjunction.java
private static boolean areMatchingLocationInvariants(Iterable<? extends CandidateInvariant> pElements) { FluentIterable<? extends CandidateInvariant> elements = FluentIterable.from(pElements); if (elements.isEmpty()) { return false; }//from w w w .ja v a 2 s .co m return elements.allMatch(lfi -> lfi instanceof LocationFormulaInvariant); }
From source file:com.google.errorprone.bugpatterns.PrivateConstructorForUtilityClass.java
@Override public Description matchClass(ClassTree classTree, VisitorState state) { if (!classTree.getKind().equals(CLASS)) { return NO_MATCH; }// w w w . j a v a 2s .co m FluentIterable<? extends Tree> nonSyntheticMembers = FluentIterable.from(classTree.getMembers()) .filter(Predicates.not(new Predicate<Tree>() { @Override public boolean apply(Tree tree) { return tree.getKind().equals(METHOD) && isGeneratedConstructor((MethodTree) tree); } })); if (nonSyntheticMembers.isEmpty()) { return NO_MATCH; } boolean isUtilityClass = nonSyntheticMembers.allMatch(new Predicate<Tree>() { @Override public boolean apply(Tree tree) { switch (tree.getKind()) { case CLASS: return ((ClassTree) tree).getModifiers().getFlags().contains(STATIC); case METHOD: return ((MethodTree) tree).getModifiers().getFlags().contains(STATIC); case VARIABLE: return ((VariableTree) tree).getModifiers().getFlags().contains(STATIC); case BLOCK: return ((BlockTree) tree).isStatic(); case ENUM: case ANNOTATION_TYPE: case INTERFACE: return true; default: throw new AssertionError("unknown member type:" + tree.getKind()); } } }); if (!isUtilityClass) { return NO_MATCH; } return describeMatch(classTree, addMembers(classTree, state, "private " + classTree.getSimpleName() + "() {}")); }
From source file:com.google.errorprone.bugpatterns.inject.dagger.PrivateConstructorForNoninstantiableModule.java
@Override public Description matchClass(ClassTree classTree, VisitorState state) { if (!DaggerAnnotations.isAnyModule().matches(classTree, state)) { return NO_MATCH; }// w w w .j a v a 2 s. c o m // if a module is declared as an interface, skip it if (!classTree.getKind().equals(CLASS)) { return NO_MATCH; } FluentIterable<? extends Tree> nonSyntheticMembers = FluentIterable.from(classTree.getMembers()) .filter(Predicates.not(new Predicate<Tree>() { @Override public boolean apply(Tree tree) { return tree.getKind().equals(METHOD) && isGeneratedConstructor((MethodTree) tree); } })); // ignore empty modules if (nonSyntheticMembers.isEmpty()) { return NO_MATCH; } if (nonSyntheticMembers.anyMatch(IS_CONSTRUCTOR)) { return NO_MATCH; } boolean hasBindingDeclarationMethods = nonSyntheticMembers .anyMatch(matcherAsPredicate(isBindingDeclarationMethod(), state)); if (hasBindingDeclarationMethods) { return describeMatch(classTree, addPrivateConstructor(classTree, state)); } boolean allStaticMembers = nonSyntheticMembers.allMatch(matcherAsPredicate(isStatic(), state)); if (allStaticMembers) { return describeMatch(classTree, addPrivateConstructor(classTree, state)); } return NO_MATCH; }
From source file:org.sosy_lab.cpachecker.util.predicates.pathformula.PathFormulaManagerImpl.java
/** * Build a formula containing a predicate for all branching situations in the * ARG. If a satisfying assignment is created for this formula, it can be used * to find out which paths in the ARG are feasible. * * This method may be called with an empty set, in which case it does nothing * and returns the formula "true"./*from w ww.j av a 2 s .com*/ * * @param elementsOnPath The ARG states that should be considered. * @return A formula containing a predicate for each branching. */ @Override public BooleanFormula buildBranchingFormula(Iterable<ARGState> elementsOnPath) throws CPATransferException, InterruptedException { // build the branching formula that will help us find the real error path BooleanFormula branchingFormula = bfmgr.makeBoolean(true); for (final ARGState pathElement : elementsOnPath) { if (pathElement.getChildren().size() > 1) { if (pathElement.getChildren().size() > 2) { // can't create branching formula if (from(pathElement.getChildren()).anyMatch(AbstractStates.IS_TARGET_STATE)) { // We expect this situation of one of the children is a target state created by PredicateCPA. continue; } else { logger.log(Level.WARNING, "ARG branching with more than two outgoing edges at ARG node " + pathElement.getStateId() + "."); return bfmgr.makeBoolean(true); } } FluentIterable<CFAEdge> outgoingEdges = from(pathElement.getChildren()) .transform(new Function<ARGState, CFAEdge>() { @Override public CFAEdge apply(ARGState child) { return pathElement.getEdgeToChild(child); } }); if (!outgoingEdges.allMatch(Predicates.instanceOf(AssumeEdge.class))) { if (from(pathElement.getChildren()).anyMatch(AbstractStates.IS_TARGET_STATE)) { // We expect this situation of one of the children is a target state created by PredicateCPA. continue; } else { logger.log(Level.WARNING, "ARG branching without AssumeEdge at ARG node " + pathElement.getStateId() + "."); return bfmgr.makeBoolean(true); } } AssumeEdge edge = null; for (CFAEdge currentEdge : outgoingEdges) { if (((AssumeEdge) currentEdge).getTruthAssumption()) { edge = (AssumeEdge) currentEdge; break; } } assert edge != null; BooleanFormula pred = bfmgr.makeVariable(BRANCHING_PREDICATE_NAME + pathElement.getStateId(), 0); // create formula by edge, be sure to use the correct SSA indices! // TODO the class PathFormulaManagerImpl should not depend on PredicateAbstractState, // it is used without PredicateCPA as well. PathFormula pf; PredicateAbstractState pe = AbstractStates.extractStateByType(pathElement, PredicateAbstractState.class); if (pe == null) { logger.log(Level.WARNING, "Cannot find precise error path information without PredicateCPA"); return bfmgr.makeBoolean(true); } else { pf = pe.getPathFormula(); } pf = this.makeEmptyPathFormula(pf); // reset everything except SSAMap pf = this.makeAnd(pf, edge); // conjunct with edge BooleanFormula equiv = bfmgr.equivalence(pred, pf.getFormula()); branchingFormula = bfmgr.and(branchingFormula, equiv); } } return branchingFormula; }