metrics: move up collect method in Metric
[nit.git] / src / metrics / rta_metrics.nit
index a02a174..85b012a 100644 (file)
@@ -40,10 +40,10 @@ redef class MType
        private var nlvt: Int = 0
        private var nlct: Int = 0
 
-       private fun is_user_defined: Bool do
+       private fun is_standard: Bool do
                var mtype = self
                if mtype isa MNullableType then mtype = mtype.mtype
-               return self.as(MClassType).mclass.is_user_defined
+               return self.as(MClassType).mclass.is_standard
        end
 
        private fun get_depth: Int do
@@ -93,7 +93,7 @@ do
                mtype.mclass.nlvt += 1
                mtype.mclass.live_types.add(mtype)
                if mtype isa MGenericType then nlvtg += 1
-               if mtype.is_user_defined then
+               if not mtype.is_standard then
                        nlvtudud += 1
                        if mtype isa MGenericType then nlvtgudud += 1
                else
@@ -103,12 +103,14 @@ do
        end
 
        for mtype in analysis.live_cast_types do
+               if mtype isa MNullableType then mtype = mtype.mtype
+               if not mtype isa MClassType then continue
                mtypes.add(mtype)
                nlct += 1
                mtype.mclass.nlct += 1
                mtype.mclass.cast_types.add(mtype)
                if mtype isa MGenericType then nlctg += 1
-               if mtype.is_user_defined then
+               if not mtype.is_standard then
                        nlctudud += 1
                        if mtype isa MGenericType then nlctgudud += 1
                else
@@ -134,7 +136,7 @@ do
                for mtype in mtypes do
                        var arity = 0
                        if mtype isa MGenericType then arity = mtype.arguments.length
-                       if mtype.is_user_defined then
+                       if not mtype.is_standard then
                                udscalarCSV.add_line(mtype, arity, mtype.get_depth, mtype.nlvt, mtype.nlct)
                        end
                        scalarCSV.add_line(mtype, arity, mtype.get_depth, mtype.nlvt, mtype.nlct)
@@ -149,7 +151,7 @@ do
 
                for mclass in modelbuilder.model.mclasses do
                        if not mclass.is_class or mclass.is_abstract then continue
-                       if mclass.is_user_defined then
+                       if not mclass.is_standard then
                                udscalarCSV.add_line(mclass.mclass_type, mclass.arity, mclass.live_types.length, mclass.nlvt)
                        end
                        scalarCSV.add_line(mclass.mclass_type, mclass.arity, mclass.live_types.length, mclass.nlvt)
@@ -159,12 +161,23 @@ do
        end
 
        print "--- RTA metrics ---"
+       print "Number of live runtime classes: {analysis.live_classes.length}"
+       if analysis.live_classes.length < 8 then print "\t{analysis.live_classes.join(" ")}"
        print "Number of live runtime types (instantied resolved type): {analysis.live_types.length}"
        if analysis.live_types.length < 8 then print "\t{analysis.live_types.join(" ")}"
+       print "Number of live methods: {analysis.live_methods.length}"
+       if analysis.live_methods.length < 8 then print "\t{analysis.live_methods.join(" ")}"
        print "Number of live method definitions: {analysis.live_methoddefs.length}"
        if analysis.live_methoddefs.length < 8 then print "\t{analysis.live_methoddefs.join(" ")}"
-       print "Number of live customized method definitions: {analysis.live_customized_methoddefs.length}"
-       if analysis.live_customized_methoddefs.length < 8 then print "\t{analysis.live_customized_methoddefs.join(" ")}"
        print "Number of live runtime cast types (ie used in as and isa): {analysis.live_cast_types.length}"
        if analysis.live_cast_types.length < 8 then print "\t{analysis.live_cast_types.join(" ")}"
+
+       var x = 0
+       for p in analysis.live_methods do
+               for d in p.mpropdefs do
+                       if analysis.live_methoddefs.has(d) or d.is_abstract then continue
+                       x += 1
+               end
+       end
+       print "Number of dead method definitions of live methods: {x}"
 end