Intentions: Implement intention which rename file according to the top-level class name
#KT-15068 Fixed
This commit is contained in:
@@ -464,6 +464,16 @@ These artifacts include extensions for the types available in the latter JDKs, s
|
|||||||
+ [`KT-12389`](https://youtrack.jetbrains.com/issue/KT-12389) Do not exit from REPL when toString() of user class throws an exception
|
+ [`KT-12389`](https://youtrack.jetbrains.com/issue/KT-12389) Do not exit from REPL when toString() of user class throws an exception
|
||||||
+ [`KT-12129`](https://youtrack.jetbrains.com/issue/KT-12129) Fixed link on api reference page in KDoc
|
+ [`KT-12129`](https://youtrack.jetbrains.com/issue/KT-12129) Fixed link on api reference page in KDoc
|
||||||
|
|
||||||
|
## 1.0.7
|
||||||
|
|
||||||
|
### IDE
|
||||||
|
|
||||||
|
#### Intention actions, inspections and quickfixes
|
||||||
|
|
||||||
|
##### New features
|
||||||
|
|
||||||
|
- [`KT-15068`](https://youtrack.jetbrains.com/issue/KT-15068) Implement intention which rename file according to the top-level class name
|
||||||
|
|
||||||
## 1.0.6
|
## 1.0.6
|
||||||
|
|
||||||
### IDE
|
### IDE
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
// Foo.kt
|
||||||
|
|
||||||
|
class <spot>Foo</spot> {
|
||||||
|
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
// bar.kt
|
||||||
|
|
||||||
|
class <spot>Foo</spot> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
This intention renames file according to the top-level class name.
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1479,6 +1479,11 @@
|
|||||||
<category>Kotlin</category>
|
<category>Kotlin</category>
|
||||||
</intentionAction>
|
</intentionAction>
|
||||||
|
|
||||||
|
<intentionAction>
|
||||||
|
<className>org.jetbrains.kotlin.idea.intentions.RenameFileToMatchClassIntention</className>
|
||||||
|
<category>Kotlin</category>
|
||||||
|
</intentionAction>
|
||||||
|
|
||||||
<localInspection implementationClass="org.jetbrains.kotlin.idea.intentions.ObjectLiteralToLambdaInspection"
|
<localInspection implementationClass="org.jetbrains.kotlin.idea.intentions.ObjectLiteralToLambdaInspection"
|
||||||
displayName="Object literal can be converted to lambda"
|
displayName="Object literal can be converted to lambda"
|
||||||
groupName="Kotlin"
|
groupName="Kotlin"
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2016 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.idea.intentions
|
||||||
|
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.intellij.openapi.util.TextRange
|
||||||
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
|
import com.intellij.openapi.util.io.FileUtilRt
|
||||||
|
import com.intellij.refactoring.RefactoringSettings
|
||||||
|
import com.intellij.refactoring.rename.RenameProcessor
|
||||||
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
|
|
||||||
|
class RenameFileToMatchClassIntention : SelfTargetingRangeIntention<KtClassOrObject>(KtClassOrObject::class.java, "", "Rename file to match top-level class name") {
|
||||||
|
override fun applicabilityRange(element: KtClassOrObject): TextRange? {
|
||||||
|
if (!element.isTopLevel()) return null
|
||||||
|
val fileName = element.containingKtFile.name
|
||||||
|
if (FileUtil.getNameWithoutExtension(fileName) == element.name) return null
|
||||||
|
text = "Rename file to ${element.name}.${FileUtilRt.getExtension(fileName)}"
|
||||||
|
return element.nameIdentifier?.textRange
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun startInWriteAction() = false
|
||||||
|
|
||||||
|
override fun applyTo(element: KtClassOrObject, editor: Editor?) {
|
||||||
|
val file = element.containingKtFile
|
||||||
|
val extension = FileUtilRt.getExtension(file.name)
|
||||||
|
RenameProcessor(
|
||||||
|
file.project,
|
||||||
|
file,
|
||||||
|
"${element.name}.$extension",
|
||||||
|
RefactoringSettings.getInstance().RENAME_SEARCH_IN_COMMENTS_FOR_FILE,
|
||||||
|
RefactoringSettings.getInstance().RENAME_SEARCH_FOR_TEXT_FOR_FILE).run()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
// "Create subclass" "false"
|
// "Create subclass" "false"
|
||||||
|
// ACTION: Rename file to My.kt
|
||||||
|
|
||||||
annotation class <caret>My(val x: Int)
|
annotation class <caret>My(val x: Int)
|
||||||
|
|
||||||
|
|||||||
+1
@@ -1,6 +1,7 @@
|
|||||||
// "Create subclass" "false"
|
// "Create subclass" "false"
|
||||||
// ACTION: Create test
|
// ACTION: Create test
|
||||||
// ACTION: Convert to sealed class
|
// ACTION: Convert to sealed class
|
||||||
|
// ACTION: Rename file to My.kt
|
||||||
|
|
||||||
enum class <caret>My {
|
enum class <caret>My {
|
||||||
SINGLE {
|
SINGLE {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
// "Create subclass" "false"
|
// "Create subclass" "false"
|
||||||
// ACTION: Create test
|
// ACTION: Create test
|
||||||
|
// ACTION: Rename file to Base.kt
|
||||||
|
|
||||||
class <caret>Base
|
class <caret>Base
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
// ACTION: Create test
|
// ACTION: Create test
|
||||||
// ACTION: Implement members
|
// ACTION: Implement members
|
||||||
// ACTION: Move 'Some' to separate file
|
// ACTION: Move 'Some' to separate file
|
||||||
|
// ACTION: Rename file to Some.kt
|
||||||
// ERROR: Object 'Some' must be declared abstract or implement abstract member public abstract fun foo(): Unit defined in T
|
// ERROR: Object 'Some' must be declared abstract or implement abstract member public abstract fun foo(): Unit defined in T
|
||||||
interface T {
|
interface T {
|
||||||
fun foo()
|
fun foo()
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
// "Safe delete 'MyEnum'" "false"
|
// "Safe delete 'MyEnum'" "false"
|
||||||
// ACTION: Create test
|
// ACTION: Create test
|
||||||
// ACTION: Convert to sealed class
|
// ACTION: Convert to sealed class
|
||||||
|
// ACTION: Rename file to MyEnum.kt
|
||||||
|
|
||||||
import MyEnum.values
|
import MyEnum.values
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
// "Safe delete 'MyObj'" "false"
|
// "Safe delete 'MyObj'" "false"
|
||||||
// ACTION: Create test
|
// ACTION: Create test
|
||||||
|
// ACTION: Rename file to MyObj.kt
|
||||||
|
|
||||||
import MyObj.foo
|
import MyObj.foo
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
// "Safe delete 'Imported'" "false"
|
// "Safe delete 'Imported'" "false"
|
||||||
// ACTION: Create test
|
// ACTION: Create test
|
||||||
// ACTION: Move 'ImportedClass' to separate file
|
// ACTION: Move 'ImportedClass' to separate file
|
||||||
|
// ACTION: Rename file to ImportedClass.kt
|
||||||
import ImportedClass as ClassAlias
|
import ImportedClass as ClassAlias
|
||||||
|
|
||||||
class <caret>ImportedClass
|
class <caret>ImportedClass
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
// "Safe delete 'Imported'" "false"
|
// "Safe delete 'Imported'" "false"
|
||||||
// ACTION: Create test
|
// ACTION: Create test
|
||||||
// ACTION: Move 'Imported' to separate file
|
// ACTION: Move 'Imported' to separate file
|
||||||
|
// ACTION: Rename file to Imported.kt
|
||||||
import Imported as Alias
|
import Imported as Alias
|
||||||
|
|
||||||
object <caret>Imported
|
object <caret>Imported
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
// "Safe delete 'Imported'" "false"
|
// "Safe delete 'Imported'" "false"
|
||||||
// ACTION: Create test
|
// ACTION: Create test
|
||||||
|
// ACTION: Rename file to Imported.kt
|
||||||
object <caret>Imported
|
object <caret>Imported
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
// "Suppress for declarations annotated by 'java.lang.SuppressWarnings'" "false"
|
// "Suppress for declarations annotated by 'java.lang.SuppressWarnings'" "false"
|
||||||
// ACTION: Safe delete 'Unused'
|
// ACTION: Safe delete 'Unused'
|
||||||
// ACTION: Create test
|
// ACTION: Create test
|
||||||
|
// ACTION: Rename file to Unused.kt
|
||||||
@java.lang.SuppressWarnings("")
|
@java.lang.SuppressWarnings("")
|
||||||
class <caret>Unused
|
class <caret>Unused
|
||||||
|
|||||||
Reference in New Issue
Block a user