Недопустимая декларация метода в здании класса Kotlin Enum с грейфером - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть следующий класс перечисления Kotlin:

enum class DurationModifier {
    GreaterThan {
        override val displayName = "≥"
    },
    LessThan {
        override val displayName = "≤"
    };

    abstract val displayName: String
}

Это было частью моего проекта в течение длительного времени и компилируется просто отлично. Это прекрасно компилируется с использованием IntelliJ или Android Studio, но когда я запускаю сборку gradle вручную из командной строки (./gradlew assembleDebug), я получаю следующее:

e: {projectDir}/build/tmp/kapt3/stubs/{package}/search/DurationModifier.java:17: error: invalid method declaration; return type required
        DurationModifier() {
        ^

Я полностью очистил все, что мог придумать (каталоги сборки, кеш-память и т. Д.).

В последнее время я сделал много изменений, но, поскольку в IDE все работало нормально, я понятия не имею, что могло вызвать это. Что здесь не так? Почему это работает в IDE, а не из командной строки?

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

У меня была похожая ошибка с абстрактной функцией enum. Gradle использовал JDK 11. Переключение на JDK 8 путем добавления записи org.gradle.java.home к gradle.properties (в вашем HOME/.gradle/gradle.properties или в вашем проекте, указанном gradle.properties, решило проблему.

 echo 'org.gradle.java.home=PATH_TO_JDK8' >> ~/.gradle/gradle.properties
0 голосов
/ 14 ноября 2018

Разобрался, что происходит. Android Studio и IntelliJ используют JDK в комплекте (AS 3.2.1 использует 1.8.0_152), поэтому gradle выполнял kapt в этой среде. Однако на моем компьютере Java 11 установлена ​​как Java по умолчанию. Я использую JENV для управления несколькими версиями Java, поэтому я догадываюсь, что я установил локальную версию Java на 1,8, а не на 11. Работает нормально после этого.

Насколько я понимаю, компилятор Kotlin должен испускать 8-байтовый код Java, который должен понимать компилятор Java 11 (я делаю компилятор Kotlin, настроенный для этого в build.gradle), но, очевидно, это не так в этом случае.

Не совсем ответ на , почему это происходит, но это решение.

...