Documentation

Documentation/Protection

Annotations de protection

Définissez vos intentions dans le code. Appliquez-les via le service privé.

Des déclarations simples, un contrôle précis.#

Complexer propose trois annotations : @Protection, @PerformanceCritical et @Virtualize. Elles définissent le traitement de certaines parties de votre application, sans y intégrer le moteur de transformation.

Ces directives sont conservées dans les fichiers de classe. Le client de bureau ou l’intégration Maven transmet l’artefact compilé et sa configuration à l’API ; le service lit les directives et applique la politique choisie. Une annotation est une métadonnée, pas une requête réseau exécutée par votre application. La bibliothèque distribuée ne contient pas les transformateurs privés.

@Protection: choisissez la politique#

@Protection s’applique à une classe ou une méthode. Sa valeur par défaut est ProtectionLevel.NORMAL. La classe fournit le profil par défaut ; une annotation de méthode le remplace. Une classe marquée NONE reste exclue, même si une méthode demande un profil plus fort.

Java
@Protection(value = ProtectionLevel.AGGRESSIVE,
    disable = {ProtectionFamily.FLOW})
final class ReleasePolicy {
    @Protection(ProtectionLevel.LIGHT)
    String displayName() { return "Professional"; }
}
  • NONE: exclut la protection tout en permettant les adaptations de compatibilité.
  • LIGHT: autorise GENERAL, STRING, NUMBER, KEY, RENAME et COMPATIBILITY.
  • NORMAL: autorise toutes les familles sauf VM.
  • AGGRESSIVE: autorise toutes les familles, y compris VM. Cette éligibilité n’active pas toutes les transformations et ne sélectionne pas toutes les méthodes pour la virtualisation.

Familles de protection#

Les tableaux enable et disable affinent le profil avec ProtectionFamily : GENERAL, STRING, NUMBER, KEY, FLOW, EXCEPTION, VM, INDIRECTION, SHAPE, RENAME et COMPATIBILITY. Une exclusion prévaut sur une activation. La configuration du pipeline doit également activer la transformation concernée.

Les profils contrôlent la sélection, sans augmenter arbitrairement les tours de chiffrement ou les limites des fichiers de classe. L’intention de protection reste distincte des contraintes de validité.

@PerformanceCritical: préservez les chemins critiques#

Elle s’applique aux classes, méthodes et constructeurs. STRICT, le mode par défaut, conserve l’éligibilité des transformations statiques et exclut celles classées comme ajoutant du travail à l’exécution. REDUCED permet un travail léger limité. maxSites vaut 1 par défaut et limite les sites arithmétiques légers par méthode en mode REDUCED ; STRICT le traite comme zéro.

Une déclaration sur une méthode peut préciser la politique de sa classe. Les règles de configuration peuvent la restreindre davantage. Cette annotation n’active pas les transformations désactivées et ne garantit pas des durées identiques : mesurez votre charge réelle.

Java
@PerformanceCritical
void onTick() { /* application logic */ }

@PerformanceCritical(value = PerformanceCritical.Mode.REDUCED, maxSites = 1)
int calculate(int value) { return value * 31; }

@Virtualize: changez la représentation#

Ce marqueur n’a pas de paramètre. Il cible les méthodes et constructeurs ; l’étape de virtualisation vérifie toujours chaque corps selon le sous-ensemble JVM pris en charge. Il vise la logique sensible exécutée moins fréquemment. Le code non pris en charge est rejeté par défaut. Activer cette étape ne virtualise pas toutes les méthodes.

Les politiques de virtualisation et de performance doivent être cohérentes avec le pipeline configuré. Séparez les chemins fréquents de la logique volontairement virtualisée et validez le résultat avant publication.

Java
@Protection(ProtectionLevel.AGGRESSIVE)
@Virtualize
boolean validatePolicy(int version) {
    return version >= 21;
}
Contacter l’équipe