Future doit()

in tool/plugin/lib/plugin.dart [445:528]


  Future<int> doit() async {
    if (isReleaseMode) {
      if (argResults['unpack']) {
        separator('Release mode (--release) implies --unpack');
      }
      if (!await performReleaseChecks(this)) {
        return 1;
      }
    }

    // Check to see if we should only be building a specific version.
    String onlyVersion = argResults['only-version'];

    var buildSpecs = specs;
    if (onlyVersion != null && onlyVersion.isNotEmpty) {
      buildSpecs = specs.where((spec) => spec.version == onlyVersion).toList();
      if (buildSpecs.isEmpty) {
        log("No spec found for version '$onlyVersion'");
        return 1;
      }
    }

    String minorNumber = argResults['minor'];
    if (minorNumber != null) {
      pluginCount = int.parse(minorNumber) - 1;
    }

    var result = 0;
    for (var spec in buildSpecs) {
      if (spec.channel != channel) {
        continue;
      }
      if (!(isForIntelliJ && isForAndroidStudio)) {
        // This is a little more complicated than I'd like because the default
        // is to always do both.
        if (isForAndroidStudio && !spec.isAndroidStudio) continue;
        if (isForIntelliJ && spec.isAndroidStudio) continue;
      }

      pluginCount++;
      if (spec.isDevChannel && !isDevChannel) {
        spec.buildForMaster();
      }

      result = await spec.artifacts.provision(
        rebuildCache:
            isReleaseMode || argResults['unpack'] || buildSpecs.length > 1,
      );
      if (result != 0) {
        return result;
      }

      separator('Building flutter-intellij.jar');
      await removeAll('build');

      log('spec.version: ${spec.version}');

      result = await applyEdits(spec, () async {
        return await externalBuildCommand(spec);
      });
      if (result != 0) {
        log('applyEdits() returned ${result.toString()}');
        return result;
      }

      try {
        result = await savePluginArtifact(spec);
        if (result != 0) {
          return result;
        }
      } catch (ex) {
        log("$ex");
        return 1;
      }

      separator('Built artifact');
      log(releasesFilePath(spec));
    }
    if (argResults['only-version'] == null) {
      checkAndClearAppliedEditCommands();
    }

    return 0;
  }