Android Studio 3.0 Preview重构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 } 

在这里输入图像描述

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

这与前不久修复的bug非常相似。 尚未将相关更改纳入捆绑在As3.0预览版中的Kotlin插件中。 但是他们将在下一个插件更新中可用。

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

Tad迟到了,但是无论如何。 Kotlin是一个相对较新的语言(几乎在一个月前,Android是官方的),所以JetBrains的开发工作正在全速进行。 而且,Android Studio版本(3.0)不是一个稳定版本,所以这里是Android Studio的Kotlin的所有已知问题。 在这里检查这些问题。

在那里它清楚地说:

Kotlin没有提供一些重构

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

Java友好的Android Studio不熟悉Kotlin的内联功能。 既然,这是Kotlin中的一个新的包含,它使得代码更具可读性(真的?),但本身并不是程序员友好的

话虽如此,但现在几乎没有任何资料来源(检查了一些,其他人也受到欢迎),确认您的问题是Java 问题还是Kotlin相对于Java的改进(同样值得商榷),因为Inline -ing意味着是一种改进的功能。

现在,这个功能是用官方标签发布的。

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

作为解决方案,直到IDE /插件错误得到解决,您可以执行以下操作:

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

  1. 选择本地历史→显示历史
  2. 选择删除所有导入的先前版本
  3. 选择恢复

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


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

在AS 3.0 Canary 3上测试