Merge changes I1c5f06d2,Ib9d74e11,I628cb0ad

* changes:
  Add type of unconverteds to bp2build-progress
  Handle filegroups differently in bp2build-progress
  bp2build-progress: collect type for blueprint mods
diff --git a/scripts/bp2build-progress/bp2build-progress.py b/scripts/bp2build-progress/bp2build-progress.py
index 49a299d..1cb9431 100755
--- a/scripts/bp2build-progress/bp2build-progress.py
+++ b/scripts/bp2build-progress/bp2build-progress.py
@@ -142,7 +142,7 @@
 
   make_node = lambda module, color: \
       ('"{name}" [label="{name}\\n{kind}" color=black, style=filled, '
-       'fillcolor={color}]').format(name=module.name, kind=module.kind, color=color)
+       "fillcolor={color}]").format(name=module.name, kind=module.kind, color=color)
   make_edge = lambda module, dep: \
       '"%s" -> "%s"' % (module.name, dep)
 
@@ -187,6 +187,7 @@
   all_unconverted_modules = collections.defaultdict(int)
 
   dirs_with_unconverted_modules = set()
+  kind_of_unconverted_modules = set()
 
   for module, deps in sorted(modules.items()):
     unconverted_deps = set(dep for dep in deps if dep not in converted)
@@ -202,6 +203,7 @@
           unconverted_deps=", ".join(sorted(unconverted_deps)))
       blocked_modules[unconverted_count].append(report_entry)
       dirs_with_unconverted_modules.add(module.dirname)
+      kind_of_unconverted_modules.add(module.kind)
 
   for count, modules in sorted(blocked_modules.items()):
     report_lines.append("\n%d unconverted deps remaining:" % count)
@@ -220,6 +222,10 @@
       sorted(dirs_with_unconverted_modules))))
 
   report_lines.append("\n")
+  report_lines.append("Kinds with unconverted modules:\n\n{}".format("\n".join(
+      sorted(kind_of_unconverted_modules))))
+
+  report_lines.append("\n")
   report_lines.append("# Converted modules:\n\n%s" %
                       "\n".join(sorted(converted)))
 
@@ -227,9 +233,8 @@
   report_lines.append(
       "Generated by: https://cs.android.com/android/platform/superproject/+/master:build/bazel/scripts/bp2build-progress/bp2build-progress.py"
   )
-  report_lines.append(
-      "Generated at: %s" %
-      datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S %z"))
+  report_lines.append("Generated at: %s" %
+                      datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S %z"))
   print("\n".join(report_lines))
 
 
@@ -243,7 +248,7 @@
   # Do a single pass to find all top-level modules to be ignored
   for module in module_graph:
     name = module["Name"]
-    if module["Type"] in IGNORED_KINDS:
+    if ignore_kind(module["Type"]):
       ignored.add(module["Name"])
       continue
     name_to_info[name] = _ModuleInfo(
@@ -274,6 +279,10 @@
   return module_adjacency_list
 
 
+def ignore_kind(kind):
+  return kind in IGNORED_KINDS or "defaults" in kind
+
+
 def bazel_target_to_dir(full_target):
   dirname, _ = full_target.split(":")
   return dirname[2:]
@@ -291,29 +300,39 @@
   name_with_variant_to_name = dict()
 
   for module in module_graph:
+    ignore = False
     if module.tag != "rule":
       continue
     kind = module.attrib["class"]
     name_with_variant = module.attrib["name"]
+    name = None
+    variant = ""
     for attr in module:
       attr_name = attr.attrib["name"]
       if attr_name == "soong_module_name":
         name = attr.attrib["value"]
-        if kind in IGNORED_KINDS:
-          ignored.add(name_with_variant)
-        else:
-          name_with_variant_to_name.setdefault(name_with_variant, name)
-          name_to_info.setdefault(
-              name,
-              _ModuleInfo(
-                  name=name,
-                  kind=kind,
-                  dirname=bazel_target_to_dir(name_with_variant),
-              ))
       elif attr_name == "soong_module_variant":
         variant = attr.attrib["value"]
-        if variant.startswith("windows"):
-          ignored.add(name_with_variant)
+      elif attr_name == "soong_module_type" and kind == "generic_soong_module":
+        kind = attr.attrib["value"]
+      # special handling for filegroup srcs, if a source has the same name as
+      # the module, we don't convert it
+      elif kind == "filegroup" and attr_name == "srcs":
+        for item in attr:
+          if item.attrib["value"] == name:
+            ignore = True
+
+    if ignore_kind(kind) or variant.startswith("windows") or ignore:
+      ignored.add(name_with_variant)
+    else:
+      name_with_variant_to_name.setdefault(name_with_variant, name)
+      name_to_info.setdefault(
+          name,
+          _ModuleInfo(
+              name=name,
+              kind=kind,
+              dirname=bazel_target_to_dir(name_with_variant),
+          ))
 
   # An adjacency list for all modules in the transitive closure, excluding ignored modules.
   module_adjacency_list = dict()
@@ -364,9 +383,9 @@
     module_graph, converted = generate_module_info(top_level_module,
                                                    use_queryview)
   except subprocess.CalledProcessError as err:
-    print("Error running: '%s':", ' '.join(err.cmd))
-    print("Output:\n%s" % err.output.decode('utf-8'))
-    print("Error:\n%s" % err.stderr.decode('utf-8'))
+    print("Error running: '%s':", " ".join(err.cmd))
+    print("Output:\n%s" % err.output.decode("utf-8"))
+    print("Error:\n%s" % err.stderr.decode("utf-8"))
     sys.exit(-1)
 
   module_adjacency_list = None