Koman Kséfé?

Quizz #1

"JavaVersion"

La liste des versions de Java pour Gradle

Contexte du quizz

  • Utilisé dans l'API Gradle
  • Version analysée: Gradle 6.6.1
  • Objet concerné: org.gradle.api.JavaVersion
// build.gradle.kts

tasks {

    withType<KotlinCompile> {
        kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()
    }
}

Question #1

Quelles sont les versions de Java officiellement supportées par Gradle ? 

Réponse #1

14 !

1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 1.10, 11, 12, 13, 14

Question #2

Combien de version de Java sont listées dans JavaVersion ? 

Réponse #2

18 !

1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 1.10, 11, 12, 13, 14, 15, 16, 17, 18

Question #3

Est ce que JavaVersion est un singleton composé de constant ou une enum ?

Réponse #3

enum!

public enum JavaVersion {
    VERSION_1_1, VERSION_1_2, VERSION_1_3, VERSION_1_4,
    VERSION_1_5, VERSION_1_6, VERSION_1_7, VERSION_1_8,
    VERSION_1_9, VERSION_1_10,
    /**
     * Java 11 major version.
     *
     * @since 4.7
     */
    VERSION_11,

    /**
     * Java 12 major version.
     *
     * @since 5.0
     */
    VERSION_12,

    /**
     * Java 13 major version.
     *
     * @since 6.0
     */
    VERSION_13,

    /**
     * Java 14 major version.
     *
     * @since 6.3
     */
    VERSION_14,

    /**
     * Java 15 major version.
     * Not officially supported by Gradle. Use at your own risk.
     *
     * @since 6.3
     */
    @Incubating
    VERSION_15,

    /**
     * Java 16 major version.
     * Not officially supported by Gradle. Use at your own risk.
     *
     * @since 6.3
     */
    @Incubating
    VERSION_16,

    /**
     * Java 17 major version.
     * Not officially supported by Gradle. Use at your own risk.
     *
     * @since 6.3
     */
    @Incubating
    VERSION_17,

    /**
     * Higher version of Java.
     * @since 4.7
     */
    VERSION_HIGHER;
    
    // ...
}

Question #4

Comment est implémenté le nom de la version récupéré par JavaVersion.toString() ?

Indice #4.1

public enum JavaVersion {

  VERSION_1_1, VERSION_1_2, VERSION_1_3, VERSION_1_4,
    VERSION_1_5, VERSION_1_6, VERSION_1_7, VERSION_1_8,
    VERSION_1_9, VERSION_1_10,
  /**
  * Java 11 major version.
  *
  * @since 4.7
  */
  VERSION_11,
  
  // ...
  
  private final String versionName;
  
  // ...
  
  @Override
  public String toString() {
  	return versionName;
  }
}

Indice #4.2

public enum JavaVersion {

  VERSION_1_1, VERSION_1_2, VERSION_1_3, VERSION_1_4,
    VERSION_1_5, VERSION_1_6, VERSION_1_7, VERSION_1_8,
    VERSION_1_9, VERSION_1_10,
  /**
  * Java 11 major version.
  *
  * @since 4.7
  */
  VERSION_11,
  
  // ...
  
  // Since Java 9, version should be X instead of 1.X
  // However, to keep backward compatibility, we change from 11
  private static final int FIRST_MAJOR_VERSION_ORDINAL = 10;
  private final String versionName;
  
  // ...
  
  @Override
  public String toString() {
  	return versionName;
  }
}

Réponse #4

public enum JavaVersion {

  // values

  // Since Java 9, version should be X instead of 1.X
  // However, to keep backward compatibility, we change from 11
  private static final int FIRST_MAJOR_VERSION_ORDINAL = 10;
  private final String versionName;

  JavaVersion() {
  	this.versionName = ordinal() >= FIRST_MAJOR_VERSION_ORDINAL ? getMajorVersion() : "1." + getMajorVersion();
  }
  
  // ...
  
  public String getMajorVersion() {
  	return String.valueOf(ordinal() + 1);
  }
  
  @Override
  public String toString() {
  	return versionName;
  }
}

Koman Kséfé #1

By Leo Millon

Koman Kséfé #1

  • 74