Completed
Push — develop ( 488cb7...121593 )
by Jaap
16s
created

phpDocumentor/Descriptor/InterfaceDescriptor.php (1 issue)

assigning incompatible types to properties.

Bug Documentation Major

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
declare(strict_types=1);
3
4
/**
5
 * This file is part of phpDocumentor.
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 *
10
 * @author    Mike van Riel <[email protected]>
11
 * @copyright 2010-2018 Mike van Riel / Naenius (http://www.naenius.com)
12
 * @license   http://www.opensource.org/licenses/mit-license.php MIT
13
 * @link      http://phpdoc.org
14
 */
15
16
namespace phpDocumentor\Descriptor;
17
18
/**
19
 * Descriptor representing an Interface.
20
 */
21
class InterfaceDescriptor extends DescriptorAbstract implements Interfaces\InterfaceInterface
22
{
23
    /** @var Collection $extends */
24
    protected $parents;
25
26
    /** @var Collection $constants */
27
    protected $constants;
28
29
    /** @var Collection $methods */
30
    protected $methods;
31
32
    /**
33
     * Initializes the all properties representing a collection with a new Collection object.
34
     */
35 1
    public function __construct()
36
    {
37 1
        parent::__construct();
38
39 1
        $this->setParent(new Collection());
40 1
        $this->setConstants(new Collection());
41 1
        $this->setMethods(new Collection());
42 1
    }
43
44
    /**
45
     * {@inheritDoc}
46
     */
47 1
    public function setParent($parents)
48
    {
49 1
        $this->parents = $parents;
0 ignored issues
show
Documentation Bug introduced by
It seems like $parents of type object<phpDocumentor\Des...tor\DescriptorAbstract> is incompatible with the declared type object<phpDocumentor\Descriptor\Collection> of property $parents.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
50 1
    }
51
52
    /**
53
     * {@inheritDoc}
54
     */
55 1
    public function getParent()
56
    {
57 1
        return $this->parents;
58
    }
59
60
    /**
61
     * {@inheritDoc}
62
     */
63 1
    public function setConstants(Collection $constants)
64
    {
65 1
        $this->constants = $constants;
66 1
    }
67
68
    /**
69
     * {@inheritDoc}
70
     */
71 1
    public function getConstants()
72
    {
73 1
        return $this->constants;
74
    }
75
76
    /**
77
     * {@inheritDoc}
78
     */
79 2
    public function getInheritedConstants()
80
    {
81 2
        if (!$this->getParent() || !$this->getParent() instanceof Collection || $this->getParent()->count() === 0) {
82 2
            return new Collection();
83
        }
84
85 1
        $inheritedConstants = new Collection();
86
87
        /** @var self $parent */
88 1
        foreach ($this->getParent() as $parent) {
89 1
            if (!$parent instanceof Interfaces\InterfaceInterface) {
90
                continue;
91
            }
92
93 1
            $inheritedConstants = $inheritedConstants->merge($parent->getConstants());
94 1
            $inheritedConstants = $inheritedConstants->merge($parent->getInheritedConstants());
95
        }
96
97 1
        return $inheritedConstants;
98
    }
99
100
    /**
101
     * {@inheritDoc}
102
     */
103 1
    public function setMethods(Collection $methods)
104
    {
105 1
        $this->methods = $methods;
106 1
    }
107
108
    /**
109
     * {@inheritDoc}
110
     */
111 1
    public function getMethods()
112
    {
113 1
        return $this->methods;
114
    }
115
116
    /**
117
     * {@inheritDoc}
118
     */
119 2
    public function getInheritedMethods()
120
    {
121 2
        if (!$this->getParent() || !$this->getParent() instanceof Collection || $this->getParent()->count() === 0) {
122 2
            return new Collection();
123
        }
124
125 1
        $inheritedMethods = new Collection();
126
127
        /** @var self $parent */
128 1
        foreach ($this->getParent() as $parent) {
129 1
            if (!$parent instanceof Interfaces\InterfaceInterface) {
130
                continue;
131
            }
132
133 1
            $inheritedMethods = $inheritedMethods->merge($parent->getMethods());
134 1
            $inheritedMethods = $inheritedMethods->merge($parent->getInheritedMethods());
135
        }
136
137 1
        return $inheritedMethods;
138
    }
139
140
    public function setPackage($package)
141
    {
142
        parent::setPackage($package);
143
144
        foreach ($this->getConstants() as $constant) {
145
            $constant->setPackage($package);
146
        }
147
148
        foreach ($this->getMethods() as $method) {
149
            $method->setPackage($package);
150
        }
151
    }
152
153
    public function getInheritedElement()
154
    {
155
        return $this->getParent() && $this->getParent()->count() > 0
156
            ? $this->getParent()->getIterator()->current()
157
            : null;
158
    }
159
}
160