Exemple #1
0
  private <V> Exp getValidTypeConditionsTo(
      V value, MTType dst, Map<String, MTType> bindings, RelationshipPathStrategy<V> pathStrategy)
      throws TypeMismatchException {

    if (!myRelationships.containsKey(dst)) {
      throw TypeMismatchException.INSTANCE;
    }

    Exp finalConditions = myTypeGraph.getFalseVarExp();
    Set<TypeRelationship> relationships = myRelationships.get(dst);
    boolean foundTrivialPath = false;
    Iterator<TypeRelationship> relationshipIter = relationships.iterator();
    TypeRelationship relationship;
    Exp relationshipConditions;
    while (!foundTrivialPath && relationshipIter.hasNext()) {
      relationship = relationshipIter.next();

      try {
        relationshipConditions =
            pathStrategy.getValidTypeConditionsAlong(relationship, value, bindings);

        foundTrivialPath = (relationshipConditions.isLiteralTrue());

        finalConditions = myTypeGraph.formDisjunct(relationshipConditions, finalConditions);
      } catch (NoSolutionException nse) {
      }
    }

    if (foundTrivialPath) {
      finalConditions = myTypeGraph.getTrueVarExp();
    }

    return finalConditions;
  }