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;
}
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;
}
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;
}
Aggregations