package org.xtest.ui.editor;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.util.CancelIndicator;
import org.eclipse.xtext.validation.CheckMode;
import org.eclipse.xtext.validation.CheckType;
import org.eclipse.xtext.validation.Issue;
import org.eclipse.xtext.validation.ResourceValidatorImpl;
import org.xtest.preferences.PerFilePreferenceProvider;
import org.xtest.preferences.RuntimePref;
import org.xtest.xTest.Body;
import com.google.inject.Inject;
/**
* Custom {@link ResourceValidatorImpl} that adds the additional {@link CheckType#EXPENSIVE} if the
* run while editing preference is set on a file
*
* @author Michael Barry
*/
public class SpecialResourceValidator extends ResourceValidatorImpl {
@Inject
private PerFilePreferenceProvider preferenceProvider;
@Override
public List<Issue> validate(Resource resource, final CheckMode mode, CancelIndicator mon) {
EObject object = resource.getContents().get(0);
CheckMode mode2 = mode;
if (object instanceof Body) {
if (preferenceProvider.get((Body) object, RuntimePref.RUN_WHILE_EDITING)) {
mode2 = new CheckMode() {
@Override
public boolean shouldCheck(CheckType type) {
return type == CheckType.EXPENSIVE || mode.shouldCheck(type);
}
@Override
public String toString() {
return mode.toString();
}
};
}
}
return super.validate(resource, mode2, mon);
}
}