/** * Copyright (c) 2012 committers of YAKINDU and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * Contributors: * committers of YAKINDU - initial API and implementation * */ package org.yakindu.sct.model.sgraph.validation; import java.util.Collection; import java.util.Map; import org.eclipse.emf.ecore.resource.Resource.Diagnostic; import org.eclipse.xtext.validation.AbstractDeclarativeValidator; import org.eclipse.xtext.validation.Check; import org.eclipse.xtext.validation.CheckType; import org.eclipse.xtext.validation.EValidatorRegistrar; import org.yakindu.sct.model.sgraph.SpecificationElement; import org.yakindu.sct.model.sgraph.Statechart; import org.yakindu.sct.model.sgraph.resource.AbstractSCTResource; import com.google.inject.Inject; /** * This validator is intended to be used by a compositeValidator (See * {@link org.eclipse.xtext.validation.ComposedChecks}) of another language * specific validator. It does not register itself as an EValidator. * * It checks for resource errors in {@link AbstractSCTResource}s. * * @author andreas muelder - Initial contribution and API * @author benjamin schwertfeger * */ public class SCTResourceValidator extends AbstractDeclarativeValidator { @Check(CheckType.FAST) public void checkUnresolvableProxies(Statechart sc) { if (!(sc.eResource() instanceof AbstractSCTResource)) { return; } AbstractSCTResource resource = (AbstractSCTResource) sc.eResource(); for (Map.Entry<SpecificationElement, Collection<Diagnostic>> entry : resource.getLinkingDiagnostics().asMap() .entrySet()) { for (Diagnostic diag : entry.getValue()) { if (entry.getKey().eResource() != null) error(diag.getMessage(), entry.getKey(), null, -1); } } } @Check(CheckType.FAST) public void checkSyntaxErrors(Statechart sc) { if (!(sc.eResource() instanceof AbstractSCTResource)) { return; } AbstractSCTResource resource = (AbstractSCTResource) sc.eResource(); for (Map.Entry<SpecificationElement, Collection<Diagnostic>> entry : resource.getSyntaxDiagnostics().asMap() .entrySet()) { for (Diagnostic diag : entry.getValue()) { if (entry.getKey().eResource() != null) error(diag.getMessage(), entry.getKey(), null, -1); } } } @Override public boolean isLanguageSpecific() { return false; } @Override @Inject public void register(EValidatorRegistrar registrar) { // Do not register because this validator is only a composite #398987 } }