package org.eclipselabs.spray.xtext.validation; import java.util.HashSet; import java.util.Set; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EReference; import org.eclipse.xtext.validation.Check; import org.eclipselabs.spray.mm.spray.MetaClass; import org.eclipselabs.spray.mm.spray.SprayPackage; import org.eclipselabs.spray.xtext.util.GenModelHelper; import com.google.inject.Inject; @SuppressWarnings("restriction") public class SprayJavaValidator extends AbstractSprayJavaValidator { @Inject private GenModelHelper genModelHelper; /** * Add additional EReferences for type conformance validation of expressions. */ @Override protected Set<EReference> getTypeConformanceCheckedReferences() { Set<EReference> references = new HashSet<EReference>(super.getTypeConformanceCheckedReferences()); references.add(SprayPackage.Literals.TEXT__VALUE); return references; } @Check public void checkGenModelAvailable(MetaClass clazz) { EClass type = clazz.getType(); try { // call of getEPackageClassName will result in an IllegalStateException when no GenModel was found if (type.eIsProxy()) { return; // scoping problem; will be reported as separate problem } genModelHelper.getEPackageClassName(type); } catch (IllegalStateException e) { error("No genmodel registered for EClass " + type.getName(), clazz, SprayPackage.Literals.META_CLASS__TYPE, IssueCodes.MISSING_GENMODEL); } } }