Anotaciones de protección
Defina sus preferencias en el código y aplíquelas mediante el servicio privado.
Declaraciones breves. Control preciso.#
Complexer ofrece tres anotaciones: @Protection, @PerformanceCritical y @Virtualize. Definen el tratamiento de partes concretas de la aplicación sin incluir el motor de transformación.
Estas directivas se conservan en los archivos de clase con retención CLASS. El cliente de escritorio o la integración Maven envía el artefacto compilado y la configuración a la API; el servicio interpreta las directivas y aplica la política. Una anotación es un metadato, no una solicitud de red ejecutada por su aplicación. La biblioteca distribuida no contiene los transformadores privados.
@Protection: elija la política#
@Protection se aplica a una clase o método. El valor predeterminado es ProtectionLevel.NORMAL. La clase define el perfil por defecto; la anotación de un método lo sustituye. Una clase marcada como NONE permanece excluida aunque un método solicite un perfil superior.
@Protection(value = ProtectionLevel.AGGRESSIVE,
disable = {ProtectionFamily.FLOW})
final class ReleasePolicy {
@Protection(ProtectionLevel.LIGHT)
String displayName() { return "Professional"; }
}- NONE: excluye la protección y permite las adaptaciones de compatibilidad.
- LIGHT: permite GENERAL, STRING, NUMBER, KEY, RENAME y COMPATIBILITY.
- NORMAL: permite todas las familias salvo VM.
- AGGRESSIVE: permite todas las familias, incluida VM. Esto no activa todas las transformaciones ni selecciona todos los métodos para virtualización.
Familias de protección#
Los arrays enable y disable ajustan el perfil mediante ProtectionFamily: GENERAL, STRING, NUMBER, KEY, FLOW, EXCEPTION, VM, INDIRECTION, SHAPE, RENAME y COMPATIBILITY. Una exclusión prevalece sobre una activación. La transformación correspondiente también debe estar habilitada en la configuración.
Los perfiles controlan la selección, no aumentos arbitrarios de rondas de cifrado o límites del archivo de clase. La intención de protección se mantiene separada de las restricciones de validez.
@PerformanceCritical: cuide las rutas críticas#
Se aplica a clases, métodos y constructores. STRICT, el modo predeterminado, permite transformaciones estáticas y excluye las clasificadas como trabajo adicional en ejecución. REDUCED permite trabajo ligero limitado. maxSites vale 1 por defecto y limita los puntos aritméticos ligeros por método en REDUCED; STRICT lo trata como cero.
La declaración de un método puede ajustar la política de su clase; las reglas de configuración pueden restringirla más. No activa transformaciones deshabilitadas ni garantiza tiempos idénticos: mida su carga real.
@PerformanceCritical
void onTick() { /* application logic */ }
@PerformanceCritical(value = PerformanceCritical.Mode.REDUCED, maxSites = 1)
int calculate(int value) { return value * 31; }@Virtualize: cambie la representación#
Este marcador no tiene parámetros. Sus destinos declarados son métodos y constructores; la etapa de virtualización comprueba cada cuerpo según el subconjunto JVM admitido. Está pensado para lógica sensible de ejecución menos frecuente. El código no compatible se rechaza por defecto. Activar la etapa no virtualiza todos los métodos.
Las políticas de virtualización y rendimiento deben ser coherentes con la configuración. Separe las rutas frecuentes de la lógica seleccionada para virtualización y valide el resultado antes de publicar.
@Protection(ProtectionLevel.AGGRESSIVE)
@Virtualize
boolean validatePolicy(int version) {
return version >= 21;
}