Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | <?php |
||
56 | class FullTextSearchService { |
||
57 | |||
58 | |||
59 | /** @var BoardMapper */ |
||
60 | private $boardMapper; |
||
61 | |||
62 | /** @var StackMapper */ |
||
63 | private $stackMapper; |
||
64 | |||
65 | /** @var CardMapper */ |
||
66 | private $cardMapper; |
||
67 | |||
68 | /** @var IFullTextSearchManager */ |
||
69 | private $fullTextSearchManager; |
||
70 | |||
71 | |||
72 | /** |
||
73 | * FullTextSearchService constructor. |
||
74 | * |
||
75 | * @param BoardMapper $boardMapper |
||
76 | * @param StackMapper $stackMapper |
||
77 | * @param CardMapper $cardMapper |
||
78 | * @param IFullTextSearchManager $fullTextSearchManager |
||
79 | */ |
||
80 | public function __construct( |
||
90 | |||
91 | |||
92 | /** |
||
93 | * @param GenericEvent $e |
||
94 | */ |
||
95 | public function onCardCreated(GenericEvent $e) { |
||
106 | |||
107 | |||
108 | /** |
||
109 | * @param GenericEvent $e |
||
110 | */ |
||
111 | View Code Duplication | public function onCardUpdated(GenericEvent $e) { |
|
121 | |||
122 | |||
123 | /** |
||
124 | * @param GenericEvent $e |
||
125 | */ |
||
126 | View Code Duplication | public function onCardDeleted(GenericEvent $e) { |
|
136 | |||
137 | |||
138 | /** |
||
139 | * @param GenericEvent $e |
||
140 | */ |
||
141 | public function onBoardShares(GenericEvent $e) { |
||
157 | |||
158 | |||
159 | /** |
||
160 | * @param Card $card |
||
161 | * |
||
162 | * @return IIndexDocument |
||
163 | */ |
||
164 | public function generateIndexDocumentFromCard(Card $card): IIndexDocument { |
||
169 | |||
170 | |||
171 | /** |
||
172 | * @param IIndexDocument $document |
||
173 | * |
||
174 | * @throws DoesNotExistException |
||
175 | * @throws MultipleObjectsReturnedException |
||
176 | */ |
||
177 | public function fillIndexDocument(IIndexDocument $document) { |
||
178 | /** @var Card $card */ |
||
179 | $card = $this->cardMapper->find((int)$document->getId()); |
||
180 | |||
181 | $document->setTitle(($card->getTitle() === null) ? '' : $card->getTitle()); |
||
182 | $document->setContent(($card->getDescription() === null) ? '' : $card->getDescription()); |
||
183 | $document->setAccess($this->generateDocumentAccessFromCardId((int)$card->getId())); |
||
184 | } |
||
185 | |||
186 | |||
187 | /** |
||
188 | * @param int $cardId |
||
189 | * |
||
190 | * @return IDocumentAccess |
||
191 | * @throws DoesNotExistException |
||
192 | * @throws MultipleObjectsReturnedException |
||
193 | */ |
||
194 | public function generateDocumentAccessFromCardId(int $cardId): IDocumentAccess { |
||
199 | |||
200 | |||
201 | /** |
||
202 | * @param string $userId |
||
203 | * |
||
204 | * @return Card[] |
||
205 | */ |
||
206 | public function getCardsFromUser(string $userId): array { |
||
218 | |||
219 | |||
220 | /** |
||
221 | * @param int $boardId |
||
222 | * |
||
223 | * @return Card[] |
||
224 | */ |
||
225 | public function getCardsFromBoard(int $boardId): array { |
||
234 | |||
235 | |||
236 | /** |
||
237 | * @param int $cardId |
||
238 | * |
||
239 | * @return Board |
||
240 | * @throws DoesNotExistException |
||
241 | * @throws MultipleObjectsReturnedException |
||
242 | */ |
||
243 | public function getBoardFromCardId(int $cardId): Board { |
||
250 | |||
251 | |||
252 | /** |
||
253 | * @param int $stackId |
||
254 | * |
||
255 | * @return Card[] |
||
256 | */ |
||
257 | private function getCardsFromStack(int $stackId): array { |
||
260 | |||
261 | |||
262 | /** |
||
263 | * @param int $boardId |
||
264 | * |
||
265 | * @return Stack[] |
||
266 | */ |
||
267 | private function getStacksFromBoard(int $boardId): array { |
||
271 | |||
272 | |||
273 | /** |
||
274 | * @param string $userId |
||
275 | * |
||
276 | * @return Board[] |
||
277 | */ |
||
278 | private function getBoardsFromUser(string $userId): array { |
||
281 | |||
282 | |||
283 | } |
||
284 | |||
285 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.