"Expecting a top level declaration" after Kotlin upgrade

Hello there! :slight_smile:

I wrote some code for Kotlin 1.1.51 and it worked.

Basically the code implements a sample Kotlin RESTful service with Spring and Swagger2 in it. The working code can be seen at https://git.bitwell.fi/projects/SAM/repos/kotlin-spring-restful-webservice/browse

I cloned it out for maintenance, updated all deps to latest, including Kotlin to 1.2.30, and that does not build any more.

The failing file is as follows:

package fi.bitwell.poundam.service

import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import springfox.documentation.builders.PathSelectors
import springfox.documentation.builders.RequestHandlerSelectors
import springfox.documentation.spi.DocumentationType
import springfox.documentation.spring.web.plugins.Docket
import springfox.documentation.swagger2.annotations.EnableSwagger2

open class SwaggerConfig {
	open fun api(): Docket = Docket(DocumentationType.SWAGGER_2)

Kotlin compiler says that "expecting a top level declaration. But if I move that fun to top level the @Bean annotation or some other annotation is told to encompatible with a top level fun.

I’m clueless now what is wrong with that. Any ideas?

I don’t see anything why this could shouldn’t work (especially if it did work on 1.1.51). First try to make sure you do a clean compile. After that, what line is the compiler complaining about?

There is a closing curly-brace in there that should not be there :slight_smile:


Indeed, m_thread! Thanks for the good catch!

Kotlin Compiler is funny at times, as error messages are really frustrating sometimes, while it indeed pointed at the last curly.

I’m watching the code now at a different compiler which has the old version Kotlin, and no error was visible but I could catch that immediately with your help!

Trying to upgrade Kotlin again with that computer and see how it goes.