1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package Torello.JavaDoc;

/**
 * An enumeration used by the {@link StaticFunctional} annotation for explaining
 * non-{@code static} fields in a type.
 * 
 * <BR /><BR /><EMBED CLASS='external-html' DATA-FILE-ID=EXCUSE>
 */
public enum Excuse
{
    /**
     * Indicates that a field inside of a class that has been decorated with the
     * {@code StaticFunctional} annotation is being used as a "Configuration Flag" for that class.
     * 
     * <EMBED CLASS='external-html' DATA-FILE-ID=EXCUSE_FLAG>
     */
    FLAG,

    /**
     * Indicates the field isn't marked with the {@code 'final'} modifier because it is used as a
     * simple-configuration.
     * 
     * <EMBED CLASS='external-html' DATA-FILE-ID=EXCUSE_CONFIG>
     */
    CONFIGURATION,

    /**
     * Indicates that an excused, non-{@code final}, field contains a singleton instance of a
     * {@code class}, and could conceivably be changed or swapped after the class-loading phase.
     * 
     * <EMBED CLASS='external-html' DATA-FILE-ID=EXCUSE_SINGLE>
     */
    SINGLETON,

    /**
     * Indicates that a field is excused from the {@code 'final'} modifier because that field is
     * solely used for logging purposes.
     * 
     * <EMBED CLASS='external-html' DATA-FILE-ID=EXCUSE_LOGGING>
     */
    LOGGING,

    /**
     * Indicates that an excused field is not marked with the {@code 'final'} modifier because it
     * is intended to be used solely for debugging purposes (only!).
     * 
     * <EMBED CLASS='external-html' DATA-FILE-ID=EXCUSE_DEBUG>
     */
    DEBUGGING,

    /**
     * Indicates that a field inside of a class annotated by {@code StaticFunctional}, is
     * non-{@code final} because the field's value isn't actually loaded at class-initialization
     * time by the {@code ClassLoader}.
     * 
     * <EMBED CLASS='external-html' DATA-FILE-ID=EXCUSE_LAZY_LD>
     */
    LAZY_LOADING,

    /**
     * Since ensuring that the Garbage-Collector runs does not constitute program state, this excuse
     * is provided for any field that doesn't declare the {@code 'final'} modifier because it is
     * involved in calls to {@code System.gc()}.
     * 
     * <EMBED CLASS='external-html' DATA-FILE-ID=EXCUSE_GARBAGE>
     */
    GARBAGE_COLLECTION;
}