+
+ redef fun score_rate do
+ if self.bad_methods.not_empty then
+ self.score = self.bad_methods.length.to_f / phase.average_number_of_method
+ end
+ end
+end
+
+class NoAbstractImplementation
+ super BadConception
+ var bad_methods = new Array[MMethodDef]
+
+ redef fun name do return "LONGMETH"
+
+ redef fun desc do return "No Implemented abstract property"
+
+ redef fun collect(mclassdef, model_builder): Bool do
+ if not mclassdef.mclass.is_abstract and not mclassdef.mclass.is_interface then
+ if mclassdef.collect_abstract_methods(filter).not_empty then
+ bad_methods.add_all(mclassdef.collect_not_define_properties(filter))
+ end
+ end
+ self.score_rate
+ return bad_methods.not_empty
+ end
+
+ redef fun print_result do
+ print phase.toolcontext.format_h2("{desc}:")
+ if self.bad_methods.not_empty then
+ print " Affected method(s):"
+ for method in self.bad_methods do
+ print " -{method.name}"
+ end
+ end
+ end
+
+ redef fun score_rate do
+ if self.bad_methods.not_empty then
+ self.score = self.bad_methods.length.to_f / phase.average_number_of_method
+ end
+ end