每当我尝试在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多个。关于如何解决这个问题的任何想法?
答案 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错误得到修复,您可以执行以下操作:
移动文件(重构)后,右键单击文件
确保仔细检查结果,你知道应该有正确移动/重构的版本。
偶尔这似乎不起作用,但您可以尝试撤消(移动)并再次移动它。
在AS 3.0 Canary 3
上测试