Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Kotlin class assertion generation problem

Abierto
#193 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
java, kotlin
Área
tooling

Línea de trabajo

Comienza con el reproductor de Kotlin en Klass.kt y JavaClass.java; después, inspecciona la ruta del generador que produce AbstractKlassAssert. Confirma que los métodos de aserción generados se emiten solo una vez y que la clase Java resultante compila.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

There is a small problem:

Generator is creating assertion methods twice in Abstract***Assert classes for code where Kotlin class with lateinit collection field is generified with complex java class. Generated code cannot compile

Example to reproduce the problem:

Klass.kt:

class Klass {
  lateinit var collection: Collection<JavaClass>
}

JavaClass.java:

public class JavaClass {}

Result:

/**
 * Abstract base class for {@link Klass} specific assertions - Generated by CustomAssertionGenerator.
 */
@javax.annotation.Generated(value="assertj-assertions-generator")
public abstract class AbstractKlassAssert<S extends AbstractKlassAssert<S, A>, A extends Klass> extends AbstractObjectAssert<S, A> {

  /**
   * Creates a new <code>{@link AbstractKlassAssert}</code> to make assertions on actual Klass.
   * @param actual the Klass we want to make assertions on.
   */
  protected AbstractKlassAssert(A actual, Class<S> selfType) {
    super(actual, selfType);
  }

  /**
   * Verifies that the actual Klass's collection contains the given JavaClass elements.
   * @param collection the given elements that should be contained in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection does not contain all given JavaClass elements.
   */
  public S hasCollection(JavaClass... collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass varargs is not null.
    if (collection == null) failWithMessage("Expecting collection parameter not to be null.");

    // check with standard error message, to set another message call: info.overridingErrorMessage("my error message");
    Iterables.instance().assertContains(info, actual.getCollection(), collection);

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass's collection contains the given JavaClass elements in Collection.
   * @param collection the given elements that should be contained in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection does not contain all given JavaClass elements.
   */
  public S hasCollection(java.util.Collection<? extends JavaClass> collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass collection is not null.
    if (collection == null) {
      failWithMessage("Expecting collection parameter not to be null.");
      return myself; // to fool Eclipse "Null pointer access" warning on toArray.
    }

    // check with standard error message, to set another message call: info.overridingErrorMessage("my error message");
    Iterables.instance().assertContains(info, actual.getCollection(), collection.toArray());

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass's collection contains <b>only</b> the given JavaClass elements and nothing else in whatever order.
   * @param collection the given elements that should be contained in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection does not contain all given JavaClass elements.
   */
  public S hasOnlyCollection(JavaClass... collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass varargs is not null.
    if (collection == null) failWithMessage("Expecting collection parameter not to be null.");

    // check with standard error message, to set another message call: info.overridingErrorMessage("my error message");
    Iterables.instance().assertContainsOnly(info, actual.getCollection(), collection);

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass's collection contains <b>only</b> the given JavaClass elements in Collection and nothing else in whatever order.
   * @param collection the given elements that should be contained in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection does not contain all given JavaClass elements.
   */
  public S hasOnlyCollection(java.util.Collection<? extends JavaClass> collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass collection is not null.
    if (collection == null) {
      failWithMessage("Expecting collection parameter not to be null.");
      return myself; // to fool Eclipse "Null pointer access" warning on toArray.
    }

    // check with standard error message, to set another message call: info.overridingErrorMessage("my error message");
    Iterables.instance().assertContainsOnly(info, actual.getCollection(), collection.toArray());

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass's collection does not contain the given JavaClass elements.
   *
   * @param collection the given elements that should not be in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection contains any given JavaClass elements.
   */
  public S doesNotHaveCollection(JavaClass... collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass varargs is not null.
    if (collection == null) failWithMessage("Expecting collection parameter not to be null.");

    // check with standard error message (use overridingErrorMessage before contains to set your own message).
    Iterables.instance().assertDoesNotContain(info, actual.getCollection(), collection);

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass's collection does not contain the given JavaClass elements in Collection.
   *
   * @param collection the given elements that should not be in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection contains any given JavaClass elements.
   */
  public S doesNotHaveCollection(java.util.Collection<? extends JavaClass> collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass collection is not null.
    if (collection == null) {
      failWithMessage("Expecting collection parameter not to be null.");
      return myself; // to fool Eclipse "Null pointer access" warning on toArray.
    }

    // check with standard error message (use overridingErrorMessage before contains to set your own message).
    Iterables.instance().assertDoesNotContain(info, actual.getCollection(), collection.toArray());

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass has no collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection is not empty.
   */
  public S hasNoCollection() {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // we override the default error message with a more explicit one
    String assertjErrorMessage = "\nExpecting :\n  <%s>\nnot to have collection but had :\n  <%s>";

    // check
    if (actual.getCollection().iterator().hasNext()) {
      failWithMessage(assertjErrorMessage, actual, actual.getCollection());
    }

    // return the current assertion for method chaining
    return myself;
  }


  /**
   * Verifies that the actual Klass's collection contains the given JavaClass elements.
   * @param collection the given elements that should be contained in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection does not contain all given JavaClass elements.
   */
  public S hasCollection(JavaClass... collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass varargs is not null.
    if (collection == null) failWithMessage("Expecting collection parameter not to be null.");

    // check with standard error message, to set another message call: info.overridingErrorMessage("my error message");
    Iterables.instance().assertContains(info, actual.collection, collection);

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass's collection contains the given JavaClass elements in Collection.
   * @param collection the given elements that should be contained in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection does not contain all given JavaClass elements.
   */
  public S hasCollection(java.util.Collection<? extends JavaClass> collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass collection is not null.
    if (collection == null) {
      failWithMessage("Expecting collection parameter not to be null.");
      return myself; // to fool Eclipse "Null pointer access" warning on toArray.
    }

    // check with standard error message, to set another message call: info.overridingErrorMessage("my error message");
    Iterables.instance().assertContains(info, actual.collection, collection.toArray());

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass's collection contains <b>only</b> the given JavaClass elements and nothing else in whatever order.
   * @param collection the given elements that should be contained in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection does not contain all given JavaClass elements.
   */
  public S hasOnlyCollection(JavaClass... collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass varargs is not null.
    if (collection == null) failWithMessage("Expecting collection parameter not to be null.");

    // check with standard error message, to set another message call: info.overridingErrorMessage("my error message");
    Iterables.instance().assertContainsOnly(info, actual.collection, collection);

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass's collection contains <b>only</b> the given JavaClass elements in Collection and nothing else in whatever order.
   * @param collection the given elements that should be contained in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection does not contain all given JavaClass elements.
   */
  public S hasOnlyCollection(java.util.Collection<? extends JavaClass> collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass collection is not null.
    if (collection == null) {
      failWithMessage("Expecting collection parameter not to be null.");
      return myself; // to fool Eclipse "Null pointer access" warning on toArray.
    }

    // check with standard error message, to set another message call: info.overridingErrorMessage("my error message");
    Iterables.instance().assertContainsOnly(info, actual.collection, collection.toArray());

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass's collection does not contain the given JavaClass elements.
   *
   * @param collection the given elements that should not be in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection contains any given JavaClass elements.
   */
  public S doesNotHaveCollection(JavaClass... collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass varargs is not null.
    if (collection == null) failWithMessage("Expecting collection parameter not to be null.");

    // check with standard error message (use overridingErrorMessage before contains to set your own message).
    Iterables.instance().assertDoesNotContain(info, actual.collection, collection);

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass's collection does not contain the given JavaClass elements in Collection.
   *
   * @param collection the given elements that should not be in actual Klass's collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection contains any given JavaClass elements.
   */
  public S doesNotHaveCollection(java.util.Collection<? extends JavaClass> collection) {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // check that given JavaClass collection is not null.
    if (collection == null) {
      failWithMessage("Expecting collection parameter not to be null.");
      return myself; // to fool Eclipse "Null pointer access" warning on toArray.
    }

    // check with standard error message (use overridingErrorMessage before contains to set your own message).
    Iterables.instance().assertDoesNotContain(info, actual.collection, collection.toArray());

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Klass has no collection.
   * @return this assertion object.
   * @throws AssertionError if the actual Klass's collection is not empty.
   */
  public S hasNoCollection() {
    // check that actual Klass we want to make assertions on is not null.
    isNotNull();

    // we override the default error message with a more explicit one
    String assertjErrorMessage = "\nExpecting :\n  <%s>\nnot to have collection but had :\n  <%s>";

    // check
    if (actual.collection.iterator().hasNext()) {
      failWithMessage(assertjErrorMessage, actual, actual.collection);
    }

    // return the current assertion for method chaining
    return myself;
  }


}
Lenguaje dominante
Java
Estrellas
72
Forks
47
Merge medio
14 h 37 min
PR fusionados (30 d)
2

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de assertj/assertj-generator

Todos los issues de assertj/assertj-generator

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.