Configuration
Annotations
Mark specific classes and methods for special treatment.
A few protections need you to mark your own code directly, rather than being controlled purely by project-wide settings. These markers live under the pbco package and have no effect on how your program runs — flowguard reads them and removes them from the output.
String protection overrides
Put one of these on a method or class to override the project-wide string protection level just for it:
| Annotation | Effect |
|---|---|
@pbco.strings.StringsStandard | Always decrypt on every use, regardless of the project setting. |
@pbco.strings.StringsCached | Always decrypt once and reuse, regardless of the project setting. |
@pbco.strings.StringsNative | Use native string protection if it's turned on; otherwise behaves like Standard. |
Class sealing
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface Encrypt {
boolean hidden() default false;
}Put @pbco.authengine.Encrypt on a class to have flowguard seal it — see Class sealing for the full setup. Set hidden = true only if nothing else in your code refers to that class by name.
Native protection
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Native {}Put @pbco.nativeh.Native on a method or class to have it compiled to native code — see Native protection for the rules it needs to follow.
Reserved names
Flowguard also generates its own internal marker, pbco.vm.Virtualize, as part of native protection. Don't write this one yourself — use @pbco.nativeh.Native instead, and flowguard handles the rest.