listPlugins method

  1. @override
Future<List<AndroidPlugin>> listPlugins()
override

Implementation

@override
Future<List<AndroidPlugin>> listPlugins() async {
  // TODO: implement listPlugins
  _cache.clear();
  var result = await buildFile.search("classpath");

  if (result.isEmpty) {
    return [];
  }
  List<AndroidPlugin> plugins = [];
  for (var element in result) {
    var rawPlugin = element.line
        .trim()
        .replaceAll("classpath ", "")
        .replaceAll("'", "")
        .replaceAll('"', '');

    if (rawPlugin != '') {
      var parts = rawPlugin.split(":");
      var pluginVersion = parts.removeLast();
      var pluginName = parts.join(":");

      if (pluginVersion.startsWith("\$")) {
        var isVar = pluginVersion.startsWith("\$");
        if (isVar) {
          var resolveVersionResult = await buildFile
              .search("ext.${pluginVersion.replaceAll("\$", "")}");
          if (resolveVersionResult.isNotEmpty) {
            var version = resolveVersionResult[0]
                .line
                .replaceAll(
                    "ext.${pluginVersion.replaceAll("\$", "")} = ", "")
                .replaceAll("'", "")
                .replaceAll('"', '');
            pluginVersion = version;
          }
        }
      }

      var plugin = AndroidPlugin(pluginName, pluginVersion.trim());
      plugins.add(plugin);
      _cache[element.index] = plugin;
    }
  }

  return plugins;
}