Escribo un editor de texto y hago un resaltado semántico. Parte del lenguaje que estoy analizando se refiere a los archivos, que deberían existir en el proyecto. Me gustaría destacar en función de si estos archivos están en el lugar correcto. Por el momento, tengo una solución muy feo, y estoy seguro de que hay una mejor manera:(Una forma mejor de) Obtener archivos dentro de un proyecto usando Eclipse y XText
public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) {
...
String resStr = resource.getURI().toString();
String projName = resStr.replaceAll("^.*resource/", "").replaceAll("/.*", "");
IWorkspaceRoot workspace = ResourcesPlugin.getWorkspace().getRoot();
IFile file = workspace.getFile(new Path(projName + "/" + value));
ok = file != null && file.exists();
NOTA: "valor" es una cadena que me he encontrado al analizar, no el archivo actual . Quiero averiguar si {workspace}/{project}/{value} existe.
Debe haber una mejor manera de obtener el nombre/ubicación del proyecto, basado en el archivo actual; He puesto esto como una pregunta de XText, como me gustaría, si es posible, para evitar usar el editor seleccionado actualmente, y la selección de base en el recurso actual, que se presenta como un recurso de XText.
NOTA: el código he terminado usando, basado en la respuesta a continuación es:
String platformString = resource.getURI().toPlatformString(true);
IFile myFile = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(platformString));
IProject proj = myFile.getProject();
IFile linkedFile = proj.getFile(value);
Eso hace la cadena del archivo actual, pero no me ayuda a obtener la ubicación del proyecto sin analizar esa cadena. Disculpas si la pregunta no era clara, la he actualizado. –
Lo siento, lo eché de menos ... Si tiene el IFile puede obtener el proyecto con IFile # getProject() –
Ah, genial, eso ya está hecho, debe haber renunciado a encontrarlo .. –