Подтвердить что ты не робот

Android Studio 3.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 из них. Любые мысли о том, как исправить это?

4b9b3361

Ответ 1

Это очень похоже на ошибку, которая была исправлена ​​не так давно. Соответствующие изменения не были включены в плагин Kotlin в комплекте с предварительным просмотром As3.0. Но они будут доступны в следующем обновлении плагина.

Ответ 2

Похоже, что это может быть ошибка - мне удалось воссоздать проблему в IntelliJ и создал этот отчет об ошибке: https://youtrack.jetbrains.com/issue/KT-18205

Ответ 3

Поздно поздно, чтобы присоединиться к вечеринке, но, во всяком случае. Kotlin - относительно новый язык (с точки зрения его официального для Android, чуть ли не месяц назад), поэтому разработка идет полным ходом на JetBrains. И версия Android Studio (3.0) не является стабильной версией, поэтому вот все известные проблемы Kotlin с Android Studio. Проверьте эти проблемы здесь.

Там четко сказано:

Некоторые рефакторинги недоступны с помощью Kotlin

Не все рефакторинги кода работают с Kotlin, особенно для Android. Например, рефакторинг кода для модуляции Kotlin cude в настоящее время не работает с Kotlin.

Java-совместимая Android Studio не знакома с встроенными функциями Kotlin. Так как это новое включение в Kotlin, он делает код более читаемым (правда?), Но не настолько программным, как таковой.

Сказав, что, прямо сейчас вряд ли есть источник (проверил несколько, другие приветствуются) подтверждение того, что ваша проблема является проблемой или улучшение Котлин над Java (опять-таки весьма спорно), так как inline -ную предназначалось для улучшения функциональности.

Теперь, это время, когда эта функция адресована тегом официальный.

Ответ 4

Кажется, что этот "рефакторинг" происходит после перемещения файла и обновления пакета.

В качестве обходного пути до исправления ошибки IDE/Plugin вы можете сделать следующее:

После перемещения файла (рефакторинг) щелкните файл правой кнопкой мыши,

  • Выберите Local History → Показать историю
  • Выберите предыдущую версию, в которой удалены все импортные
  • Выберите возврат

Удостоверьтесь, что вы дважды проверяете результат, знаете, что у вас должна быть правильная версия с переводом/рефакторингом.


Иногда это не работает, но вы можете попытаться отменить (Move) и переместить его снова.

Протестировано на AS 3.0 Canary 3