Пример #1
0
  /** @since 2.3 */
  protected void validateGrammar(Grammar grammar) {
    validateAllImports(grammar);
    EValidator validator = EValidator.Registry.INSTANCE.getEValidator(XtextPackage.eINSTANCE);
    if (validator != null) {
      DiagnosticChain chain =
          new DiagnosticChain() {

            @Override
            public void add(Diagnostic diagnostic) {
              if (diagnostic.getSeverity() == Diagnostic.ERROR) {
                if (diagnostic.getException() == null)
                  throw new IllegalStateException(diagnostic.getMessage());
                else
                  throw new IllegalStateException(
                      diagnostic.getMessage(), diagnostic.getException());
              }
            }

            @Override
            public void addAll(Diagnostic diagnostic) {
              add(diagnostic);
            }

            @Override
            public void merge(Diagnostic diagnostic) {
              throw new UnsupportedOperationException();
            }
          };
      validator.validate(grammar, chain, null);
      TreeIterator<EObject> iterator = grammar.eAllContents();
      while (iterator.hasNext())
        validator.validate(iterator.next(), chain, new HashMap<Object, Object>());
    }
  }
Пример #2
0
  // BEGIN COMPLEX CODE
  public boolean validateKeyAttributeDomainModelReference_resolveable(
      VKeyAttributeDomainModelReference keyAttributeDomainModelReference,
      DiagnosticChain diagnostics,
      Map<Object, Object> context) {

    if (keyAttributeDomainModelReference.getKeyDMR() == null) {
      if (keyAttributeDomainModelReference.eContainer() != null && diagnostics != null) {
        diagnostics.add(
            createDiagnostic(
                Diagnostic.ERROR,
                0,
                "Missing key DMR.", //$NON-NLS-1$
                keyAttributeDomainModelReference.eContainer(),
                keyAttributeDomainModelReference.eContainingFeature()));
      }
      return false;
    }

    if (keyAttributeDomainModelReference.getKeyValue() == null) {
      if (keyAttributeDomainModelReference.eContainer() != null && diagnostics != null) {
        diagnostics.add(
            createDiagnostic(
                Diagnostic.ERROR,
                0,
                "No key Value.", //$NON-NLS-1$
                keyAttributeDomainModelReference.eContainer(),
                keyAttributeDomainModelReference.eContainingFeature()));
      }
      return false;
    }

    // validate path to reference
    if (!ViewValidator.INSTANCE.validateFeaturePathDomainModelReference_resolveable(
        keyAttributeDomainModelReference, diagnostics, context)) {
      return false;
    }

    final EStructuralFeature feature = keyAttributeDomainModelReference.getDomainModelEFeature();
    if (!EReference.class.isInstance(feature) || !feature.isMany()) {
      if (diagnostics != null) {
        final String message =
            "Domain model reference does not end at a multi reference."; //$NON-NLS-1$
        if (keyAttributeDomainModelReference.eContainer() != null) {
          diagnostics.add(
              createDiagnostic(
                  Diagnostic.ERROR,
                  0,
                  message,
                  keyAttributeDomainModelReference.eContainer(),
                  keyAttributeDomainModelReference.eContainingFeature()));
        }
        diagnostics.add(
            createDiagnostic(
                Diagnostic.ERROR,
                0,
                message,
                keyAttributeDomainModelReference,
                VViewPackage.eINSTANCE.getFeaturePathDomainModelReference_DomainModelEFeature()));
      }
      return false;
    }

    final EClass rootEClass = EReference.class.cast(feature).getEReferenceType();
    final VDomainModelReference targetDMR = keyAttributeDomainModelReference.getKeyDMR();
    EValidator validator =
        EValidator.Registry.INSTANCE.getEValidator(targetDMR.eClass().getEPackage());
    Map<Object, Object> newContext = new LinkedHashMap<Object, Object>(context);
    newContext.put(ViewValidator.ECLASS_KEY, rootEClass);
    if (!validator.validate(targetDMR, diagnostics, newContext)) {
      final String message = "Key DMR cannot be resolved"; // $NON-NLS-1$
      if (keyAttributeDomainModelReference.eContainer() != null && diagnostics != null) {
        diagnostics.add(
            createDiagnostic(
                Diagnostic.ERROR,
                0,
                message,
                keyAttributeDomainModelReference.eContainer(),
                keyAttributeDomainModelReference.eContainingFeature()));
      }
      return false;
    }

    if (keyAttributeDomainModelReference.getValueDMR() == null) {
      if (keyAttributeDomainModelReference.eContainer() != null && diagnostics != null) {
        diagnostics.add(
            createDiagnostic(
                Diagnostic.ERROR,
                0,
                "Missing value DMR", //$NON-NLS-1$
                keyAttributeDomainModelReference.eContainer(),
                keyAttributeDomainModelReference.eContainingFeature()));
      }
      return false;
    }
    final VDomainModelReference valueDMR = keyAttributeDomainModelReference.getValueDMR();
    validator = EValidator.Registry.INSTANCE.getEValidator(valueDMR.eClass().getEPackage());
    newContext = new LinkedHashMap<Object, Object>(context);
    newContext.put(ViewValidator.ECLASS_KEY, rootEClass);
    if (!validator.validate(valueDMR, diagnostics, newContext)) {
      final String message = "Value DMR cannot be resolved"; // $NON-NLS-1$
      if (keyAttributeDomainModelReference.eContainer() != null && diagnostics != null) {
        diagnostics.add(
            createDiagnostic(
                Diagnostic.ERROR,
                0,
                message,
                keyAttributeDomainModelReference.eContainer(),
                keyAttributeDomainModelReference.eContainingFeature()));
      }
      return false;
    }
    return true;
  }