tutorial tipo plugin descompilar decompile como archivos archivo abrir java eclipse eclipse-plugin

java - tipo - install jad in eclipse



Eclipse: Accediendo a una plantilla de editor desde el código de complemento (2)

Digamos que tengo una plantilla de editor (que inserta algún fragmento arbitrario de código) definida en mis preferencias de editor.

Me gustaría acceder a esa plantilla programáticamente. ¿Cómo hago esto?

Sé que existen las clases TemplateStore, TemplatePreferencesPage y TemplatePersistentData, pero no he podido juntarlas para que funcionen.

¿Hay algún código de ejemplo que me permita acceder a mi plantilla de editor a través del código Java?


Puede ser que esta clase JavaPlugin (dentro del paquete org.eclipse.jdt.internal.ui de eclipse) pueda proporcionarte una primera pista para seguir.

/** * Returns the template store for the code generation templates. * * @return the template store for the code generation templates * @since 3.0 */ public TemplateStore getCodeTemplateStore() { if (fCodeTemplateStore == null) { IPreferenceStore store= getPreferenceStore(); boolean alreadyMigrated= store.getBoolean(CODE_TEMPLATES_MIGRATION_KEY); if (alreadyMigrated) fCodeTemplateStore= new ContributionTemplateStore(getCodeTemplateContextRegistry(), store, CODE_TEMPLATES_KEY); else { fCodeTemplateStore= new CompatibilityTemplateStore(getCodeTemplateContextRegistry(), store, CODE_TEMPLATES_KEY, getOldCodeTemplateStoreInstance()); store.setValue(CODE_TEMPLATES_MIGRATION_KEY, true); } try { fCodeTemplateStore.load(); } catch (IOException JavaDoc e) { log(e); } fCodeTemplateStore.startListeningForPreferenceChanges(); // compatibility / bug fixing code for duplicated templates // TODO remove for 3.0 CompatibilityTemplateStore.pruneDuplicates(fCodeTemplateStore, true); } return fCodeTemplateStore; }

A partir de ahí, puedes encontrar alguna clase que use esa función:

NewASInterfaceWizard parece necesitar acceder a esas plantillas de código:

private String resolveTemplate(String templateName) { Template template = ASEditorPlugin.getDefault().getCodeTemplateStore().findTemplate(templateName); if (template == null) { showErrorBox("Could not resolve template (" + templateName +")."); return ""; } // Create the template context TemplateContext templeteContext = new TemplateContext(new ASContextType()) { public TemplateBuffer evaluate(Template template) throws BadLocationException, TemplateException { TemplateTranslator translator = new TemplateTranslator(); TemplateBuffer buffer = translator.translate(template); getContextType().resolve(buffer, this); return buffer; } public boolean canEvaluate(Template template) { return true; } }; try { return templeteContext.evaluate(template).getString(); } catch (BadLocationException e) { logger.error("Couldnt evaluate template",e); } catch (TemplateException e) { logger.error("Couldnt evaluate template",e); } return ""; }

Usado así:

private static final String FILE_HEADER_TEMPLATE = "file_header"; // Header String header = resolveTemplate(FILE_HEADER_TEMPLATE); if (header.length() > 0) { content.append(header + "/n"); }


Bueno, así es como lo hice.

/** * Get the Template Store of the JDT UI. * * @return the JDT template store */ private TemplateStore getTemplateStore() { if (templateStore == null) { System.out.println("templateStore is null - Creating a new one"); final ContributionContextTypeRegistry registry = new ContributionContextTypeRegistry(JavaUI.ID_CU_EDITOR); final IPreferenceStore store = PreferenceConstants.getPreferenceStore(); templateStore = new ContributionTemplateStore(registry, store, TEMPLATES_KEY); try { templateStore.load(); } catch (IOException e) { WSConsole.e(e); } templateStore.startListeningForPreferenceChanges(); } return templateStore; }

El método anterior devuelve el TemplateStore. Utiliza la tienda para agregar, eliminar, buscar plantillas.

private void filterTemplates() { templateStore = getTemplateStore(); deleteTemplate(templateStore, "org.eclipse.jdt.ui.templates.sysout"); try { templateStore.save(); } catch (IOException e) { } } private void deleteTemplate(TemplateStore templateStore, String id) { TemplatePersistenceData templateData = templateStore.getTemplateData(id); if (templateData != null) { templateStore.delete(templateData); } }

Esta es la forma de realizar operaciones en la tienda de plantillas. Si desea encontrar el patrón, nombre, descripción de una Plantilla, puede obtenerlo obteniendo un objeto Plantilla de la Tienda de Plantillas. Si desea encontrar la identificación de una plantilla, puede obtenerla del objeto TemplatePersistantData.