Ответ 1
Это очень похоже на ошибку, которая была исправлена не так давно. Соответствующие изменения не были включены в плагин Kotlin в комплекте с предварительным просмотром As3.0. Но они будут доступны в следующем обновлении плагина.
Всякий раз, когда я пытаюсь реорганизовать код Koltin на Android Studio 3.0, он просто удаляет весь мой импорт "верхнего уровня" и начинает использовать импорт "inplace".
Рефакторинг - это, в данном случае, перемещение кода вокруг. Итак, скажем, у меня есть класс в пакете com.myapp. Если я переведу его на com.myapp.anotherpackage, эта проблема произойдет
Забавный факт об этом выглядит так, как будто это происходит только при одновременном перемещении нескольких файлов
Как выглядит:
//Before refactoring I have this import
import android.support.v7.app.AppCompatActivity;
class MyActivity : AppCompatActivity() {
//code
}
Затем после рефакторинга это выглядит как
//"top level" import is gone
class MyActivity : android.support.v7.app.AppCompatActivity() { //"inline" import
//code
}
Это становится еще хуже, если мне придется повторно преобразовать код, так как каждый отдельный импорт "встроен", а андроид-студия не реорганизует их, и я должен их исправить вручную. Это уже очень раздражает, поскольку мне пришлось исправить более 100 из них. Любые мысли о том, как исправить это?
Это очень похоже на ошибку, которая была исправлена не так давно. Соответствующие изменения не были включены в плагин Kotlin в комплекте с предварительным просмотром As3.0. Но они будут доступны в следующем обновлении плагина.
Похоже, что это может быть ошибка - мне удалось воссоздать проблему в IntelliJ и создал этот отчет об ошибке: https://youtrack.jetbrains.com/issue/KT-18205
Поздно поздно, чтобы присоединиться к вечеринке, но, во всяком случае. Kotlin - относительно новый язык (с точки зрения его официального для Android, чуть ли не месяц назад), поэтому разработка идет полным ходом на JetBrains. И версия Android Studio (3.0) не является стабильной версией, поэтому вот все известные проблемы Kotlin с Android Studio. Проверьте эти проблемы здесь.
Там четко сказано:
Некоторые рефакторинги недоступны с помощью Kotlin
Не все рефакторинги кода работают с Kotlin, особенно для Android. Например, рефакторинг кода для модуляции Kotlin cude в настоящее время не работает с Kotlin.
Java-совместимая Android Studio не знакома с встроенными функциями Kotlin. Так как это новое включение в Kotlin, он делает код более читаемым (правда?), Но не настолько программным, как таковой.
Сказав, что, прямо сейчас вряд ли есть источник (проверил несколько, другие приветствуются) подтверждение того, что ваша проблема является проблемой или улучшение Котлин над Java (опять-таки весьма спорно), так как inline
-ную предназначалось для улучшения функциональности.
Теперь, это время, когда эта функция адресована тегом официальный.
Кажется, что этот "рефакторинг" происходит после перемещения файла и обновления пакета.
В качестве обходного пути до исправления ошибки IDE/Plugin вы можете сделать следующее:
После перемещения файла (рефакторинг) щелкните файл правой кнопкой мыши,
Удостоверьтесь, что вы дважды проверяете результат, знаете, что у вас должна быть правильная версия с переводом/рефакторингом.
Иногда это не работает, но вы можете попытаться отменить (Move) и переместить его снова.
Протестировано на AS 3.0 Canary 3