Hi,
just gave it a try and it is kind of a 20liner
Model:
refs+=Ref*
;
Ref:
"ref" ref=FQN
;
FQN: ID ("." ID)*;
@ImplementedBy(ITypeValidationHelper.NullImpl.class)
public interface ITypeValidationHelper {
boolean validate(URI uri, String name);
public static class NullImpl implements ITypeValidationHelper {
@Override
public boolean validate(URI uri, String name) {
return true;
}
}
}
public class MyDslJavaValidator extends AbstractMyDslJavaValidator {
@Inject
ITypeValidationHelper tvh;
@Check
public void checkType(Ref ref) {
if (!tvh.validate(ref.eResource().getURI(), ref.getRef())) {
warning("type does not exist", MyDslPackage.Literals.REF__REF);
}
}
}
public class JdtTypeValidationHelper implements ITypeValidationHelper {
@Inject
IWorkspace workspace;
@Override
public boolean validate(URI uri, String name) {
IProject project = workspace.getRoot().getFile(new Path(uri.toPlatformString(true))).getProject();
IJavaProject javaProject = JavaCore.create(project);
try {
IType type = javaProject.findType(name);
return type != null;
} catch (JavaModelException e) {
return false;
}
}
}
public class MyDslUiModule extends AbstractMyDslUiModule {
public MyDslUiModule(AbstractUIPlugin plugin) {
super(plugin);
}
public Class<? extends ITypeValidationHelper> bindITypeValidationHelper() {
return JdtTypeValidationHelper.class;
}
}