【问题标题】:Android Studio 3.0 Preview Missing Imports when refactoring Kotlin code重构 Kotlin 代码时,Android Studio 3.0 Preview Missing Imports
【发布时间】:2017-10-23 08:08:55
【问题描述】:

每当我尝试在 Android Studio 3.0 上重构 Koltin 代码时,它只会删除我所有的“顶级”导入并开始使用“就地”导入。

我的意思是重构,在这种情况下,移动代码。所以假设我在 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
}

如果我必须再次重构代码,情况会变得更糟,因为每个导入都是“内联”的,android studio 不会重构它们,我必须手动修复它们。这已经很烦人了,因为我必须修复其中的 100 多个。有关如何解决此问题的任何想法?

【问题讨论】:

  • “重构”到底是什么意思?您使用了哪种特定的重构?
  • 更新问题
  • 为了确保一切都清楚,我添加了刚刚发生的事情的图像
  • 只需删除每个访问类的包引用(即突出显示黄色)。您应该自动获得顶级导入。
  • 看起来您应该报告错误,而不是提出问题。您是否将此问题报告给问题跟踪器(可能是 Jetbrains YouTrack)?

标签: android android-studio kotlin


【解决方案1】:

这与不久前修复的错误非常相似。与 As3.0 预览捆绑的 Kotlin 插件尚未包含相关更改。但它们将在下一次插件更新中可用。

【讨论】:

  • Aleksei 在他的个人资料中有“JetBrains 的 Kotlin 开发人员”:)
  • 嗯,它没有修复,因为我在最新版本中仍然存在这个确切的问题:/
【解决方案2】:

加入聚会有点晚了,但是,无论如何。 Kotlin 是一种相对较新的语言(就它成为 Android 的官方语言而言,还不到一个月),因此 JetBrains 的开发正在全速进行。而且,Android Studio 版本(3.0)不是一个稳定的版本,所以这里是 Kotlin 与 Android Studio 的所有已知问题。检查这些问题here

上面写得很清楚:

Kotlin 不提供一些重构

并非所有代码重构都适用于 Kotlin,尤其是适用于 Android 的代码重构。例如,将 Kotlin cude 模块化的代码重构目前不适用于 Kotlin。

Java 友好的 Android Studio 不熟悉 Kotlin 的内联功能。由于这是 Kotlin 中的一个新内容,它使代码更具可读性(真的吗?),但对程序员来说并不那么友好

话虽如此,现在几乎没有任何来源(检查一些,欢迎其他人)确认您的问题是一个问题或 Kotlin 对 Java 的改进(再次备受争议),因为inline-ing 旨在改进功能。

现在,是时候为这个功能添加一个官方标签了。

【讨论】:

    【解决方案3】:

    看起来这可能是一个错误 - 我设法在 IntelliJ 中重新创建了这个问题并创建了这个错误报告:https://youtrack.jetbrains.com/issue/KT-18205

    【讨论】:

    • Kotlin 插件 1.1.3 版本已修复此问题。
    • 不,我仍然在1.1.3-2上体验到这一点
    • @PärNilsAmsen 我自己刚刚尝试过,YouTrack 票证中的问题已在 Kotlin 插件 1.1.3-release-IJ2017.2-2 中修复。我使用 IntelliJ,所以我不确定修复程序何时会进入 Android Studio。也许您遇到的问题略有不同(您是否尝试过票证中的步骤)?你有一些步骤来重现它吗?
    【解决方案4】:

    似乎这种“重构”发生在文件被移动和包更新之后。

    在 IDE/插件错误得到修复之前,作为一种解决方法,您可以执行以下操作:

    移动文件(重构)后,右键单击文件,

    1. 选择本地历史 → 显示历史
    2. 选择删除所有导入的上一个修订版
    3. 选择还原

    确保仔细检查结果,您知道应该有正确移动/重构的版本。


    有时这似乎不起作用,但您可以尝试撤消(移动)并再次移动它。

    在 AS 3.0 Canary 3 上测试

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 1970-01-01
      • 2017-11-05
      • 2020-09-30
      • 2017-12-16
      • 2017-11-11
      • 2018-05-01
      • 2017-10-28
      • 1970-01-01
      相关资源
      最近更新 更多