diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index a0c1e404ca..af8a43094c 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -12,9 +12,9 @@ jobs: steps: - uses: actions/checkout@v1 - - name: Set up JDK 1.8 + - name: Set up Java 11 uses: actions/setup-java@v1 with: - java-version: 1.8 + java-version: '11.0.2' - name: Build with Maven - run: mvn clean verify -PdefaultBuild -P!jdk8 + run: ./mvnw clean verify -PdefaultBuild diff --git a/graphql-kotlin-federation/src/main/kotlin/com/expediagroup/graphql/federation/FederatedSchemaGenerator.kt b/graphql-kotlin-federation/src/main/kotlin/com/expediagroup/graphql/federation/FederatedSchemaGenerator.kt index c16f74dfc1..7231af3dbf 100644 --- a/graphql-kotlin-federation/src/main/kotlin/com/expediagroup/graphql/federation/FederatedSchemaGenerator.kt +++ b/graphql-kotlin-federation/src/main/kotlin/com/expediagroup/graphql/federation/FederatedSchemaGenerator.kt @@ -61,6 +61,9 @@ open class FederatedSchemaGenerator(generatorConfig: FederatedSchemaGeneratorCon .forEach { this.additionalType(it) } + + scanResult.close() + return this } } diff --git a/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/SchemaGenerator.kt b/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/SchemaGenerator.kt index 8540b2f79b..275abaa13a 100644 --- a/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/SchemaGenerator.kt +++ b/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/SchemaGenerator.kt @@ -86,7 +86,13 @@ open class SchemaGenerator(val config: SchemaGeneratorConfig) { builder.additionalDirectives(state.directives.values.toSet()) builder.codeRegistry(codeRegistry.build()) - return config.hooks.willBuildSchema(builder).build() + + val schema = config.hooks.willBuildSchema(builder).build() + + // Clean up the classpath scanner + subTypeMapper.close() + + return schema } open fun function(fn: KFunction<*>, parentName: String, target: Any? = null, abstract: Boolean = false) = diff --git a/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/SubTypeMapper.kt b/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/SubTypeMapper.kt index 78828dc34d..3b86d86a54 100644 --- a/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/SubTypeMapper.kt +++ b/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/SubTypeMapper.kt @@ -39,6 +39,8 @@ internal class SubTypeMapper(supportedPackages: List) { .filterNot { it.isAbstract } } + fun close() = scanResult.close() + @Suppress("Detekt.SwallowedException") private fun getImplementingClasses(classInfo: ClassInfo) = try { diff --git a/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/state/TypesCache.kt b/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/state/TypesCache.kt index 0dbb1320eb..dc2b23c6b8 100644 --- a/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/state/TypesCache.kt +++ b/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/state/TypesCache.kt @@ -62,6 +62,11 @@ internal class TypesCache(private val supportedPackages: List) { return null } + /** + * Clear the map of all saved values + */ + internal fun clear() = cache.clear() + fun doesNotContainGraphQLType(graphQLType: GraphQLType) = cache.none { (_, v) -> v.graphQLType.name == graphQLType.name } diff --git a/graphql-kotlin-schema-generator/src/test/kotlin/com/expediagroup/graphql/generator/types/TypeTestHelper.kt b/graphql-kotlin-schema-generator/src/test/kotlin/com/expediagroup/graphql/generator/types/TypeTestHelper.kt index 88a5999439..6b91e50406 100644 --- a/graphql-kotlin-schema-generator/src/test/kotlin/com/expediagroup/graphql/generator/types/TypeTestHelper.kt +++ b/graphql-kotlin-schema-generator/src/test/kotlin/com/expediagroup/graphql/generator/types/TypeTestHelper.kt @@ -30,6 +30,10 @@ import graphql.schema.GraphQLCodeRegistry import io.mockk.every import io.mockk.mockk import io.mockk.spyk +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.TestInstance.Lifecycle import java.lang.reflect.Field import kotlin.reflect.KAnnotatedElement import kotlin.reflect.KClass @@ -37,18 +41,18 @@ import kotlin.reflect.KFunction import kotlin.reflect.KParameter import kotlin.reflect.KProperty import kotlin.reflect.KType -import kotlin.test.BeforeTest @Suppress( "Detekt.UnsafeCast", "Detekt.UnsafeCallOnNullableType", "Detekt.LongMethod" ) +@TestInstance(Lifecycle.PER_CLASS) internal open class TypeTestHelper { + private val subTypeMapper = SubTypeMapper(listOf("com.expediagroup.graphql")) var generator = mockk() var config = mockk() var state = spyk(SchemaGeneratorState(listOf("com.expediagroup.graphql"))) - var subTypeMapper = spyk(SubTypeMapper(listOf("com.expediagroup.graphql"))) var cache = spyk(TypesCache(listOf("com.expediagroup.graphql"))) val spyWiringFactory = spyk(KotlinDirectiveWiringFactory()) var hooks: SchemaGeneratorHooks = object : SchemaGeneratorHooks { @@ -69,10 +73,12 @@ internal open class TypeTestHelper { private var argumentBuilder: ArgumentBuilder? = null private var inputObjectBuilder: InputObjectBuilder? = null - @BeforeTest + @BeforeEach fun setup() { beforeSetup() + cache.clear() + every { generator.state } returns state every { state.cache } returns cache every { generator.config } returns config @@ -157,6 +163,11 @@ internal open class TypeTestHelper { beforeTest() } + @AfterAll + fun cleanup() { + subTypeMapper.close() + } + open fun beforeTest() {} open fun beforeSetup() {}