class VariantImpl implements Variant, Serializable {

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        VariantImpl variant = (VariantImpl) o;
        return Objects.equals(name, variant.name)
                && Objects.equals(displayName, variant.displayName)
                && Objects.equals(buildTypeName, variant.buildTypeName)
                && Objects.equals(productFlavorNames, variant.productFlavorNames)
                && Objects.equals(mergedFlavor, variant.mergedFlavor)
                && Objects.equals(mainArtifactInfo, variant.mainArtifactInfo)
                && Objects.equals(extraAndroidArtifacts, variant.extraAndroidArtifacts)
                && Objects.equals(extraJavaArtifacts, variant.extraJavaArtifacts)
                && Objects.equals(testedTargetVariants, variant.testedTargetVariants)
                && Objects.equals(instantAppCompatible, variant.instantAppCompatible);
    }

      VariantImpl(
            @NonNull String name,
            @NonNull String displayName,
            @NonNull String buildTypeName,
            @NonNull List<String> productFlavorNames,
            @NonNull ProductFlavorImpl mergedFlavor,
            @NonNull AndroidArtifact mainArtifactInfo,
            @NonNull Collection<AndroidArtifact> extraAndroidArtifacts,
            @NonNull Collection<JavaArtifact> extraJavaArtifacts,
            @NonNull Collection<TestedTargetVariant> testedTargetVariants,
            boolean instantAppCompatible);

}