16 from inspect
import cleandoc
18 from java.nio.charset
import StandardCharsets
19 from java.util
import Locale
20 from javax.lang.model.element.Modifier
import PUBLIC
21 from javax.lang.model.util
import ElementFilter
22 from javax.lang.model.type
import TypeKind
23 from javax.tools
import DocumentationTool, ToolProvider
27 from .model
import LibraryDoc, KeywordDoc
33 qualified_name, type_element, fields, constructors, methods, elements \
36 doc=self.
_get_doc_get_doc(elements, type_element),
41 libdoc.inits = self.
_initializers_initializers(elements, constructors)
42 libdoc.keywords = self.
_keywords_keywords(elements, methods)
46 doc = elements.getDocComment(element)
47 return cleandoc(doc
or '').rstrip()
50 return self.
_get_attr_get_attr(fields,
'VERSION')
53 scope = self.
_get_attr_get_attr(fields,
'SCOPE', upper=
True)
54 return {
'TESTSUITE':
'test suite',
55 'GLOBAL':
'global'}.get(scope,
'test suite')
58 return self.
_get_attr_get_attr(fields,
'DOC_FORMAT', upper=
True)
61 name =
'ROBOT_LIBRARY_' + name
63 if field.getSimpleName().toString() == name:
64 value = field.getConstantValue()
66 value =
normalize(value, ignore=
'_').upper()
71 inits = [self.
_keyword_doc_keyword_doc(elements, constructor)
72 for constructor
in constructors]
73 if len(inits) == 1
and not inits[0].args:
78 return [self.
_keyword_doc_keyword_doc(elements, method)
for method
in methods]
91 params = method.getParameters()
94 names = [param.getSimpleName().toString()
for param
in params]
96 names[-1] =
'*' + names[-1]
98 names[-1] =
'**' + names[-1]
99 if len(params) > 1
and self.
_is_varargs_is_varargs(params[-2]):
100 names[-2] =
'*' + names[-2]
104 param_type = param.asType()
105 return (param_type.toString().startswith(
'java.util.List')
or
106 (param_type.getKind() == TypeKind.ARRAY
and
107 param_type.getComponentType().getKind() != TypeKind.ARRAY))
110 return param.asType().toString().startswith(
'java.util.Map')
113 doc_tool = ToolProvider.getSystemDocumentationTool()
114 file_manager = DocumentationTool.getStandardFileManager(
115 doc_tool,
None, Locale.US, StandardCharsets.UTF_8)
116 compiler = ToolProvider.getSystemJavaCompiler()
117 source = file_manager.getJavaFileObjectsFromStrings([path])
118 task = compiler.getTask(
None,
None,
None,
None,
None, source)
119 type_element = task.analyze().iterator().next()
120 elements = task.getElements()
121 members = elements.getAllMembers(type_element)
122 qf_name = type_element.getQualifiedName().toString()
123 fields = [f
for f
in ElementFilter.fieldsIn(members)
124 if PUBLIC
in f.getModifiers()]
125 constructors = [c
for c
in ElementFilter.constructorsIn(members)
126 if PUBLIC
in c.getModifiers()]
127 methods = [m
for m
in ElementFilter.methodsIn(members)
128 if m.getEnclosingElement()
is type_element
and
129 PUBLIC
in m.getModifiers()]
130 return qf_name, type_element, fields, constructors, methods, elements
def _get_documentation_data(self, path)
def _keyword_doc(self, elements, method)
def _is_varargs(self, param)
def _get_attr(self, fields, name, upper=False)
def _get_scope(self, fields)
def _is_kwargs(self, param)
def _get_keyword_arguments(self, method)
def _keywords(self, elements, methods)
def _get_doc_format(self, fields)
def _get_doc(self, elements, element)
def _initializers(self, elements, constructors)
def _get_version(self, fields)
def printable_name(string, code_style=False)
Generates and returns printable name from the given string.
def normalize(string, ignore=(), caseless=True, spaceless=True)
Normalizes given string according to given spec.
def split_tags_from_doc(doc)