重构Kotlin代码时,Android Studio 3.0预览缺少导入

时间:2017-05-23 11:34:01

标签: android android-studio kotlin

每当我尝试在Android Studio 3.0上重构Koltin代码时,它只会删除所有“顶级”导入并开始使用“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
}

enter image description here

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

4 个答案:

答案 0 :(得分:2)

这与不久前修复过的bug非常相似。相关更改并未包含在与As3.0预览捆绑在一起的Kotlin插件中。但它们将在下一个插件更新中提供。

答案 1 :(得分:1)

迟到加入派对,但是,无论如何。 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 - 意味着改进了功能。

现在, 官方 标记即将发布此功能

答案 2 :(得分:0)

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

答案 3 :(得分:0)

在移动文件并更新软件包之后,似乎会发生这种“重构”。

作为解决方法,直到IDE / Plugin错误得到修复,您可以执行以下操作:

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

  1. 选择本地历史记录→显示历史记录
  2. 选择删除所有导入的先前修订
  3. 选择还原
  4. 确保仔细检查结果,你知道应该有正确移动/重构的版本。

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

    在AS 3.0 Canary 3

    上测试