Exemplo n.º 1
0
    def compile_method(self, method):
        signature = util.StringBuilder()

        for annotation in method.annotations:
            formatter.output_annotation(annotation, signature)

        formatter.output_modifiers(method.modifiers, signature)
        signature.append(' ')

        if method.type_parameters:
            formatter.output_type_params(method.type_parameters, signature)
            signature.append(' ')

        formatter.output_type(method.return_type, signature)
        signature.append(' ')

        signature.append(method.name)

        signature.append('(')
        formatter.output_list(formatter.output_formal_param, method.parameters,
                              signature, ', ')
        signature.append(')')

        if method.throws:
            signature.append(' throws ')
            formatter.output_list(formatter.output_exception, method.throws,
                                  signature, ', ')

        doc = self.__output_doc(method)

        directive = util.Directive('java:method', signature.build())
        directive.add_content(doc)

        return directive
Exemplo n.º 2
0
    def compile_method(self, method):
        signature = util.StringBuilder()

        for annotation in method.annotations:
            formatter.output_annotation(annotation, signature)

        formatter.output_modifiers(method.modifiers, signature)
        signature.append(' ')

        if method.type_parameters:
            formatter.output_type_params(method.type_parameters, signature)
            signature.append(' ')

        formatter.output_type(method.return_type, signature)
        signature.append(' ')

        signature.append(method.name)

        signature.append('(')
        formatter.output_list(formatter.output_formal_param, method.parameters, signature, ', ')
        signature.append(')')

        if method.throws:
            signature.append(' throws ')
            formatter.output_list(formatter.output_exception, method.throws, signature, ', ')

        doc = self.__output_doc(method)

        directive = util.Directive('java:method', signature.build())
        directive.add_content(doc)

        return directive
Exemplo n.º 3
0
    def handle_constructor_signature(self, sig, signode):
        try:
            member = javalang.parse.parse_constructor_signature(sig)
        except javalang.parser.JavaSyntaxError:
            raise self.error("syntax error in constructor signature")

        if not isinstance(member, javalang.tree.ConstructorDeclaration):
            raise self.error("expected constructor declaration")

        mods = formatter.output_modifiers(member.modifiers).build()
        signode += nodes.Text(mods + ' ', mods + ' ')

        signode += addnodes.desc_name(member.name, member.name)

        paramlist = addnodes.desc_parameterlist()
        for parameter in member.parameters:
            param = addnodes.desc_parameter('', '', noemph=True)
            param += self._build_type_node(parameter.type)

            if parameter.varargs:
                param += nodes.Text('...', '')

            param += nodes.emphasis(' ' + parameter.name, ' ' + parameter.name)
            paramlist += param
        signode += paramlist

        param_reprs = [
            formatter.output_type(param.type, with_generics=False).build()
            for param in member.parameters
        ]
        return '%s(%s)' % (member.name, ', '.join(param_reprs))
Exemplo n.º 4
0
    def handle_constructor_signature(self, sig, signode):
        try:
            member = javalang.parse.parse_constructor_signature(sig)
        except javalang.parser.JavaSyntaxError:
            raise self.error("syntax error in constructor signature")

        if not isinstance(member, javalang.tree.ConstructorDeclaration):
            raise self.error("expected constructor declaration")

        mods = formatter.output_modifiers(member.modifiers).build()
        signode += nodes.Text(mods + ' ', mods + ' ')

        signode += addnodes.desc_name(member.name, member.name)

        paramlist = addnodes.desc_parameterlist()
        for parameter in member.parameters:
            param = addnodes.desc_parameter('', '', noemph=True)
            param += self._build_type_node(parameter.type)

            if parameter.varargs:
                param += nodes.Text('...', '')

            param += nodes.emphasis(' ' + parameter.name, ' ' + parameter.name)
            paramlist += param
        signode += paramlist

        param_reprs = [formatter.output_type(param.type, with_generics=False).build() for param in member.parameters]
        return '%s(%s)' % (member.name, ', '.join(param_reprs))
Exemplo n.º 5
0
    def compile_field(self, field):
        signature = util.StringBuilder()

        for annotation in field.annotations:
            formatter.output_annotation(annotation, signature)

        formatter.output_modifiers(field.modifiers, signature)
        signature.append(' ')

        formatter.output_type(field.type, signature)
        signature.append(' ')
        signature.append(field.declarators[0].name)

        doc = self.__output_doc(field)

        directive = util.Directive('java:field', signature.build())
        directive.add_content(doc)

        return directive
Exemplo n.º 6
0
    def compile_field(self, field):
        signature = util.StringBuilder()

        for annotation in field.annotations:
            formatter.output_annotation(annotation, signature)

        formatter.output_modifiers(field.modifiers, signature)
        signature.append(' ')

        formatter.output_type(field.type, signature)
        signature.append(' ')
        signature.append(field.declarators[0].name)

        doc = self.__output_doc(field)

        directive = util.Directive('java:field', signature.build())
        directive.add_content(doc)

        return directive
Exemplo n.º 7
0
    def _build_type_node(self, typ):
        if isinstance(typ, javalang.tree.ReferenceType):
            if typ.dimensions:
                dim = '[]' * len(typ.dimensions)
            else:
                dim = ''

            target = typ.name
            parts = []

            while typ:
                ref_node = self._build_ref_node(target)
                ref_node += nodes.Text(typ.name, typ.name)
                parts.append(ref_node)

                if typ.arguments:
                    parts.append(nodes.Text('<', '<'))

                    first = True
                    for type_arg in typ.arguments:
                        if first:
                            first = False
                        else:
                            parts.append(nodes.Text(', ', ', '))

                        if type_arg.pattern_type == '?':
                            parts.append(nodes.Text('?', '?'))
                        else:
                            if type_arg.pattern_type:
                                s = '? %s ' % (type_arg.pattern_type, )
                                parts.append(nodes.Text(s, s))
                            parts.extend(self._build_type_node(type_arg.type))

                    parts.append(nodes.Text('>', '>'))

                typ = typ.sub_type

                if typ:
                    target = target + '.' + typ.name
                    parts.append(nodes.Text('.', '.'))
                elif dim:
                    parts.append(nodes.Text(dim, dim))

            return parts
        else:
            type_repr = formatter.output_type(typ).build()
            return [nodes.Text(type_repr, type_repr)]
Exemplo n.º 8
0
    def _build_type_node(self, typ):
        if isinstance(typ, javalang.tree.ReferenceType):
            if typ.dimensions:
                dim = '[]' * len(typ.dimensions)
            else:
                dim = ''

            target = typ.name
            parts = []

            while typ:
                ref_node = self._build_ref_node(target)
                ref_node += nodes.Text(typ.name, typ.name)
                parts.append(ref_node)

                if typ.arguments:
                    parts.append(nodes.Text('<', '<'))

                    first = True
                    for type_arg in typ.arguments:
                        if first:
                            first = False
                        else:
                            parts.append(nodes.Text(', ', ', '))

                        if type_arg.pattern_type == '?':
                            parts.append(nodes.Text('?', '?'))
                        else:
                            if type_arg.pattern_type:
                                s = '? %s ' % (type_arg.pattern_type,)
                                parts.append(nodes.Text(s, s))
                            parts.extend(self._build_type_node(type_arg.type))

                    parts.append(nodes.Text('>', '>'))

                typ = typ.sub_type

                if typ:
                    target = target + '.' + typ.name
                    parts.append(nodes.Text('.', '.'))
                elif dim:
                    parts.append(nodes.Text(dim, dim))

            return parts
        else:
            type_repr = formatter.output_type(typ).build()
            return [nodes.Text(type_repr, type_repr)]