GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Push — master ( e7bef7...3cccd4 )
by Šimon
03:07
created

QueryGenerator::__construct()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 17
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
dl 0
loc 17
rs 9.9666
c 0
b 0
f 0
cc 4
nc 3
nop 2
1
<?php
2
namespace GraphQL\Benchmarks\Utils;
3
4
use GraphQL\Language\AST\DocumentNode;
5
use GraphQL\Language\AST\FieldNode;
6
use GraphQL\Language\AST\NameNode;
7
use GraphQL\Language\AST\OperationDefinitionNode;
8
use GraphQL\Language\AST\SelectionSetNode;
9
use GraphQL\Language\Printer;
10
use GraphQL\Type\Definition\FieldDefinition;
11
use GraphQL\Type\Definition\InterfaceType;
12
use GraphQL\Type\Definition\ObjectType;
13
use GraphQL\Type\Definition\WrappingType;
14
use GraphQL\Type\Schema;
15
use GraphQL\Utils\Utils;
16
use function count;
17
use function max;
18
use function round;
19
20
class QueryGenerator
21
{
22
    private $schema;
23
24
    private $maxLeafFields;
25
26
    private $currentLeafFields;
27
28
    public function __construct(Schema $schema, $percentOfLeafFields)
29
    {
30
        $this->schema = $schema;
31
32
        Utils::invariant(0 < $percentOfLeafFields && $percentOfLeafFields <= 1);
33
34
        $totalFields = 0;
35
        foreach ($schema->getTypeMap() as $type) {
36
            if (! ($type instanceof ObjectType)) {
37
                continue;
38
            }
39
40
            $totalFields += count($type->getFields());
41
        }
42
43
        $this->maxLeafFields     = max(1, round($totalFields * $percentOfLeafFields));
44
        $this->currentLeafFields = 0;
45
    }
46
47
    public function buildQuery()
48
    {
49
        $qtype = $this->schema->getQueryType();
50
51
        $ast = new DocumentNode([
52
            'definitions' => [new OperationDefinitionNode([
53
                'name' => new NameNode(['value' => 'TestQuery']),
54
                'operation' => 'query',
55
                'selectionSet' => $this->buildSelectionSet($qtype->getFields()),
56
            ]),
57
            ],
58
        ]);
59
60
        return Printer::doPrint($ast);
61
    }
62
63
    /**
64
     * @param FieldDefinition[] $fields
65
     *
66
     * @return SelectionSetNode
67
     */
68
    public function buildSelectionSet($fields)
69
    {
70
        $selections[] = new FieldNode([
0 ignored issues
show
Comprehensibility Best Practice introduced by
$selections was never initialized. Although not strictly required by PHP, it is generally a good practice to add $selections = array(); before regardless.
Loading history...
71
            'name' => new NameNode(['value' => '__typename']),
72
        ]);
73
        $this->currentLeafFields++;
74
75
        foreach ($fields as $field) {
76
            if ($this->currentLeafFields >= $this->maxLeafFields) {
77
                break;
78
            }
79
80
            $type = $field->getType();
81
82
            if ($type instanceof WrappingType) {
83
                $type = $type->getWrappedType(true);
84
            }
85
86
            if ($type instanceof ObjectType || $type instanceof InterfaceType) {
87
                $selectionSet = $this->buildSelectionSet($type->getFields());
88
            } else {
89
                $selectionSet = null;
90
                $this->currentLeafFields++;
91
            }
92
93
            $selections[] = new FieldNode([
94
                'name' => new NameNode(['value' => $field->name]),
95
                'selectionSet' => $selectionSet,
96
            ]);
97
        }
98
99
        $selectionSet = new SelectionSetNode([
100
            'selections' => $selections,
101
        ]);
102
103
        return $selectionSet;
104
    }
105
}
106