All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.snapscript.compile.validate.InstanceValidator Maven / Gradle / Ivy


package org.snapscript.compile.validate;

import static org.snapscript.core.Reserved.TYPE_CLASS;
import static org.snapscript.core.Reserved.TYPE_THIS;

import org.snapscript.core.InternalStateException;
import org.snapscript.core.Model;
import org.snapscript.core.Scope;
import org.snapscript.core.State;
import org.snapscript.core.Type;
import org.snapscript.core.TypeExtractor;
import org.snapscript.core.Value;
import org.snapscript.core.convert.ConstraintMatcher;

public class InstanceValidator {
   
   private static final String[] CONSTANTS = { TYPE_THIS, TYPE_CLASS };
   
   private final TypeValidator validator;
   
   public InstanceValidator(ConstraintMatcher matcher, TypeExtractor extractor) {
      this.validator = new TypeValidator(matcher, extractor);
   }
   
   public void validateInstance(Scope instance) throws Exception {
      State state = instance.getState();
      Type type = instance.getType();
      Model model = instance.getModel();
      
      if(model == null) {
         throw new InternalStateException("Instance of '" + type+ "' does not reference model");
      }
      for(String constant : CONSTANTS) {
         Value value = state.get(constant);
         
         if(value == null) {
            throw new InternalStateException("Constant '" + constant + "' not defined for '" + type+ "'");
         }
         Object object = value.getValue();
         
         if(object == null) {
            throw new InternalStateException("Constant '" + constant + "' not set for '" + type+ "'");
         }
      }
      validator.validate(type);
   }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy