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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | package Torello.JDUInternal.Annotations.TypeAnnotations.Mirror; import Torello.JDUInternal.Messager.Messager; import Torello.JDUInternal.Messager.MsgVerbose; import Torello.JDUInternal.Messager.Where.Where_Am_I; import Torello.JDUInternal.Messager.Where.JDUAnnotations; import Torello.Java.ReadOnly.ReadOnlyList; import Torello.Java.ReadOnly.ReadOnlyArrayList; import Torello.Java.StrCSV; import Torello.JDUInternal.Annotations.HELPER; import com.sun.source.tree.ExpressionTree; import com.sun.source.tree.AssignmentTree; import static com.sun.source.tree.Tree.Kind.ASSIGNMENT; import java.util.List; // @CSSLinks Annotation // // EXPORTS: // public String[] FileNames(); // // * Torello.JavaDoc.CSSLinks // This is the actual User-Annotation that is part of the Upgrader-API. A user may place the // @CSSLinks Annotation on a Type / CIET (Class, Interface, Enum, Annotation or // Rec) - And a CSS-File Link in the form of a <LINK REL=stylesheet TYPE=text/css HREF=...> // will be inserted for Class / Type / CIET that the user has annotated. // // * package Torello.JDUInternal.Features.USER_SUPPLIED_CSS_FILES // The classes in this package do the processing for inserting the '.css' Files which the user // has requested be placed into his Java-Doc '.html' Web-Page. These '.css' Files must be // located in the '../upgrade-files/stylesheets/' directory. These '.css' Files must either: // // 1) obey the standard naming convention and have the exact same file-name as the // Java-Class which has been annotated by the @CSSLinks Annotation // // 2) have a name equal to one of the names provided to the Annotation-Element "FileNames" // // * Torello.JDUInternal.Annotations.TypeAnnotations.Processor.CSSLinksProcessor // This is the Annotation-Processsor that is / can-be invoked by the 'javac' (Java-Compiler) at // Compile-Time. This Annotation-Processor does not do very much, but will check that the // names provided to the "FileNames" Annotation-Element are, indeed, valid Operating-System // File-Names - which exist and are accessible. // // * Torello.JDUInternal.Annotations.TypeAnnotations.Mirror.CSSLMirror // After the JDU Detects that a CIET / Type has had the @CSSLinks Annotation placed upon // it, this class extracts the relevant information out of the Annotation using the AST // Library in 'com.sun.source.tree' and all of it's helper classes. public class CSSLMirror { public final ReadOnlyList<String> fileNames; public CSSLMirror(List<? extends ExpressionTree> arguments) { ReadOnlyList<String> fileNames = ReadOnlyArrayList.emptyROAL(); if (arguments.size() == 0) { this.fileNames = fileNames; return; } for (ExpressionTree argument : arguments) { /* System.out.println( "argument: " + argument.toString() + '\n' + "argument.getKind(): " + argument.getKind().toString() + '\n' + "argument.getClass().getSimpleName(): " + argument.getClass().getSimpleName() ); */ // System.out.println(argument); if (argument.getKind() != ASSIGNMENT) Messager.assertFailOracleParser( "The ExpressionTree returned by the @StaticFunctional arguments list was not of " + "type ASSIGNMENT, but rather " + argument.getKind() + '\n' + "ExpressionTree.toString(): " + argument.toString() + '\n' + "All Annotation Expressions: " + StrCSV.toCSV(arguments, true, true, null), null, JDUAnnotations.CSSLMirror ); String elemName = ((AssignmentTree) argument).getVariable().toString(); ExpressionTree elemValue = ((AssignmentTree) argument).getExpression(); /* System.out.println( " elemName: " + elemName + '\n' + " elemValue.toString(): " + elemValue.toString() + '\n' + " elemValue.getKind(): " + elemValue.getKind().toString() + '\n' + " elemValue.getClass(): " + elemValue.getClass().getSimpleName() + '\n' ); */ if (elemName.equals("FileNames")) fileNames = HELPER.handleStringArray(elemValue, "FileNames", JDUAnnotations.CSSLMirror); else throw (Error) Messager.assertFailOracleParser( "There was an Expression Variable-Name that was not 'FileNames' but rather: " + elemName, null, JDUAnnotations.CSSLMirror ); } this.fileNames = fileNames; if (MsgVerbose.isVerbose()) MsgVerbose.println( "@CSSFiles Annotation-Processing Mirror Class:" + " fileNames: " + StrCSV.toCSV(this.fileNames, true, false, null) ); } } |