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:
Complex classes like __TwigTemplate_9ed5ad35b12f734b4f1460a4c46f927a638cca26e2b3cac7b371d06ed8e6913e often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use __TwigTemplate_9ed5ad35b12f734b4f1460a4c46f927a638cca26e2b3cac7b371d06ed8e6913e, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
4 | class __TwigTemplate_9ed5ad35b12f734b4f1460a4c46f927a638cca26e2b3cac7b371d06ed8e6913e extends Twig_Template |
||
5 | { |
||
6 | public function __construct(Twig_Environment $env) |
||
7 | { |
||
8 | parent::__construct($env); |
||
9 | |||
10 | // line 1 |
||
11 | $this->parent = $this->loadTemplate("layout/layout.twig", "namespace.twig", 1); |
||
12 | $this->blocks = array( |
||
13 | 'title' => array($this, 'block_title'), |
||
14 | 'body_class' => array($this, 'block_body_class'), |
||
15 | 'page_id' => array($this, 'block_page_id'), |
||
16 | 'below_menu' => array($this, 'block_below_menu'), |
||
17 | 'page_content' => array($this, 'block_page_content'), |
||
18 | ); |
||
19 | } |
||
20 | |||
21 | protected function doGetParent(array $context) |
||
22 | { |
||
23 | return "layout/layout.twig"; |
||
24 | } |
||
25 | |||
26 | protected function doDisplay(array $context, array $blocks = array()) |
||
27 | { |
||
28 | // line 2 |
||
29 | $context["__internal_084c0a9b4751f3912921b1f087047d19c4c1f20b347dd6cee5246a93c0cb9eed"] = $this->loadTemplate("macros.twig", "namespace.twig", 2); |
||
30 | // line 1 |
||
31 | $this->parent->display($context, array_merge($this->blocks, $blocks)); |
||
32 | } |
||
33 | |||
34 | // line 3 |
||
35 | public function block_title($context, array $blocks = array()) |
||
36 | { |
||
37 | echo (isset($context["namespace"]) || array_key_exists("namespace", $context) ? $context["namespace"] : (function () { throw new Twig_Error_Runtime('Variable "namespace" does not exist.', 3, $this->getSourceContext()); })()); |
||
38 | echo " | "; |
||
39 | $this->displayParentBlock("title", $context, $blocks); |
||
40 | } |
||
41 | |||
42 | // line 4 |
||
43 | public function block_body_class($context, array $blocks = array()) |
||
44 | { |
||
45 | echo "namespace"; |
||
46 | } |
||
47 | |||
48 | // line 5 |
||
49 | public function block_page_id($context, array $blocks = array()) |
||
50 | { |
||
51 | echo twig_escape_filter($this->env, ("namespace:" . twig_replace_filter((isset($context["namespace"]) || array_key_exists("namespace", $context) ? $context["namespace"] : (function () { throw new Twig_Error_Runtime('Variable "namespace" does not exist.', 5, $this->getSourceContext()); })()), array("\\" => "_"))), "html", null, true); |
||
52 | } |
||
53 | |||
54 | // line 7 |
||
55 | public function block_below_menu($context, array $blocks = array()) |
||
56 | { |
||
57 | // line 8 |
||
58 | echo " <div class=\"namespace-breadcrumbs\"> |
||
59 | <ol class=\"breadcrumb\"> |
||
60 | <li><span class=\"label label-default\">Namespace</span></li> |
||
61 | "; |
||
62 | // line 11 |
||
63 | echo $context["__internal_084c0a9b4751f3912921b1f087047d19c4c1f20b347dd6cee5246a93c0cb9eed"]->macro_breadcrumbs((isset($context["namespace"]) || array_key_exists("namespace", $context) ? $context["namespace"] : (function () { throw new Twig_Error_Runtime('Variable "namespace" does not exist.', 11, $this->getSourceContext()); })())); |
||
64 | echo " |
||
65 | </ol> |
||
66 | </div> |
||
67 | "; |
||
68 | } |
||
69 | |||
70 | // line 16 |
||
71 | public function block_page_content($context, array $blocks = array()) |
||
72 | { |
||
73 | // line 17 |
||
74 | echo " |
||
75 | <div class=\"page-header\"> |
||
76 | <h1>"; |
||
77 | // line 19 |
||
78 | echo (isset($context["namespace"]) || array_key_exists("namespace", $context) ? $context["namespace"] : (function () { throw new Twig_Error_Runtime('Variable "namespace" does not exist.', 19, $this->getSourceContext()); })()); |
||
79 | echo "</h1> |
||
80 | </div> |
||
81 | |||
82 | "; |
||
83 | // line 22 |
||
84 | if ((isset($context["subnamespaces"]) || array_key_exists("subnamespaces", $context) ? $context["subnamespaces"] : (function () { throw new Twig_Error_Runtime('Variable "subnamespaces" does not exist.', 22, $this->getSourceContext()); })())) { |
||
85 | // line 23 |
||
86 | echo " <h2>Namespaces</h2> |
||
87 | <div class=\"namespace-list\"> |
||
88 | "; |
||
89 | // line 25 |
||
90 | $context['_parent'] = $context; |
||
91 | $context['_seq'] = twig_ensure_traversable((isset($context["subnamespaces"]) || array_key_exists("subnamespaces", $context) ? $context["subnamespaces"] : (function () { throw new Twig_Error_Runtime('Variable "subnamespaces" does not exist.', 25, $this->getSourceContext()); })())); |
||
92 | foreach ($context['_seq'] as $context["_key"] => $context["ns"]) { |
||
93 | echo $context["__internal_084c0a9b4751f3912921b1f087047d19c4c1f20b347dd6cee5246a93c0cb9eed"]->macro_namespace_link($context["ns"]); |
||
94 | } |
||
95 | $_parent = $context['_parent']; |
||
96 | unset($context['_seq'], $context['_iterated'], $context['_key'], $context['ns'], $context['_parent'], $context['loop']); |
||
97 | $context = array_intersect_key($context, $_parent) + $_parent; |
||
98 | // line 26 |
||
99 | echo " </div> |
||
100 | "; |
||
101 | } |
||
102 | // line 28 |
||
103 | echo " |
||
104 | "; |
||
105 | // line 29 |
||
106 | if ((isset($context["classes"]) || array_key_exists("classes", $context) ? $context["classes"] : (function () { throw new Twig_Error_Runtime('Variable "classes" does not exist.', 29, $this->getSourceContext()); })())) { |
||
107 | // line 30 |
||
108 | echo " <h2>Classes</h2> |
||
109 | "; |
||
110 | // line 31 |
||
111 | echo $context["__internal_084c0a9b4751f3912921b1f087047d19c4c1f20b347dd6cee5246a93c0cb9eed"]->macro_render_classes((isset($context["classes"]) || array_key_exists("classes", $context) ? $context["classes"] : (function () { throw new Twig_Error_Runtime('Variable "classes" does not exist.', 31, $this->getSourceContext()); })())); |
||
112 | echo " |
||
113 | "; |
||
114 | } |
||
115 | // line 33 |
||
116 | echo " |
||
117 | "; |
||
118 | // line 34 |
||
119 | if ((isset($context["interfaces"]) || array_key_exists("interfaces", $context) ? $context["interfaces"] : (function () { throw new Twig_Error_Runtime('Variable "interfaces" does not exist.', 34, $this->getSourceContext()); })())) { |
||
120 | // line 35 |
||
121 | echo " <h2>Interfaces</h2> |
||
122 | "; |
||
123 | // line 36 |
||
124 | echo $context["__internal_084c0a9b4751f3912921b1f087047d19c4c1f20b347dd6cee5246a93c0cb9eed"]->macro_render_classes((isset($context["interfaces"]) || array_key_exists("interfaces", $context) ? $context["interfaces"] : (function () { throw new Twig_Error_Runtime('Variable "interfaces" does not exist.', 36, $this->getSourceContext()); })())); |
||
125 | echo " |
||
126 | "; |
||
127 | } |
||
128 | // line 38 |
||
129 | echo " |
||
130 | "; |
||
131 | // line 39 |
||
132 | if ((isset($context["exceptions"]) || array_key_exists("exceptions", $context) ? $context["exceptions"] : (function () { throw new Twig_Error_Runtime('Variable "exceptions" does not exist.', 39, $this->getSourceContext()); })())) { |
||
133 | // line 40 |
||
134 | echo " <h2>Exceptions</h2> |
||
135 | "; |
||
136 | // line 41 |
||
137 | echo $context["__internal_084c0a9b4751f3912921b1f087047d19c4c1f20b347dd6cee5246a93c0cb9eed"]->macro_render_classes((isset($context["exceptions"]) || array_key_exists("exceptions", $context) ? $context["exceptions"] : (function () { throw new Twig_Error_Runtime('Variable "exceptions" does not exist.', 41, $this->getSourceContext()); })())); |
||
138 | echo " |
||
139 | "; |
||
140 | } |
||
141 | // line 43 |
||
142 | echo " |
||
143 | "; |
||
144 | } |
||
145 | |||
146 | public function getTemplateName() |
||
147 | { |
||
148 | return "namespace.twig"; |
||
149 | } |
||
150 | |||
151 | public function isTraitable() |
||
152 | { |
||
153 | return false; |
||
154 | } |
||
155 | |||
156 | public function getDebugInfo() |
||
157 | { |
||
158 | return array ( 142 => 43, 137 => 41, 134 => 40, 132 => 39, 129 => 38, 124 => 36, 121 => 35, 119 => 34, 116 => 33, 111 => 31, 108 => 30, 106 => 29, 103 => 28, 99 => 26, 90 => 25, 86 => 23, 84 => 22, 78 => 19, 74 => 17, 71 => 16, 63 => 11, 58 => 8, 55 => 7, 49 => 5, 43 => 4, 35 => 3, 31 => 1, 29 => 2, 11 => 1,); |
||
159 | } |
||
160 | |||
161 | public function getSourceContext() |
||
162 | { |
||
163 | return new Twig_Source("{% extends \"layout/layout.twig\" %} |
||
164 | {% from \"macros.twig\" import breadcrumbs, render_classes, class_link, namespace_link %} |
||
165 | {% block title %}{{ namespace|raw }} | {{ parent() }}{% endblock %} |
||
166 | {% block body_class 'namespace' %} |
||
167 | {% block page_id 'namespace:' ~ (namespace|replace({'\\\\': '_'})) %} |
||
168 | |||
169 | {% block below_menu %} |
||
170 | <div class=\"namespace-breadcrumbs\"> |
||
171 | <ol class=\"breadcrumb\"> |
||
172 | <li><span class=\"label label-default\">Namespace</span></li> |
||
173 | {{ breadcrumbs(namespace) }} |
||
174 | </ol> |
||
175 | </div> |
||
176 | {% endblock %} |
||
177 | |||
178 | {% block page_content %} |
||
179 | |||
180 | <div class=\"page-header\"> |
||
181 | <h1>{{ namespace|raw }}</h1> |
||
182 | </div> |
||
183 | |||
184 | {% if subnamespaces %} |
||
185 | <h2>Namespaces</h2> |
||
186 | <div class=\"namespace-list\"> |
||
187 | {% for ns in subnamespaces %}{{ namespace_link(ns) }}{% endfor %} |
||
188 | </div> |
||
189 | {% endif %} |
||
190 | |||
191 | {% if classes %} |
||
192 | <h2>Classes</h2> |
||
193 | {{ render_classes(classes) }} |
||
194 | {% endif %} |
||
195 | |||
196 | {% if interfaces %} |
||
197 | <h2>Interfaces</h2> |
||
198 | {{ render_classes(interfaces) }} |
||
199 | {% endif %} |
||
200 | |||
201 | {% if exceptions %} |
||
202 | <h2>Exceptions</h2> |
||
203 | {{ render_classes(exceptions) }} |
||
204 | {% endif %} |
||
205 | |||
206 | {% endblock %} |
||
207 | ", "namespace.twig", "phar:///Users/bobby/Dropbox/Sites/OpenSource/Slackify/sami.phar/Sami/Resources/themes/default/namespace.twig"); |
||
208 | } |
||
209 | } |
||
210 |