Search in sources :

Example 1 with IConcreteSyntaxDiagnostic

use of org.eclipse.xtext.validation.IConcreteSyntaxDiagnosticProvider.IConcreteSyntaxDiagnostic in project xtext-core by eclipse.

the class ConcreteSyntaxValidator method validateRule.

protected List<IConcreteSyntaxDiagnostic> validateRule(EObject obj, ISyntaxConstraint rule) {
    List<IConcreteSyntaxDiagnostic> allDiags = new ArrayList<IConcreteSyntaxDiagnostic>();
    Set<ISyntaxConstraint> expectedTypes = collectUnfulfilledSemanticElements(obj.eClass(), rule);
    if (expectedTypes.size() > 0)
        allDiags.add(diagnosticProvider.createUnexpectedTypeDiagnostic(rule, obj, expectedTypes));
    if (!allDiags.isEmpty())
        return allDiags;
    IQuantities quantities = quantityProvider.getAssignmentQuantities(obj, rule, allDiags);
    if (quantities == null || !allDiags.isEmpty())
        return allDiags;
    List<IConcreteSyntaxDiagnostic> diags = validateQuantities(quantities, rule);
    if (diags.isEmpty())
        return diags;
    allDiags.addAll(diags);
    return allDiags;
}
Also used : ISyntaxConstraint(org.eclipse.xtext.validation.IConcreteSyntaxConstraintProvider.ISyntaxConstraint) ArrayList(java.util.ArrayList) IQuantities(org.eclipse.xtext.validation.IAssignmentQuantityAllocator.IQuantities) IConcreteSyntaxDiagnostic(org.eclipse.xtext.validation.IConcreteSyntaxDiagnosticProvider.IConcreteSyntaxDiagnostic)

Example 2 with IConcreteSyntaxDiagnostic

use of org.eclipse.xtext.validation.IConcreteSyntaxDiagnosticProvider.IConcreteSyntaxDiagnostic in project xtext-core by eclipse.

the class ConcreteSyntaxValidator method validateQuantities.

protected List<IConcreteSyntaxDiagnostic> validateQuantities(IQuantities quants, ISyntaxConstraint rule) {
    List<IConcreteSyntaxDiagnostic> diag = new ArrayList<IConcreteSyntaxDiagnostic>();
    Map<ISyntaxConstraint, Pair<Integer, Integer>> minmax = Maps.newHashMap();
    for (Map.Entry<EStructuralFeature, Collection<ISyntaxConstraint>> e : quants.groupByFeature().entrySet()) {
        int min = UNDEF, max = 0;
        Set<ISyntaxConstraint> involved = new HashSet<ISyntaxConstraint>();
        for (ISyntaxConstraint a : e.getValue()) {
            involved.add(a);
            int mi = intervalProvider.getMin(quants, a, involved);
            if (mi != UNDEF)
                min = min == UNDEF ? mi : mi + min;
            int ma = intervalProvider.getMax(quants, a, involved, null);
            if (ma != UNDEF && max != MAX)
                max = ma == MAX ? ma : max + ma;
            minmax.put(a, Tuples.create(mi, ma));
        }
        int actual = quants.getFeatureQuantity(e.getKey());
        if (actual < min || actual > max)
            diag.add(diagnosticProvider.createFeatureQuantityDiagnostic(rule, quants, e.getKey(), actual, min, max, involved));
    }
    // System.out.println("Validation: " + obj.toString(minmax));
    return diag;
}
Also used : ArrayList(java.util.ArrayList) EStructuralFeature(org.eclipse.emf.ecore.EStructuralFeature) IConcreteSyntaxDiagnostic(org.eclipse.xtext.validation.IConcreteSyntaxDiagnosticProvider.IConcreteSyntaxDiagnostic) ISyntaxConstraint(org.eclipse.xtext.validation.IConcreteSyntaxConstraintProvider.ISyntaxConstraint) ISyntaxConstraint(org.eclipse.xtext.validation.IConcreteSyntaxConstraintProvider.ISyntaxConstraint) Collection(java.util.Collection) Map(java.util.Map) Pair(org.eclipse.xtext.util.Pair) HashSet(java.util.HashSet)

Example 3 with IConcreteSyntaxDiagnostic

use of org.eclipse.xtext.validation.IConcreteSyntaxDiagnosticProvider.IConcreteSyntaxDiagnostic in project xtext-core by eclipse.

the class ConcreteSyntaxValidator method validateObject.

@Override
public boolean validateObject(EObject obj, IDiagnosticAcceptor acceptor, Map<Object, Object> context) {
    if (isEObjectTransient(obj))
        return true;
    List<IConcreteSyntaxDiagnostic> allDiags = new ArrayList<IConcreteSyntaxDiagnostic>();
    Collection<ISyntaxConstraint> rules = constraintProvider.getConstraints(obj.eClass());
    if (rules.isEmpty())
        // no validation if there are no rules for this EClass
        return true;
    for (ISyntaxConstraint rule : rules) {
        // System.out.println(rule);
        List<IConcreteSyntaxDiagnostic> diags = validateRule(obj, rule);
        if (diags.size() == 0)
            // validation succeeded
            return true;
        allDiags.addAll(diags);
    }
    for (IConcreteSyntaxDiagnostic d : allDiags) acceptor.accept(d);
    return false;
}
Also used : ISyntaxConstraint(org.eclipse.xtext.validation.IConcreteSyntaxConstraintProvider.ISyntaxConstraint) ArrayList(java.util.ArrayList) IConcreteSyntaxDiagnostic(org.eclipse.xtext.validation.IConcreteSyntaxDiagnosticProvider.IConcreteSyntaxDiagnostic)

Aggregations

ArrayList (java.util.ArrayList)3 ISyntaxConstraint (org.eclipse.xtext.validation.IConcreteSyntaxConstraintProvider.ISyntaxConstraint)3 IConcreteSyntaxDiagnostic (org.eclipse.xtext.validation.IConcreteSyntaxDiagnosticProvider.IConcreteSyntaxDiagnostic)3 Collection (java.util.Collection)1 HashSet (java.util.HashSet)1 Map (java.util.Map)1 EStructuralFeature (org.eclipse.emf.ecore.EStructuralFeature)1 Pair (org.eclipse.xtext.util.Pair)1 IQuantities (org.eclipse.xtext.validation.IAssignmentQuantityAllocator.IQuantities)1