Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Generador de código para Netbeans

Generador de código para Netbeans

Autor jc mouse lunes, mayo 25, 2015

El IDE Netbeans al igual que Eclipse :), nos permite personalizar el espacio de trabajo y añadir funcionalidades que nos son de gran ayuda a la hora de programar, una de estas funcionalidades en el caso de Netbeans es la creación de plugins. Entre los muchos tipos de plugins que se pueden crear, tenemos uno que es el Generador de Código, el que programe en este IDE sabrá que el editor de código nos brinda ayuda a la hora de escribir código, cuando hacemos un clic derecho sobre el editor, tenemos una opción que se llama «Insert code…«, esta opción cuenta con una lista de código predefinido que podemos insertar a nuestros proyectos en cualquier momento.

code java

Lo que haremos en este tutorial, sera añadir nuestro propio código predefinido, la serie fibonacci.

Necesitamos

  • Netbeans 7.x o superior

Nivel: Avanzado

Tiempo: 30 minutos

 PROYECTO GENERADOR DE CÓDIGO

Paso 1. Crear el proyecto

Para crear un nuevo proyecto, File -> New Project -> Netbeans Modules ->module , Escribir en Project Name «FibonacciCodeGenerator» y presionar NEXT

fibonacci

A continuación en Basic Module Configuration, escribimos en Code Base  Name: «org.bolivia.fibonacci» y para terminar FINISH

code name

Paso 2. Code Generator

En esta parte creamos la clase que nos servirá para crear el Code Generator

Clic derecho sobre el proyecto, NEW -> OTHER… , seleccionar Module Development -> Code Generator y NEXT

code generator

En la sección Code Generator escribir:

Class Name: FibonacciCG

Package: org.bolivia.fibonacci

Mime Type: text/x-java

netbeans fibonacci

Para terminar presionar FINISH

Hasta este punto nuestro proyecto debe lucir de la siguiente forma:

proyecto java

La clase FibonacciCG que acabamos de crear tiene el siguiente código:

package org.bolivia.fibonacci;

import java.util.Collections;
import java.util.List;
import javax.swing.text.JTextComponent;
import org.netbeans.api.editor.mimelookup.MimeRegistration;
import org.netbeans.spi.editor.codegen.CodeGenerator;
import org.openide.util.Lookup;

public class FibonacciCG implements CodeGenerator {

    JTextComponent textComp;

    /**
 *
 * @param context containing JTextComponent and possibly other items
 * registered by {@link CodeGeneratorContextProvider}
 */
    private FibonacciCG(Lookup context) { // Good practice is not to save Lookup outside ctor
        textComp = context.lookup(JTextComponent.class);
    }

    @MimeRegistration(mimeType = "text/x-java", service = CodeGenerator.Factory.class)
    public static class Factory implements CodeGenerator.Factory {

        public List<? extends CodeGenerator> create(Lookup context) {
            return Collections.singletonList(new FibonacciCG(context));
        }
    }

    /**
 * The name which will be inserted inside Insert Code dialog
 */
    public String getDisplayName() {
        return "Sample Generator";
    }

    /**
 * This will be invoked when user chooses this Generator from Insert Code
 * dialog
 */
    public void invoke() {
    }
}

Paso 3. Librerías

Ademas de las librerías que se añadieron por defecto al crear el proyecto, debemos añadir las librerías «Javac API Wrapper» y «Java Source«, para esto, clic derecho sobre el proyecto -> PROPERTIES -> clic en LIBRARIES.  A continuación presionamos el botón ADD y seleccionamos dichas librerías, OK para terminar.

 Paso 4. Codificación

Abre la clase FibonacciCG y añade los siguientes import:

import com.sun.source.tree.AnnotationTree;
import com.sun.source.tree.ClassTree;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.tree.MethodTree;
import com.sun.source.tree.ModifiersTree;
import com.sun.source.tree.Tree;
import com.sun.source.tree.VariableTree;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import javax.lang.model.element.Modifier;
import javax.lang.model.type.TypeKind;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;
import org.netbeans.api.editor.mimelookup.MimeRegistration;
import org.netbeans.api.java.source.CancellableTask;
import org.netbeans.api.java.source.JavaSource;
import org.netbeans.api.java.source.ModificationResult;
import org.netbeans.api.java.source.TreeMaker;
import org.netbeans.api.java.source.WorkingCopy;
import org.netbeans.spi.editor.codegen.CodeGenerator;
import org.openide.util.Lookup;

Busca el método «getDisplayName» y en return escribe «Fibonacci«, este el nombre que aparecerá cuando se haga «Insert Code»

El método de la serie fibonacci cuenta con las siguientes partes:

generador de codigo

Cada una de estas partes se deben declarar en el Code Generator, a continuación vemos el código para ello. Busca el método Invoke() y añade el siguiente código:

    @Override
    public void invoke() {
         try {             
             Document doc = textComp.getDocument();
             JavaSource javaSource = JavaSource.forDocument(doc);

             //para la creacion de nueva instancia de WorkingCopy
             CancellableTask task = new CancellableTask<WorkingCopy>() { 

                 @Override
                 public void cancel() {/*...*/}

                 @Override
                 public void run(WorkingCopy workingCopy) throws Exception {

                     //(A) Contenido del metodo
                     String contenido = 
                            "if(numero<=1)" + 
                            "return \"El n\u00famero debe ser mayor a 1\";" +
                            "int num1 = 1;" +
                            "int num2 = 1;" +                
                            "String seriefb = num1 + \" \";" +        
                            "for(int i=2;i<=numero;i++){" +             
                            "seriefb += num2 + \" \";" +
                            "num2 = num1 + num2;" +
                            "num1 = num2 - num1;" +
                            "}" +        
                            "return seriefb;";

                     //copia de trabajo
                     workingCopy.toPhase(JavaSource.Phase.RESOLVED);                     
                     CompilationUnitTree cut = workingCopy.getCompilationUnit();                      
                     TreeMaker make = workingCopy.getTreeMaker();

                     for (Tree typeDecl : cut.getTypeDecls()) {
                          //Si el tipo es una clase
                          if (Tree.Kind.CLASS == typeDecl.getKind())
                          { 
                            ClassTree clazz = (ClassTree) typeDecl;

                            //(D) parametros de entrada de metodo
                            ModifiersTree parMods = make.Modifiers(Collections.<Modifier>emptySet(), Collections.<AnnotationTree>emptyList());
                            VariableTree variable_numero = make.Variable(parMods, "numero", make.PrimitiveType(TypeKind.INT), null);
                            List<VariableTree> parList = new ArrayList<VariableTree>(1);//solo tenemos un parametro
                            parList.add(variable_numero);

                            //(A) modifcadores y anotaciones
                            Set<Modifier> modifiers = EnumSet.of(Modifier.PUBLIC,Modifier.STATIC);//2 modificadores
                            List<AnnotationTree> annotations = new ArrayList<AnnotationTree>();//no tiene se deja vacio

                            //se crea el metodo 
                            MethodTree newMethod = make.Method(
                                make.Modifiers(modifiers, annotations),//los modificadores y anotaciones de este método
                                "fibonacci", // nombre de metodo (C)
                                make.Type("String"), //El tipo que regresara el metodo (B)
                                Collections.EMPTY_LIST,//la lista de parámetros de tipo genérico
                                parList, //lista de parametros (D)
                                Collections.EMPTY_LIST,//Lista de clausulas throws 
                                "{"+contenido+"}", //codigo del metodo (E)
                                null //utilizado por los tipos de anotación
                            );
                            // 
                            ClassTree copy = make.addClassMember(clazz, newMethod);                                                                                            
                            workingCopy.rewrite(clazz, copy);                            
                          }
                      }
                 }
             };
            // 
            ModificationResult result = javaSource.runModificationTask(task);
            result.commit();
         }
        catch (Exception ex) {
            System.err.println(ex.getMessage());
        }
    }

PROBANDO EL PROYECTO Y SU FUNCIONALIDAD

Ya que tenemos todo listo debemos testear que el modulo haga lo que se supone debe hacer :), clic derecho sobre el proyecto y RUN, esperamos un poquito, se tarda porque se crea una nueva instancia de Netbeans, veras que ahora tienes 2 Netbeans, una la principal donde creaste el proyecto y otra que se abrió cuando ejecutaste el proyecto, en este netbeans que estará vacío, crea un nuevo proyecto java.

Ahora cuando en el editor de código hagas un clic derecho -> INSERT CODE… veras que en el menú emergente, tienes la opción «Fibonacci«, si seleccionas esa opción se inserta el código del método fibonacci.

modulo java

Un video para dejar las cosas más claras

 DESCARGAS

Proyecto Generador de Código

Para poder usar o distribuir este código, debemos empaquetarlo primero, después instalarlo en el IDE, pero eso lo veremos en un posterior tutorial 🙂

Enjoy! 

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Código Único de Factura en PHP

Código Único de Factura en PHP

Código Único de Factura para el Nuevo Sistema de Facturación Electrónica en Bolivia desarrollado en el lenguaje PHP 7 (H...

Generar clases desde Esquemas XSD

Generar clases desde Esquemas XSD

XJC es una herramienta de linea de comandos del compilador de esquemas de JAXB que se puede utilizar para convertir un e...

Incrustar reporte en formulario java

Incrustar reporte en formulario java

Jasperreport nos brinda su propio visor de reportes, sin embargo en ocasiones queremos mostrar los informes directamente...

Tutoriales para creación de videojuegos gratis en descarga directa

Tutoriales para creación de videojuegos gratis en descarga directa

La comunidad 3D Buzz  era una de los lugares donde la gente curiosa de aprender a realizar videojuegos buscaba recursos...

Juego: Adivina el número

Juego: Adivina el número

Problema: Desarrollar un juego en consola con Kotlin que genere un numero aleatorio entre un rango preestablecido y perm...

Que es y como se crea una Imagen Forense

Que es y como se crea una Imagen Forense

¿Que es y para que sirve una imagen forense? Una imagen forense es un «clon» (copia bit a bit) de algún dispositivo como...

Comparte lo que sabes

Categorias

Últimas entradas

El gigante tecnologico Google a puesto un bonito Doodle en su buscador que esta fascinando a sus millones de usuarios qu...

WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es...

Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la...

TikTok es una plataforma de microvideos muy popular entre los jóvenes el cual cuenta ya con millones de videos cortps de...

Herramientas

Generador de Enlaces a Whatsapp