| // Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file | 
 | // for details. All rights reserved. Use of this source code is governed by a | 
 | // BSD-style license that can be found in the LICENSE file. | 
 | package com.android.tools.r8; | 
 |  | 
 | import static org.junit.Assert.assertNotNull; | 
 |  | 
 | import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler; | 
 | import com.android.tools.r8.ToolHelper.KotlinTargetVersion; | 
 | import java.util.ArrayList; | 
 | import java.util.List; | 
 |  | 
 | public class KotlinTestParameters { | 
 |  | 
 |   private final int index; | 
 |   private final KotlinCompiler kotlinc; | 
 |   private final KotlinTargetVersion targetVersion; | 
 |  | 
 |   private KotlinTestParameters( | 
 |       KotlinCompiler kotlinc, KotlinTargetVersion targetVersion, int index) { | 
 |     this.index = index; | 
 |     this.kotlinc = kotlinc; | 
 |     this.targetVersion = targetVersion; | 
 |   } | 
 |  | 
 |   public KotlinCompiler getCompiler() { | 
 |     return kotlinc; | 
 |   } | 
 |  | 
 |   public KotlinTargetVersion getTargetVersion() { | 
 |     return targetVersion; | 
 |   } | 
 |  | 
 |   public boolean isFirst() { | 
 |     return index == 0; | 
 |   } | 
 |  | 
 |   public static Builder builder() { | 
 |     return new Builder(); | 
 |   } | 
 |  | 
 |   @Override | 
 |   public String toString() { | 
 |     return kotlinc + "[target=" + targetVersion + "]"; | 
 |   } | 
 |  | 
 |   public static class Builder { | 
 |  | 
 |     private KotlinCompiler[] compilers; | 
 |     private KotlinTargetVersion[] targetVersions; | 
 |  | 
 |     private Builder() {} | 
 |  | 
 |     public Builder withAllCompilers() { | 
 |       compilers = ToolHelper.getKotlinCompilers(); | 
 |       return this; | 
 |     } | 
 |  | 
 |     public Builder withAllCompilersAndTargetVersions() { | 
 |       return withAllCompilers().withAllTargetVersions(); | 
 |     } | 
 |  | 
 |     public Builder withCompiler(KotlinCompiler compiler) { | 
 |       compilers = new KotlinCompiler[] {compiler}; | 
 |       return this; | 
 |     } | 
 |  | 
 |     public Builder withAllTargetVersions() { | 
 |       targetVersions = KotlinTargetVersion.values(); | 
 |       return this; | 
 |     } | 
 |  | 
 |     public Builder withTargetVersion(KotlinTargetVersion targetVersion) { | 
 |       targetVersions = new KotlinTargetVersion[] {targetVersion}; | 
 |       return this; | 
 |     } | 
 |  | 
 |     public KotlinTestParametersCollection build() { | 
 |       validate(); | 
 |       List<KotlinTestParameters> testParameters = new ArrayList<>(); | 
 |       int index = 0; | 
 |       for (KotlinCompiler kotlinc : compilers) { | 
 |         for (KotlinTargetVersion targetVersion : targetVersions) { | 
 |           testParameters.add(new KotlinTestParameters(kotlinc, targetVersion, index++)); | 
 |         } | 
 |       } | 
 |       return new KotlinTestParametersCollection(testParameters); | 
 |     } | 
 |  | 
 |     private void validate() { | 
 |       assertNotNull(compilers); | 
 |       assertNotNull(targetVersions); | 
 |     } | 
 |   } | 
 | } |