private void checkDslPropertyAssignment()

in analyzer/src/main/java/com/android/tools/sizereduction/analyzer/model/GroovyGradleParser.java [284:377]


  private void checkDslPropertyAssignment(
      String property, String value, String parent, String parentParent, int lineNumber) {
    String buildType =
        "buildTypes".equals(parentParent) ? parent : ProguardConfig.DEFAULT_CONFIG_NAME;
    ProguardConfig.Builder proguardConfig =
        proguardConfigs.containsKey(buildType)
            ? proguardConfigs.get(buildType)
            : ProguardConfig.builder();
    switch (property) {
      case "minSdkVersion":
        int curMinSdkVersion = getSdkVersion(value, defaultMinSdkVersion);
        minSdkVersion =
            (minSdkVersion > 0 && minSdkVersion < curMinSdkVersion)
                ? minSdkVersion
                : curMinSdkVersion;
        break;
      case "targetSdkVersion":
        int curTargetSdkVersion = getSdkVersion(value, defaultTargetSdkVersion);
        targetSdkVersion =
            (targetSdkVersion > 0 && targetSdkVersion < curTargetSdkVersion)
                ? targetSdkVersion
                : curTargetSdkVersion;
        break;
      case "minifyEnabled":
        proguardConfig.setMinifyEnabled(value.equals("true"));
        proguardConfigs.put(buildType, proguardConfig);
        break;
      case "proguardFiles":
        proguardConfig.setHasProguardRules(true);
        proguardConfigs.put(buildType, proguardConfig);
        break;
      case "useProguard":
        // useProguard may use proguard or r8, but this effectively controls whether
        // obfuscation is enabled for this project.
        proguardConfig.setObfuscationEnabled(value.equals("true"));
        proguardConfigs.put(buildType, proguardConfig);
        break;
      case "enableSplit":
        if (parentParent.equals("bundle")) {
          switch (parent) {
            case "abi": // 3.2 and above.
              bundleConfigBuilder.setAbiSplitEnabled(value.equals("true"));
              bundleConfigLocationBuilder.setAbiSplitLineNumber(lineNumber);
              break;
            case "density":
              bundleConfigBuilder.setDensitySplitEnabled(value.equals("true"));
              bundleConfigLocationBuilder.setDensitySplitLineNumber(lineNumber);
              break;
            case "language":
              bundleConfigBuilder.setLanguageSplitEnabled(value.equals("true"));
              bundleConfigLocationBuilder.setLanguageSplitLineNumber(lineNumber);
              break;
            default:
              // ignore other proprties
              break;
          }
        }
        break;
      case "classpath":
        if (parent.equals("dependencies") && parentParent.equals("buildscript")) {
          if (isStringLiteral(value)) {
            String classPath = getStringLiteralValue(value);
            if (classPath.startsWith("com.android.tools.build:gradle:")) {
              String version = classPath.substring("com.android.tools.build:gradle:".length());
              gradleContextBuilder.setAndroidPluginVersion(AndroidPluginVersion.create(version));
            }
          }
        }
        break;
      case "wearApp":
        if (parent.equals("dependencies")) {
          gradleContextBuilder.setEmbedsWearApk(true);
        }
        break;
      case "implementation":
      case "api":
      case "compile":
        if (parent.equals("dependencies")) {
          if (isStringLiteral(value)) {
            List<String> dependency = Splitter.on(':').splitToList(getStringLiteralValue(value));
            if (isValidDependencyString(dependency)) {
              addDependencyToGradleContext(
                  /* group= */ dependency.get(0),
                  /* name= */ dependency.get(1),
                  /* version= */ dependency.get(2));
            }
          }
        }
        break;
      default:
        // there are many other valid properties, but we do not care to store them yet.
        break;
    }
  }