Efectuar la asistencia de código en el código Java

La API de las herramientas de desarrollo Java (JDT) permite que otros conectores efectúen la asistencia de código o la selección de código en algunos elementos Java. Los elementos que permiten esta manipulación deben implementar la interfaz ICodeAssist.  

Existen dos tipos de manipulación:

En el modelo Java existen dos elementos que implementan esta interfaz: IClassFile e ICompilationUnit. La conclusión de código y la selección de código tan solo responden con los resultados de un archivo de clase si este tiene fuente conectado. 

Conclusión de código

Realizar una conclusión de código

La única forma de realizar programáticamente la conclusión de código consiste en invocar ICodeAssist.codeComplete. Especificará el desplazamiento en la unidad de compilación después de la cual desea la conclusión del código. También debe suministrar una instancia de ICompletionRequestor para aceptar las posibles conclusiones.

Cada método de ICompletionRequestor acepta un tipo distinto de propuesta de conclusión de código. Cada método tiene como parámetros el texto descriptivo del elemento propuesto (su nombre, el tipo declarante, etcétera), su posición propuesta para la inserción en la unidad de compilación, y su relevancia.   

Un peticionario de conclusión puede aceptar muchos tipos distintos de conclusiones, incluida la inserción de los siguientes elementos:

El peticionario de conclusión también debe tener capacidad para aceptar errores de compilación.   

Si su conector no está destinado a toda clase de conclusión de código, puede utilizar un CompletionRequestorAdapter para que solo tenga que implementar los tipos de conclusiones que le interesen. El siguiente ejemplo muestra un adaptador que solo se utiliza para aceptar conclusiones de clases. 

   // Obtener la unidad de compilación
   ICompilationUnit unit = ...;
   
   // Obtener el desplazamiento
   int offset = ...;
   
   // Crear el peticionario
   ICompletionRequestor requestor = new CompletionRequestorAdapter() {
      public void acceptClass(
         char[] packageName,
         char[] className,
         char[] completionName,
         int modifiers,
         int completionStart,
         int completionEnd,
         int relevance) {
         System.out.println("proponer una clase llamada " + new String(className));
      }
   };
   
   // Calcular propuestas
   unit.codeComplete(offset, requestor);

Relevancia de las conclusiones

Dado que existen muchas conclusiones distintas, se emplea el concepto de relevancia a la hora de comparar una conclusión sugerida con las demás propuestas. La relevancia viene representada por un entero positivo. El significado del valor no es implícito, sino tan solo relativo al valor de las otras propuestas. La relevancia de una conclusión de código candidata puede verse afectada por el tipo que cabe esperar de la expresión, dado que está relacionado con los tipos existentes en el código que hay alrededor, tal como tipos de variables, tipos de conversión temporal, tipos de retorno, etcétera. La presencia de un prefijo o un sufijo esperado en una conclusión también afecta a su relevancia.

Opciones de conclusión de código

El conector del núcleo de JDT define opciones que controlan el comportamiento de la conclusión del código. Estas opciones se pueden cambiar mediante otros conectores.   

Existen opciones adicionales que le permiten especificar prefijos y sufijos para los nombres de campos, campos estáticos, variables locales y argumentos de métodos de la conclusión propuesta.   

En el tema Opciones de asistencia de código de núcleo de JDT hallará más información sobre las opciones de la asistencia de código y sus valores por omisión.

Selección de código

Realizar una selección de código

La selección de código permite localizar el elemento Java representado por un rango de texto (habitualmente, el texto seleccionado) en una unidad de compilación. Para realizar programáticamente una selección de código, debe invocar ICodeAssist.codeSelect. Debe suministrar la ubicación de índice inicial de la selección y su longitud. El resultado es una matriz de elementos Java. La mayor parte del tiempo, solo hay un elemento en la matriz, pero si la selección es ambigua, se devuelven todos los elementos posibles.

En el siguiente ejemplo, se invoca la selección de código para una unidad de compilación.

      // Obtener la unidad de compilación
   ICompilationUnit unit = ...;
   
   // Obtener el desplazamiento y la longitud
   int offset = ...;
   int length = ...;
   
   // realizar selección
   IJavaElement[] elements = unit.codeSelect(offset, length);
   System.out.println("el elemento seleccionado es " + element[0].getElementName());

Selección en la posición del cursor

Cuando se especifica una longitud de selección igual a cero (0), se calculará una selección localizando el símbolo de conclusión que encierra el desplazamiento especificado. Tome en consideración el siguiente método de ejemplo:

   public void fooMethod(Object) {
   }

Si especifica un desplazamiento después del primer carácter de fooMethod y especifica una longitud igual a cero, la selección se calculará para que incluya la totalidad del símbolo fooMethod. Por el contrario, si especifica una longitud igual a 5, se considerará que la selección es ooMet.

Copyright IBM Corporation y otras empresas 2000, 2003. Reservados todos los derechos.