-
Notifications
You must be signed in to change notification settings - Fork 294
Expand file tree
/
Copy pathFunctionReferenceReader.cfc
More file actions
134 lines (114 loc) · 4.14 KB
/
FunctionReferenceReader.cfc
File metadata and controls
134 lines (114 loc) · 4.14 KB
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
122
123
124
125
126
127
128
129
130
131
132
133
134
component accessors=true {
property name="functions" type="struct";
public any function init() {
_loadExtensionInfo();
_loadFunctions();
return this;
}
public array function listFunctions() {
return getFunctions().keyArray();
}
public struct function getFunction( required string functionName ) {
var functions = getFunctions();
return functions[ arguments.functionName ] ?: {};
}
// private helpers
public void function _loadFunctions() {
var functionNames = getFunctionList().keyArray().sort( "textnocase" );
var functions = {};
for( var functionName in functionNames ) {
var convertedFunc = _getFunctionDefinition( functionName );
if ( convertedFunc.status neq "hidden" )
functions[ functionName ] = convertedFunc;
}
setFunctions( functions );
}
private struct function _getFunctionDefinition( required string functionName ) {
var coreDefinition = getFunctionData( arguments.functionName );
var parsedFunction = StructNew( "linked" );
if ( len ( coreDefinition.nameWithCase ?: "" ) )
parsedFunction.name = coreDefinition.nameWithCase;
else
parsedFunction.name = coreDefinition.name ?: "";
parsedFunction.memberName = coreDefinition.member.name ?: "";
parsedFunction.description = coreDefinition.description ?: "";
parsedFunction.status = coreDefinition.status ?: "";
parsedFunction.deprecated = parsedFunction.status == "deprecated";
parsedFunction.class = coreDefinition.class ?: "";
parsedFunction.returnType = coreDefinition.returntype ?: "";
parsedFunction.argumentType = coreDefinition.argumentType ?: "";
parsedFunction.keywords = coreDefinition.keywords ?: [];
parsedFunction.introduced = coreDefinition.introduced ?: "";
parsedFunction.alias = coreDefinition.alias ?: "";
parsedFunction.arguments = [];
if ( structKeyExists( variables.extensionMap, coreDefinition.name ) )
parsedFunction.srcExtension = variables.extensionMap[ coreDefinition.name ];
var args = coreDefinition.arguments ?: [];
for( var arg in args ) {
var convertedArg = StructNew( "linked" );
if ( len ( arg.nameWithCase ?: "" ) )
convertedArg.name = arg.nameWithCase;
else
convertedArg.name = arg.name ?: "";
convertedArg.description = arg.description ?: "";
convertedArg.type = arg.type ?: "";
convertedArg.required = IsBoolean( arg.required ?: "" ) && arg.required;
convertedArg.default = arg.defaultValue ?: NullValue();
convertedArg.alias = arg.alias ?: "";
convertedArg.status = arg.status ?: NullValue();
convertedArg.introduced = arg.introduced ?: NullValue();
if ( arg.status neq "hidden" )
parsedFunction.arguments.append( convertedArg );
}
return parsedFunction;
}
private void function _loadExtensionInfo(){
// load java tags
variables.extensionMap = {};
var cfg = getPageContext().getConfig();
var flds = cfg.getFLDs();
var ff = flds.getFunctions();
for (var fname in ff){
var bi = bundleInfo( ff[fname].getBIF() );
if ( bi.name != "lucee.core" ) {
var e = getExtensionOfBundle( bi.name );
variables.extensionMap[ fname ] = {
name: e.getName(),
id: e._getId(),
version: e._getVersion()
}
}
}
// load cfml tags
var extensions = extensionList();
loop query="extensions" {
local.e = queryRowData ( extensions, extensions.currentrow, "struct" );
if (len(e.functions) ){
for ( fname in e.functions ){
variables.extensionMap[ listFirst(fname,".") ] = {
name: e.name,
id: e.id,
version: e.version
}
}
}
}
}
private any function getExtensionOfBundle( bundleName ) {
var cfg = getPageContext().getConfig();
var extensions = cfg.getAllRHExtensions();
var luceeMajor = listFirst( server.lucee.version, "." );
var bundles = "";
loop collection=extensions.iterator() item="local.ext" {
if (luceeMajor gte 7)
bundles = ext.getMetadata().getBundles();
else {
bundles = ext.bundles;
}
loop array=bundles item="local.bundle" {
if ( bundle.getSymbolicName() == bundleName ) return ext.getMetadata();
}
}
throw "could not find extension for bundle [#bundleName#]";
}
}