Restricciones de acceso
El tiempo de ejecución de Eclipse 3.1 ofrece al desarrollador de conectores la opción de controlar por paquete la visibilidad del código de conector para los conectores en sentido descendente.
Un paquete puede clasificarse como uno de los siguientes:
PDE convierte estas reglas de visibilidad del tiempo de ejecución en reglas de restricción de acceso al compilador en tiempo de compilación. Como resultado, la violación de una regla de visibilidad queda marcada por el compilador como un aviso o un error, dependiendo de la gravedad de dicha violación.
Con la disponibilidad de este soporte en tiempo de compilación, los errores de carga de clases en tiempo de ejecución ya no toman al usuario por sorpresa, y siempre se es consciente al hacer referencia a tipos internos.
Paquetes accesibles
Los paquetes accesibles son visibles para los conectores en sentido descendente incondicionalmente. Mientras que los paquetes API debe entrar en esta categoría, depende por completo del desarrollador decidir qué otros paquetes exportados por el conector deberían obtener este nivel de visibilidad.
Para declarar un paquete como accesible, debe listarlo en la sección Paquetes exportados del Tiempo de ejecución del editor de manifiestos de conectores y dejar el valor por omisión de visibilidad tal como está.
Paquetes prohibidos
Puede ocultar un paquete de los conectores en sentido descendente en todo momento excluyéndolo de la listas en la sección Paquetes exportados en la página Tiempo de ejecución del editor de manifiestos de conectores.
Las referencias a tipos desde un paquete prohibido dan como resultado errores de carga de clases en tiempo de ejecución.
Para evitar estas situaciones desagradables:
Notas:
Se recomienda encarecidamente que la gravedad de una referencia prohibida se mantenga en ERROR.
Paquetes internos
Los paquetes internos son paquetes que no están pensados para que los utilicen los conectores en sentido descendente. Estos paquetes son visibles para los conectores en sentido descendente por omisión.
Los paquetes internos están ocultos a los conectores en sentido descendente solamente cuando se lanza Eclipse en modalidad estricta (es decir, al lanzarlo con el argumento VM -Dosgi.resolverMode=strict).
Los paquetes internos deben listarse en la sección Paquetes exportados de la página Tiempo de ejecución del editor de manifiestos de conectores con la opción oculto seleccionada.
Se toman dos medidas para disuadir a los conectores en sentido descendente de hacer referencia a paquetes internos:
El nivel de gravedad para referencias disuadidas puede establecerse en la página de preferencias Java > Compilador > Errores/Avisos > API obsoleta y restringida.
Paquetes internos con amigos
Es importante que un conector pueda otorgar acceso completo a sus paquetes internos a conectores "amigos" designados. Por ejemplo, el código PDE se divide entre múltiples conectores, y el conector org.eclipse.pde.ui deberá tener acceso completo a los paquetes internos de org.eclipse.pde.core.
En el ejemplo siguiente, los amigos (los conectores org.eclipse.pde y org.eclipse.pde.ui) tienen acceso completo al paquete org.eclipse.pde.internal.core.bundle desde el conector org.eclipse.pde.core.
Los amigos son libres de hacer referencia a cualquier tipo del paquete org.eclipse.pde.internal.core.bundle con permiso del compilador.
Si, por otro lado, cualquier otro conector hace referencia a un tipo del paquete org.eclipse.pde.internal.core.bundle, el compilador marca la referencia como una referencia disuadida, tal como se describe en la sección anterior.
Cómo habilitar restricciones de acceso
Para beneficiarse del soporte de restricción de acceso de PDE, el único requisito es que los conectores en cuestión contengan un paquete compuesto OSGi manifest.mf. El PDE, que gestiona la vía de acceso de clases de conectores, se encarga del resto.
Si el conector no contiene un archivo manifest.mf, puede crearse ese archivo como se indica a continuación:
Inspección de las reglas de acceso
Puede inspeccionar las reglas de restricción de acceso impuestas en cada entrada de la vía de acceso de clases por PDE en la página de propiedades Vía de construcción Java del proyecto de conector.