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.
Lo que haremos en este tutorial, sera añadir nuestro propio código predefinido, la serie fibonacci.
Necesitamos
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
A continuación en Basic Module Configuration, escribimos en Code Base Name: «org.bolivia.fibonacci» y para terminar FINISH
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
En la sección Code Generator escribir:
Class Name: FibonacciCG
Package: org.bolivia.fibonacci
Mime Type: text/x-java
Para terminar presionar FINISH
Hasta este punto nuestro proyecto debe lucir de la siguiente forma:
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:
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.
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!
Si bien se pueden encontrar en google estilos java (Look and Feel) listos para cambiar la apariencia de nuestras aplicac[...]
Autenticación en una pagina web es el proceso de confirmar que un usuario es quien dice ser, asi de simple. En el siguie[...]
TextToSpeech o TTS, es el sintetizador de voz para android, en los celulares inteligentes viene un motor TTS por defecto[...]
Este método, también conocido como método de interpolación lineal, es un método iterativo de resolución numérica de ecua[...]
En post anteriores vimos lo que son los parámetros IN y los parámetros OUT pero existe otro tipo de parámetro que es la[...]
En este post aprenderemos a usar los gráficos 2d que viene con JavaFX en nuestras aplicaciones java swing. Esto puede se[...]