doc: use 'module' instead of 'package' in comments
[nit.git] / src / analysis / instantiated_type_analysis.nit
index f3fb22e..039c779 100644 (file)
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Package containing all bases for instantiated type analysis
+# Module containing all bases for instantiated type analysis
 package instantiated_type_analysis
 
 import program
@@ -22,6 +22,36 @@ import program
 redef class Program
        # This attribute is the InstantiatedTypeAnalysis results
        readable writable var _ita: nullable InstantiatedTypeAnalysis = null
+
+       # This method will create a file and output the name of all types that are instantiated in it
+       fun dump_instantiated_types(directory_name: String) do
+               var f = new OFStream.open("{directory_name}/{main_module.name}.instantiated_types.log")
+               with_each_live_local_classes !action(c) do
+                       f.write("{c}\n")
+               end
+               f.close
+       end
+
+       # This method will create a file and output the names of all types that are not instantiated in it
+       fun dump_not_instantiated_types(directory_name: String) do
+               var f = new OFStream.open("{directory_name}/{main_module.name}.not_instantiated_types.log")
+               # Must overwrite 'with_each_local_classes' since we are looking at non-instantiated classes
+               for c in main_module.local_classes do
+                       if not ita.is_class_instantiated(c) then
+                               f.write("{c}\n")
+                       end
+               end
+               f.close
+       end
+
+       # We know which are really live, use that information !
+       redef fun with_each_live_local_classes
+               !action(m: MMLocalClass)
+       do
+               for c in main_module.local_classes do
+                       if ita == null or ita.as(not null).is_class_instantiated(c) then action(c)
+               end
+       end
 end
 
 # Subclasses of this class would represent an analysis that produces