2011-08-30 14 views
8

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); 

Respuesta

8

Usted podría utilizar org.eclipse.emf.common.util.URI.toPlatformString(boolean) y después ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(platformString));

algo así como

String platformString = resource.getURI().toPlatformString(true); 
IFile myFile = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(platformString)); 
+0

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. –

+1

Lo siento, lo eché de menos ... Si tiene el IFile puede obtener el proyecto con IFile # getProject() –

+0

Ah, genial, eso ya está hecho, debe haber renunciado a encontrarlo .. –

Cuestiones relacionadas