From e61990aaf0f6a883f428faf0133cdda8c4974b49 Mon Sep 17 00:00:00 2001
From: Tor Norbye <tnorbye@google.com>
Date: Wed, 23 Jan 2019 11:06:33 -0800
Subject: [PATCH] Using --output-kotlin-nulls=yes implies --format=v3

Test: Unit test included
Change-Id: I17c4e63b2feef7ff0b0ebd97719fdfad03a03543
---
 build.gradle                                      |  2 +-
 .../java/com/android/tools/metalava/Options.kt    | 15 +++++++++++----
 src/main/resources/version.properties             |  2 +-
 .../com/android/tools/metalava/ApiFileTest.kt     |  2 ++
 .../com/android/tools/metalava/ApiFromTextTest.kt |  4 +++-
 .../tools/metalava/NullnessMigrationTest.kt       |  1 +
 6 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/build.gradle b/build.gradle
index bfa6d11..1fb56b1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
 buildscript {
     ext.gradle_version = '3.4.0-beta01'
     ext.studio_version = '26.4.0-beta01'
-    ext.kotlin_version = '1.3.11'
+    ext.kotlin_version = '1.3.20'
     repositories {
         google()
         jcenter()
diff --git a/src/main/java/com/android/tools/metalava/Options.kt b/src/main/java/com/android/tools/metalava/Options.kt
index a3e6793..539d7e5 100644
--- a/src/main/java/com/android/tools/metalava/Options.kt
+++ b/src/main/java/com/android/tools/metalava/Options.kt
@@ -1249,18 +1249,19 @@ class Options(
                             true
                         else yesNo(arg.substring(ARG_INCLUDE_SIG_VERSION.length + 1))
                     } else if (arg.startsWith(ARG_FORMAT)) {
-                        when (arg) {
+                        outputFormat = when (arg) {
                             "$ARG_FORMAT=v1" -> {
-                                FileFormat.V1.configureOptions(this, compatibility)
+                                FileFormat.V1
                             }
                             "$ARG_FORMAT=v2" -> {
-                                FileFormat.V2.configureOptions(this, compatibility)
+                                FileFormat.V2
                             }
                             "$ARG_FORMAT=v3" -> {
-                                FileFormat.V3.configureOptions(this, compatibility)
+                                FileFormat.V3
                             }
                             else -> throw DriverException(stderr = "Unexpected signature format; expected v1, v2 or v3")
                         }
+                        outputFormat.configureOptions(this, compatibility)
                     } else if (arg.startsWith("-")) {
                         // Compatibility flag; map to mutable properties in the Compatibility
                         // class and assign it
@@ -1329,6 +1330,12 @@ class Options(
             apiLevelJars = findAndroidJars(androidJarPatterns!!, currentApiLevel, currentCodeName, currentJar)
         }
 
+        // outputKotlinStyleNulls implies format=v3
+        if (outputKotlinStyleNulls) {
+            outputFormat = FileFormat.V3
+            outputFormat.configureOptions(this, compatibility)
+        }
+
         // If the caller has not explicitly requested that unannotated classes and
         // members should be shown in the output then only show them if no annotations were provided.
         if (!showUnannotated && showAnnotations.isEmpty()) {
diff --git a/src/main/resources/version.properties b/src/main/resources/version.properties
index 0e3b7f6..82254da 100644
--- a/src/main/resources/version.properties
+++ b/src/main/resources/version.properties
@@ -2,4 +2,4 @@
 # Version definition
 # This file is read by gradle build scripts, but also packaged with metalava
 # as a resource for the Version classes to read.
-metalavaVersion=1.2.6
+metalavaVersion=1.2.7
diff --git a/src/test/java/com/android/tools/metalava/ApiFileTest.kt b/src/test/java/com/android/tools/metalava/ApiFileTest.kt
index 61bf801..d80da35 100644
--- a/src/test/java/com/android/tools/metalava/ApiFileTest.kt
+++ b/src/test/java/com/android/tools/metalava/ApiFileTest.kt
@@ -613,6 +613,7 @@ class ApiFileTest : DriverTest() {
                 androidxNullableSource
             ),
             api = """
+                // Signature format: 3.0
                 package androidx.util {
                   public class NonNullableJavaPair<F, S> {
                     ctor public NonNullableJavaPair(F, S);
@@ -712,6 +713,7 @@ class ApiFileTest : DriverTest() {
                 androidxNullableSource
             ),
             api = """
+                // Signature format: 3.0
                 package test {
                   public class MyClass {
                     ctor public MyClass();
diff --git a/src/test/java/com/android/tools/metalava/ApiFromTextTest.kt b/src/test/java/com/android/tools/metalava/ApiFromTextTest.kt
index bbc1439..abbf5f1 100644
--- a/src/test/java/com/android/tools/metalava/ApiFromTextTest.kt
+++ b/src/test/java/com/android/tools/metalava/ApiFromTextTest.kt
@@ -653,6 +653,7 @@ class ApiFromTextTest : DriverTest() {
     @Test
     fun `Deprecated enum constant`() {
         val source = """
+                // Signature format: 3.0
                 package androidx.annotation {
                   @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PACKAGE}) public @interface RestrictTo {
                     method public abstract androidx.annotation.RestrictTo.Scope[] value();
@@ -677,8 +678,9 @@ class ApiFromTextTest : DriverTest() {
     }
 
     @Test
-    fun `Type parameters in v2 format`() {
+    fun `Type parameters in v3 format`() {
         val source = """
+                // Signature format: 3.0
                 package androidx.collection {
                   public class Constants {
                     field public static final String GOOD_IRI_CHAR = "a-zA-Z0-9\u00a0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef";
diff --git a/src/test/java/com/android/tools/metalava/NullnessMigrationTest.kt b/src/test/java/com/android/tools/metalava/NullnessMigrationTest.kt
index b74d384..a3ddfaf 100644
--- a/src/test/java/com/android/tools/metalava/NullnessMigrationTest.kt
+++ b/src/test/java/com/android/tools/metalava/NullnessMigrationTest.kt
@@ -259,6 +259,7 @@ class NullnessMigrationTest : DriverTest() {
                 }
                 """,
             api = """
+                // Signature format: 3.0
                 package test.pkg {
                   public class MyTest {
                     ctor public MyTest();
-- 
GitLab