class KotlinProjectGenerationDefaultContributorsConfiguration {

	@Bean
	TestApplicationTypeCustomizer<KotlinTypeDeclaration> junitJupiterTestMethodContributor() {<FILL_FUNCTION_BODY>}

	@Bean
	BuildCustomizer<Build> kotlinDependenciesConfigurer() {
		return new KotlinDependenciesConfigurer();
	}

	@Bean
	@ConditionalOnBuildSystem(GradleBuildSystem.ID)
	KotlinJpaGradleBuildCustomizer kotlinJpaGradleBuildCustomizer(InitializrMetadata metadata,
			KotlinProjectSettings settings) {
		return new KotlinJpaGradleBuildCustomizer(metadata, settings);
	}

	@Bean
	@ConditionalOnBuildSystem(MavenBuildSystem.ID)
	KotlinJpaMavenBuildCustomizer kotlinJpaMavenBuildCustomizer(InitializrMetadata metadata) {
		return new KotlinJpaMavenBuildCustomizer(metadata);
	}

	/**
	 * Configuration for Kotlin projects using Spring Boot 2.0 and later.
	 */
	@Configuration
	@ConditionalOnPlatformVersion("2.0.0.M1")
	static class SpringBoot2AndLaterKotlinProjectGenerationConfiguration {

		@Bean
		@ConditionalOnBuildSystem(MavenBuildSystem.ID)
		KotlinMavenBuildCustomizer kotlinBuildCustomizer(KotlinProjectSettings kotlinProjectSettings) {
			return new KotlinMavenBuildCustomizer(kotlinProjectSettings);
		}

		@Bean
		MainCompilationUnitCustomizer<KotlinTypeDeclaration, KotlinCompilationUnit> mainFunctionContributor(
				ProjectDescription description) {
			return (compilationUnit) -> compilationUnit.addTopLevelFunction(KotlinFunctionDeclaration.function("main")
				.parameters(Parameter.of("args", "Array<String>"))
				.body(CodeBlock.ofStatement("$T<$L>(*args)", "org.springframework.boot.runApplication",
						description.getApplicationName())));
		}

	}

	/**
	 * Kotlin source code contributions for projects using war packaging.
	 */
	@Configuration
	@ConditionalOnPackaging(WarPackaging.ID)
	static class WarPackagingConfiguration {

		@Bean
		ServletInitializerCustomizer<KotlinTypeDeclaration> javaServletInitializerCustomizer(
				ProjectDescription description) {
			return (typeDeclaration) -> {
				KotlinFunctionDeclaration configure = KotlinFunctionDeclaration.function("configure")
					.modifiers(KotlinModifier.OVERRIDE)
					.returning("org.springframework.boot.builder.SpringApplicationBuilder")
					.parameters(
							Parameter.of("application", "org.springframework.boot.builder.SpringApplicationBuilder"))
					.body(CodeBlock.ofStatement("return application.sources($L::class.java)",
							description.getApplicationName()));
				typeDeclaration.addFunctionDeclaration(configure);
			};
		}

	}

	/**
	 * Configuration for Kotlin projects built with Gradle (Groovy DSL).
	 *
	 * @author Andy Wilkinson
	 */
	@Configuration
	@ConditionalOnBuildSystem(id = GradleBuildSystem.ID, dialect = GradleBuildSystem.DIALECT_GROOVY)
	static class KotlinGradleProjectConfiguration {

		@Bean
		KotlinGradleBuildCustomizer kotlinBuildCustomizer(KotlinProjectSettings kotlinProjectSettings) {
			return new GroovyDslKotlinGradleBuildCustomizer(kotlinProjectSettings);
		}

	}

	/**
	 * Configuration for Kotlin projects built with Gradle (Kotlin DSL).
	 *
	 * @author Jean-Baptiste Nizet
	 */
	@Configuration
	@ConditionalOnBuildSystem(id = GradleBuildSystem.ID, dialect = GradleBuildSystem.DIALECT_KOTLIN)
	static class KotlinGradleKtsProjectConfiguration {

		@Bean
		KotlinDslKotlinGradleBuildCustomizer kotlinBuildCustomizer(KotlinProjectSettings kotlinProjectSettings) {
			return new KotlinDslKotlinGradleBuildCustomizer(kotlinProjectSettings);
		}

	}

}

		return (typeDeclaration) -> {
			KotlinFunctionDeclaration function = KotlinFunctionDeclaration.function("contextLoads")
				.body(CodeBlock.of(""));
			function.annotations().add(ClassName.of("org.junit.jupiter.api.Test"));
			typeDeclaration.addFunctionDeclaration(function);
		};
	
<no_super_class>