몇 가지 환경 설정을 통해 Xtext 유효성 검사기를 구성 가능하게 만들고 싶지만 그 방법을 찾지 못했습니다.Xtext 유효성 검사기에서 프로젝트의 환경 설정에 어떻게 액세스합니까?
내가 할 수있는 어딘가에 예제가 있습니까?
몇 가지 환경 설정을 통해 Xtext 유효성 검사기를 구성 가능하게 만들고 싶지만 그 방법을 찾지 못했습니다.Xtext 유효성 검사기에서 프로젝트의 환경 설정에 어떻게 액세스합니까?
내가 할 수있는 어딘가에 예제가 있습니까?
이것은 간단하지 않습니다 :
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.IPreferencesService;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.emf.common.util.URI;
import com.google.inject.Singleton;
@Singleton
public class I18nPreferences {
private final static Logger log = Logger.getLogger(I18nPreferences.class);
public final static String I18N_QUALIFIER = "com.pany.eclipse.dsl.Dsl"; // name of the prefs file without extension
public final static String VALIDATION_IGNORE_PATTERN_KEY = "validation.ignore";
/** Get validation configuration for a resource */
public ValidationConfiguration validationConfiguration(URI uri) {
// URI looks like this:
// platform:/resource/project/src/.../file.dsl
log.debug("Search config for " + uri);
ValidationConfiguration config = new ValidationConfiguration();
IPreferencesService service = Platform.getPreferencesService();
if(null == service) {
// Probably not running under Eclipse
log.debug("No IPreferencesService");
return config;
}
String platformString = uri.toPlatformString(true);
if(null == platformString) {
// Probably not running from the Eclipse UI. Might be a unit test or something
return config;
}
IWorkspace workspace = ResourcesPlugin.getWorkspace();
String s = uri.isPlatformResource() ? uri.toPlatformString(true) : uri.toString();
Path path = new Path(s);
IResource resource = workspace.getRoot().getFile(path);
IProject project = null == resource ? null : resource.getProject();
if(null == resource || null == project) {
log.debug("Can't locate project " + uri + " in workspace");
return config;
}
log.debug("Loading preferences for " + project.getName());
IScopeContext[] contexts = { new ProjectScope(resource.getProject()) };
String defaultValue = "";
String patterns = service.getString(I18N_QUALIFIER, VALIDATION_IGNORE_PATTERN_KEY, defaultValue, contexts);
log.debug("Found pattern: " + patterns);
config.setIgnoreString(patterns);
return config;
}
}
이 적어도 두 가지 가능성이 있습니다 :
이동하는 UI 프로젝트에 검사기 직접 환경 설정을 사용합니다.
런타임 프로젝트에서 #isEnabled (..)를 사용하여 ValidatorGuard와 같은 인터페이스를 생성하고 'true'를 반환하는 기본 구현/일부 속성을 사용합니다. UI 프로젝트에서 해당 인터페이스를 구현하십시오. PreferenceStore에서 정보를 읽어 특정 유효성 검사의 실행 가능 상태를 결정할 수도 있습니다. 그것은 보이는