java - reales - libro de android studio en español pdf
Complemento del editor de Eclipse: "ERROR" al abrir el archivo fuera del proyecto (3)
¿Intentó crear un archivo JAVA utilizando el editor, fuera del espacio de trabajo?
Cuando llame al editor con la ruta del archivo, concat "file: //" al comienzo de la ruta del archivo.eg: si la ruta es C: //temp//Sample.java, modifíquela como archivo: // C : //temp//Sample.java.
Estoy desarrollando un plugin editor para eclipse. Funciona bien en archivos dentro de proyectos eclipse, pero cuando se abre un archivo externo a través del menú "Archivo -> Abrir archivo" (que funciona con archivos, por ejemplo, Java), aparece una página que muestra nada más que una línea azul horizontal y el palabra "ERROR". El registro de errores de eclipse está vacío, al igual que el archivo de registro en el directorio .metadata.
Que podria causar esto? ¿Cómo puedo diagnosticar el error cuando no aparece ningún mensaje de error que me indique dónde buscar? No parece haber una forma de obtener un registro más detallado de eclipse.
Editar:
Descubrí que el origen del problema está cerca de lo que mencionaba jamesh, pero no de ClassCastException: simplemente no hay IDocument
instancia de IDocument
para que se muestre el visor de texto porque StorageDocumentProvider.createDocument()
devuelve null. La razón de esto es que solo sabe cómo crear documentos para instancias de org.eclipse.ui.IStorageEditorInput
, pero en este caso obtiene una instancia de org.eclipse.ui.ide.FileStoreEditorInput
, que no implementa esa interfaz, pero en su lugar implementa org.eclipse.ui.IURIEditorInput
Estoy un poco alejado del código fuente en este momento, aunque sospecho que el problema es una ClassCastException
:
- Para un archivo de espacio de trabajo,
IEditorInput
esorg.eclipse.ui.IFileEditorInput
. - Para un archivo local no relacionado con el área de trabajo,
IEditorInput
esorg.eclipse.ui.IStorageEditorInput
La diferencia está en cómo obtienes los contenidos de IEditorInput
. El JDT hace una instanceof
explícita de verificación para realizar el cambio.
No creo que getAdapter(Class clazz)
devuelva java.io.InputStream
si lo ofreces.
No entiendo muy bien por qué lo hacen así, pero se siente feo.
Editar: Un punto más general sobre la depuración de aplicaciones de eclipse: es realmente muy útil intentar ensamblar todos tus registros en un solo lugar (es decir, la consola).
Para hacer esto, asegúrese de usar las opciones de línea de comando -console
y -consoleLog
. Este último ha ayudado a ahorrar incontables horas de tiempo. Si aún no lo has hecho, aprende las cosas más básicas sobre cómo usar la consola ( ss
y start
son las más utilizadas). Esto ahorrará más tiempo diagnosticando una cierta clase de problema.
Tuve el mismo problema y finalmente encontré una solución que funcionaba para mí. Debe proporcionar 2 proveedores de documentos diferentes, primero ampliando FileDocumentProvider para archivos dentro de su entorno de trabajo, y luego extendiendo TextFileDocumentProvider para otros recursos fuera de su área de trabajo. Luego, registra el proveedor correcto de acuerdo con la entrada en el método doSetInput de tus editores de esta manera:
private IDocumentProvider createDocumentProvider(IEditorInput input) {
if(input instanceof IFileEditorInput){
return new XMLTextDocumentProvider();
} else if(input instanceof IStorageEditorInput){
return new XMLFileDocumentProvider();
} else {
return new XMLTextDocumentProvider();
}
}
@Override
protected final void doSetInput(IEditorInput input) throws CoreException {
setDocumentProvider(createDocumentProvider(input));
super.doSetInput(input);
}
luego en su nuevo proveedor de documentos (extendiendo TextFileDocumentProvider) inserte algo así:
protected FileInfo createFileInfo(Object element) throws CoreException {
FileInfo info = super.createFileInfo(element);
if(info==null){
info = createEmptyFileInfo();
}
IDocument document = info.fTextFileBuffer.getDocument();
if (document != null) {
/* register your partitioner and other things here
same way as in your fisrt document provider */
}
return info;
}
Esto funciona para mí :) Finalmente tengo que mencionar que no soy tan inteligente y que copié esta solución del proyecto Amateras (complemento de editor HTML de Opensource para eclipse)