Move: Implement inspection which reports mismatch between package directive and containing directory
This commit is contained in:
@@ -41,6 +41,7 @@ import com.intellij.psi.PsiWhiteSpace
|
|||||||
import com.intellij.psi.PsiComment
|
import com.intellij.psi.PsiComment
|
||||||
import org.jetbrains.kotlin.resolve.calls.CallTransformer.CallForImplicitInvoke
|
import org.jetbrains.kotlin.resolve.calls.CallTransformer.CallForImplicitInvoke
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
public fun JetCallElement.getCallNameExpression(): JetSimpleNameExpression? {
|
public fun JetCallElement.getCallNameExpression(): JetSimpleNameExpression? {
|
||||||
val calleeExpression = getCalleeExpression()
|
val calleeExpression = getCalleeExpression()
|
||||||
@@ -534,3 +535,10 @@ inline fun <reified T : JetElement, R> flatMapDescendantsOfTypeVisitor(
|
|||||||
|
|
||||||
inline fun <reified T : JetElement> PsiElement.forEachDescendantsOfType(noinline block: (T) -> Unit) =
|
inline fun <reified T : JetElement> PsiElement.forEachDescendantsOfType(noinline block: (T) -> Unit) =
|
||||||
accept(forEachDescendantOfTypeVisitor(block))
|
accept(forEachDescendantOfTypeVisitor(block))
|
||||||
|
|
||||||
|
public fun PsiFile.getFqNameByDirectory(): FqName {
|
||||||
|
val qualifiedNameByDirectory = getParent()?.getPackage()?.getQualifiedName()
|
||||||
|
return qualifiedNameByDirectory?.let { FqName(it) } ?: FqName.ROOT
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun JetFile.packageMatchesDirectory(): Boolean = getPackageFqName() == getFqNameByDirectory()
|
||||||
+20
-16
@@ -25,38 +25,42 @@ import com.intellij.psi.PsiElement
|
|||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention
|
import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention
|
||||||
import org.jetbrains.kotlin.psi.JetElement
|
import org.jetbrains.kotlin.psi.JetElement
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
public abstract class IntentionBasedInspection<T: JetElement>(
|
public abstract class IntentionBasedInspection<T: JetElement>(
|
||||||
protected val intention: JetSelfTargetingOffsetIndependentIntention<T>
|
protected val intentions: List<JetSelfTargetingOffsetIndependentIntention<T>>,
|
||||||
|
protected val elementType: Class<T>
|
||||||
) : AbstractKotlinInspection() {
|
) : AbstractKotlinInspection() {
|
||||||
|
constructor(intention: JetSelfTargetingOffsetIndependentIntention<T>): this(listOf(intention), intention.elementType)
|
||||||
|
|
||||||
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor {
|
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor {
|
||||||
return object: PsiElementVisitor() {
|
return object: PsiElementVisitor() {
|
||||||
override fun visitElement(element: PsiElement) {
|
override fun visitElement(element: PsiElement) {
|
||||||
if (!intention.elementType.isInstance(element)) return
|
if (!elementType.isInstance(element) || element.getTextLength() == 0) return
|
||||||
|
|
||||||
[suppress("UNCHECKED_CAST")]
|
[suppress("UNCHECKED_CAST")]
|
||||||
val targetElement = element as T
|
val targetElement = element as T
|
||||||
|
|
||||||
if (!intention.isApplicableTo(targetElement)) return
|
for (intention in intentions) {
|
||||||
|
if (!intention.isApplicableTo(targetElement)) continue
|
||||||
|
|
||||||
val fix = object: LocalQuickFix {
|
val fix = object: LocalQuickFix {
|
||||||
override fun getFamilyName(): String {
|
private val text = intention.getText()
|
||||||
return getName()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getName(): String {
|
override fun getFamilyName() = getName()
|
||||||
return intention.getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
|
override fun getName() = text
|
||||||
targetElement.getOrCreateEditor()?.let { editor ->
|
|
||||||
editor.getCaretModel().moveToOffset(targetElement.getTextOffset())
|
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
|
||||||
intention.applyTo(targetElement, editor)
|
targetElement.getOrCreateEditor()?.let { editor ->
|
||||||
|
editor.getCaretModel().moveToOffset(targetElement.getTextOffset())
|
||||||
|
intention.applyTo(targetElement, editor)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
holder.registerProblem(targetElement, intention.getText(), problemHighlightType, fix)
|
holder.registerProblem(targetElement, intention.getText(), problemHighlightType, fix)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
Reports file's package directive not matching location of the file
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
// File: bar/foo/test.kt
|
||||||
|
<spot>package bar.foo</spot>
|
||||||
|
|
||||||
|
class MyClass: OtherClass {
|
||||||
|
fun myFun() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
// File: bar/foo/test.kt
|
||||||
|
<spot>package foo.bar</spot>
|
||||||
|
|
||||||
|
import bar.foo.OtherClass
|
||||||
|
|
||||||
|
class MyClass: OtherClass {
|
||||||
|
fun myFun() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
This intention changes file's package directive so that it matches containing directory.
|
||||||
|
All import directives and usages are updated accordingly
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
// File: foo/bar/test.kt
|
||||||
|
<spot>package foo.bar</spot>
|
||||||
|
|
||||||
|
import bar.foo.OtherClass
|
||||||
|
|
||||||
|
class MyClass: OtherClass {
|
||||||
|
fun myFun() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
// File: bar/foo/test.kt
|
||||||
|
<spot>package foo.bar</spot>
|
||||||
|
|
||||||
|
import bar.foo.OtherClass
|
||||||
|
|
||||||
|
class MyClass: OtherClass {
|
||||||
|
fun myFun() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
This intention moves file to the directory matching its package directive.
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -853,6 +853,16 @@
|
|||||||
<category>Kotlin</category>
|
<category>Kotlin</category>
|
||||||
</intentionAction>
|
</intentionAction>
|
||||||
|
|
||||||
|
<intentionAction>
|
||||||
|
<className>org.jetbrains.kotlin.idea.refactoring.move.changePackage.MoveFileToPackageMatchingDirectoryIntention</className>
|
||||||
|
<category>Kotlin</category>
|
||||||
|
</intentionAction>
|
||||||
|
|
||||||
|
<intentionAction>
|
||||||
|
<className>org.jetbrains.kotlin.idea.refactoring.move.changePackage.ChangePackageToMatchDirectoryIntention</className>
|
||||||
|
<category>Kotlin</category>
|
||||||
|
</intentionAction>
|
||||||
|
|
||||||
<localInspection implementationClass="org.jetbrains.kotlin.idea.inspections.ExplicitGetInspection"
|
<localInspection implementationClass="org.jetbrains.kotlin.idea.inspections.ExplicitGetInspection"
|
||||||
displayName="Explicit 'get'"
|
displayName="Explicit 'get'"
|
||||||
groupName="Kotlin"
|
groupName="Kotlin"
|
||||||
@@ -915,6 +925,14 @@
|
|||||||
enabledByDefault="true"
|
enabledByDefault="true"
|
||||||
level="WARNING"
|
level="WARNING"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<localInspection implementationClass="org.jetbrains.kotlin.idea.refactoring.move.changePackage.PackageDirectoryMismatchInspection"
|
||||||
|
displayName="Package name does not match containing directory"
|
||||||
|
groupName="Kotlin"
|
||||||
|
enabledByDefault="true"
|
||||||
|
level="WARNING"
|
||||||
|
/>
|
||||||
|
|
||||||
<project.converterProvider implementation="org.jetbrains.kotlin.idea.converters.JetRunConfigurationSettingsFormatConverterProvider"/>
|
<project.converterProvider implementation="org.jetbrains.kotlin.idea.converters.JetRunConfigurationSettingsFormatConverterProvider"/>
|
||||||
|
|
||||||
</extensions>
|
</extensions>
|
||||||
|
|||||||
+40
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2015 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.refactoring.move.changePackage
|
||||||
|
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import org.jetbrains.kotlin.idea.core.refactoring.canRefactor
|
||||||
|
import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention
|
||||||
|
import org.jetbrains.kotlin.psi.JetPackageDirective
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getFqNameByDirectory
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.packageMatchesDirectory
|
||||||
|
|
||||||
|
public class ChangePackageToMatchDirectoryIntention : JetSelfTargetingOffsetIndependentIntention<JetPackageDirective>(
|
||||||
|
javaClass(), "", "Change file's package to match directory"
|
||||||
|
) {
|
||||||
|
override fun isApplicableTo(element: JetPackageDirective): Boolean {
|
||||||
|
val file = element.getContainingJetFile()
|
||||||
|
if (file.packageMatchesDirectory()) return false
|
||||||
|
|
||||||
|
setText("Change file's package to '${file.getFqNameByDirectory().asString()}'")
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun applyTo(element: JetPackageDirective, editor: Editor) {
|
||||||
|
KotlinChangePackageRefactoring(element.getContainingJetFile()).run(element.getContainingFile().getFqNameByDirectory())
|
||||||
|
}
|
||||||
|
}
|
||||||
+60
@@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2015 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.refactoring.move.changePackage
|
||||||
|
|
||||||
|
import com.intellij.CommonBundle
|
||||||
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.intellij.openapi.ui.Messages
|
||||||
|
import com.intellij.psi.JavaPsiFacade
|
||||||
|
import com.intellij.refactoring.RefactoringBundle
|
||||||
|
import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesUtil
|
||||||
|
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil
|
||||||
|
import com.intellij.refactoring.util.RefactoringMessageUtil
|
||||||
|
import org.jetbrains.kotlin.idea.core.refactoring.canRefactor
|
||||||
|
import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention
|
||||||
|
import org.jetbrains.kotlin.psi.JetPackageDirective
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.packageMatchesDirectory
|
||||||
|
|
||||||
|
public class MoveFileToPackageMatchingDirectoryIntention : JetSelfTargetingOffsetIndependentIntention<JetPackageDirective>(
|
||||||
|
javaClass(), "", "Move file to package-matching directory"
|
||||||
|
) {
|
||||||
|
override fun isApplicableTo(element: JetPackageDirective): Boolean {
|
||||||
|
if (element.getContainingJetFile().packageMatchesDirectory()) return false
|
||||||
|
|
||||||
|
val qualifiedName = element.getQualifiedName()
|
||||||
|
val dirName = if (qualifiedName.isEmpty()) "source root" else "'${qualifiedName.replace('.', '/')}'"
|
||||||
|
setText("Move file to $dirName")
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun applyTo(element: JetPackageDirective, editor: Editor) {
|
||||||
|
val file = element.getContainingJetFile()
|
||||||
|
val project = file.getProject()
|
||||||
|
val targetDirectory = MoveClassesOrPackagesUtil.chooseDestinationPackage(
|
||||||
|
project,
|
||||||
|
element.getQualifiedName(),
|
||||||
|
file.getContainingDirectory()
|
||||||
|
) ?: return
|
||||||
|
|
||||||
|
RefactoringMessageUtil.checkCanCreateFile(targetDirectory, file.getName())?.let {
|
||||||
|
Messages.showMessageDialog(project, it, CommonBundle.getErrorTitle(), Messages.getErrorIcon())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
MoveFilesOrDirectoriesUtil.doMoveFile(file, targetDirectory)
|
||||||
|
}
|
||||||
|
}
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2015 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.refactoring.move.changePackage
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection
|
||||||
|
import org.jetbrains.kotlin.psi.JetPackageDirective
|
||||||
|
|
||||||
|
public class PackageDirectoryMismatchInspection: IntentionBasedInspection<JetPackageDirective>(
|
||||||
|
listOf(MoveFileToPackageMatchingDirectoryIntention(), ChangePackageToMatchDirectoryIntention()),
|
||||||
|
javaClass()
|
||||||
|
)
|
||||||
+1
-4
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.name.FqName
|
|||||||
import org.jetbrains.kotlin.psi.JetFile
|
import org.jetbrains.kotlin.psi.JetFile
|
||||||
import org.jetbrains.kotlin.psi.JetNamedDeclaration
|
import org.jetbrains.kotlin.psi.JetNamedDeclaration
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getPackage
|
import org.jetbrains.kotlin.psi.psiUtil.getPackage
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.packageMatchesDirectory
|
||||||
|
|
||||||
public class MoveKotlinFileHandler : MoveFileHandler() {
|
public class MoveKotlinFileHandler : MoveFileHandler() {
|
||||||
private var packageNameInfo: PackageNameInfo? = null
|
private var packageNameInfo: PackageNameInfo? = null
|
||||||
@@ -46,10 +47,6 @@ public class MoveKotlinFileHandler : MoveFileHandler() {
|
|||||||
declarationMoveProcessor = null
|
declarationMoveProcessor = null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun JetFile.packageMatchesDirectory(): Boolean {
|
|
||||||
return getPackageFqName().asString() == getParent()?.getPackage()?.getQualifiedName()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun canProcessElement(element: PsiFile?): Boolean {
|
override fun canProcessElement(element: PsiFile?): Boolean {
|
||||||
if (element is PsiCompiledElement || element !is JetFile) return false
|
if (element is PsiCompiledElement || element !is JetFile) return false
|
||||||
return !JavaProjectRootsUtil.isOutsideJavaSourceRoot(element)
|
return !JavaProjectRootsUtil.isOutsideJavaSourceRoot(element)
|
||||||
|
|||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package bar
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package foo
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<problems>
|
||||||
|
<problem>
|
||||||
|
<file>barPackageMismatched.kt</file>
|
||||||
|
<line>1</line>
|
||||||
|
<module>testPackageDirectoryMismatch_PackageDirectoryMismatch_0</module>
|
||||||
|
<entry_point TYPE="file" FQNAME="barPackageMismatched.kt" />
|
||||||
|
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Package name does not match containing directory</problem_class>
|
||||||
|
<description>Move file to 'bar'</description>
|
||||||
|
</problem>
|
||||||
|
|
||||||
|
<problem>
|
||||||
|
<file>barPackageMismatched.kt</file>
|
||||||
|
<line>1</line>
|
||||||
|
<module>testPackageDirectoryMismatch_PackageDirectoryMismatch_0</module>
|
||||||
|
<entry_point TYPE="file" FQNAME="barPackageMismatched.kt" />
|
||||||
|
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Package name does not match containing directory</problem_class>
|
||||||
|
<description>Change file's package to 'foo'</description>
|
||||||
|
</problem>
|
||||||
|
</problems>
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"inspectionClass": "org.jetbrains.kotlin.idea.refactoring.move.changePackage.PackageDirectoryMismatchInspection"
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
class Foo
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
<caret>package
|
||||||
|
|
||||||
|
class Foo
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"mainFile": "source/test.kt",
|
||||||
|
"intentionClass": "org.jetbrains.kotlin.idea.refactoring.move.changePackage.MoveFileToPackageMatchingDirectoryIntention",
|
||||||
|
"intentionText": "Move file to source root"
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
package target
|
||||||
|
|
||||||
|
class Foo
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
<caret>package target
|
||||||
|
|
||||||
|
class Foo
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"mainFile": "source/test.kt",
|
||||||
|
"intentionClass": "org.jetbrains.kotlin.idea.refactoring.move.changePackage.MoveFileToPackageMatchingDirectoryIntention",
|
||||||
|
"intentionText": "Move file to 'target'"
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
package foo.bar
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
pack<caret>age foo.bar
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"intentionClass": "org.jetbrains.kotlin.idea.refactoring.move.changePackage.MoveFileToPackageMatchingDirectoryIntention",
|
||||||
|
"isApplicable": "false",
|
||||||
|
"mainFile": "foo/bar/test.kt"
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
class Foo
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new Foo();
|
||||||
|
_DefaultPackage.foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
fun test() {
|
||||||
|
Foo()
|
||||||
|
foo()
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
import static _DefaultPackage.foo;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new Foo();
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
import Foo
|
||||||
|
import foo
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
Foo()
|
||||||
|
foo()
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
<caret>package source
|
||||||
|
|
||||||
|
class Foo
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new source.Foo();
|
||||||
|
source.SourcePackage.foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
fun test() {
|
||||||
|
source.Foo()
|
||||||
|
source.foo()
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
import source.Foo;
|
||||||
|
import static source.SourcePackage.foo;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new Foo();
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
import source.Foo
|
||||||
|
import source.foo
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
Foo()
|
||||||
|
foo()
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"mainFile": "test.kt",
|
||||||
|
"intentionClass": "org.jetbrains.kotlin.idea.refactoring.move.changePackage.ChangePackageToMatchDirectoryIntention",
|
||||||
|
"intentionText": "Change file's package to ''"
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
package target
|
||||||
|
|
||||||
|
class Foo
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
package target;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new Foo();
|
||||||
|
TargetPackage.foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
package target
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
Foo()
|
||||||
|
foo()
|
||||||
|
}
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
package target;
|
||||||
|
|
||||||
|
import static target.TargetPackage.foo;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new Foo();
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
package target
|
||||||
|
|
||||||
|
import target.Foo
|
||||||
|
import target.foo
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
Foo()
|
||||||
|
foo()
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
package usages;
|
||||||
|
|
||||||
|
import target.Foo;
|
||||||
|
import target.TargetPackage;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new Foo();
|
||||||
|
TargetPackage.foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
package usages
|
||||||
|
|
||||||
|
import target.Foo
|
||||||
|
import target.foo
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
Foo()
|
||||||
|
foo()
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
package usages;
|
||||||
|
|
||||||
|
import target.Foo;
|
||||||
|
import static target.TargetPackage.foo;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new Foo();
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
package usages
|
||||||
|
|
||||||
|
import target.Foo
|
||||||
|
import target.foo
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
Foo()
|
||||||
|
foo()
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
<caret>package source
|
||||||
|
|
||||||
|
class Foo
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
package target;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new source.Foo();
|
||||||
|
source.SourcePackage.foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
package target
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
source.Foo()
|
||||||
|
source.foo()
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
package target;
|
||||||
|
|
||||||
|
import source.Foo;
|
||||||
|
import static source.SourcePackage.foo;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new Foo();
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
package target
|
||||||
|
|
||||||
|
import source.Foo
|
||||||
|
import source.foo
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
Foo()
|
||||||
|
foo()
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
package usages;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new source.Foo();
|
||||||
|
source.SourcePackage.foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
package usages
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
source.Foo()
|
||||||
|
source.foo()
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
package usages;
|
||||||
|
|
||||||
|
import source.Foo;
|
||||||
|
import static source.SourcePackage.foo;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
static void test() {
|
||||||
|
new Foo();
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
package usages
|
||||||
|
|
||||||
|
import source.Foo
|
||||||
|
import source.foo
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
Foo()
|
||||||
|
foo()
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"mainFile": "target/test.kt",
|
||||||
|
"intentionClass": "org.jetbrains.kotlin.idea.refactoring.move.changePackage.ChangePackageToMatchDirectoryIntention",
|
||||||
|
"intentionText": "Change file's package to 'target'"
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
package foo.bar
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
pack<caret>age foo.bar
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"intentionClass": "org.jetbrains.kotlin.idea.refactoring.move.changePackage.ChangePackageToMatchDirectoryIntention",
|
||||||
|
"isApplicable": "false",
|
||||||
|
"mainFile": "foo/bar/test.kt"
|
||||||
|
}
|
||||||
+6
@@ -34,4 +34,10 @@ public class JetMultiFileInspectionTestGenerated extends AbstractJetMultiFileIns
|
|||||||
public void testAllFilesPresentInMultiFileInspections() throws Exception {
|
public void testAllFilesPresentInMultiFileInspections() throws Exception {
|
||||||
JetTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), new File("idea/testData/multiFileInspections"), Pattern.compile("^(.+)\\.test$"));
|
JetTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), new File("idea/testData/multiFileInspections"), Pattern.compile("^(.+)\\.test$"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("mismatchedProjectAndDirectory/mismatchedProjectAndDirectory.test")
|
||||||
|
public void testMismatchedProjectAndDirectory_MismatchedProjectAndDirectory() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/multiFileInspections/mismatchedProjectAndDirectory/mismatchedProjectAndDirectory.test");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,4 +34,40 @@ public class MultiFileIntentionTestGenerated extends AbstractMultiFileIntentionT
|
|||||||
public void testAllFilesPresentInMultiFileIntentions() throws Exception {
|
public void testAllFilesPresentInMultiFileIntentions() throws Exception {
|
||||||
JetTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), new File("idea/testData/multiFileIntentions"), Pattern.compile("^(.+)\\.test$"));
|
JetTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), new File("idea/testData/multiFileIntentions"), Pattern.compile("^(.+)\\.test$"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("moveFileToPackageMatchingDirectory/moveToDefaultDirectory/moveToDefaultDirectory.test")
|
||||||
|
public void testMoveFileToPackageMatchingDirectory_moveToDefaultDirectory_MoveToDefaultDirectory() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/multiFileIntentions/moveFileToPackageMatchingDirectory/moveToDefaultDirectory/moveToDefaultDirectory.test");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("moveFileToPackageMatchingDirectory/moveToNonDefaultDirectory/moveToNonDefaultDirectory.test")
|
||||||
|
public void testMoveFileToPackageMatchingDirectory_moveToNonDefaultDirectory_MoveToNonDefaultDirectory() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/multiFileIntentions/moveFileToPackageMatchingDirectory/moveToNonDefaultDirectory/moveToNonDefaultDirectory.test");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("moveFileToPackageMatchingDirectory/packageMatchesDirectory/packageMatchesDirectory.test")
|
||||||
|
public void testMoveFileToPackageMatchingDirectory_packageMatchesDirectory_PackageMatchesDirectory() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/multiFileIntentions/moveFileToPackageMatchingDirectory/packageMatchesDirectory/packageMatchesDirectory.test");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("reconcilePackageWithDirectory/changeToDefaultPackage/changeToDefaultPackage.test")
|
||||||
|
public void testReconcilePackageWithDirectory_changeToDefaultPackage_ChangeToDefaultPackage() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/multiFileIntentions/reconcilePackageWithDirectory/changeToDefaultPackage/changeToDefaultPackage.test");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("reconcilePackageWithDirectory/changeToNonDefaultPackage/changeToNonDefaultPackage.test")
|
||||||
|
public void testReconcilePackageWithDirectory_changeToNonDefaultPackage_ChangeToNonDefaultPackage() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/multiFileIntentions/reconcilePackageWithDirectory/changeToNonDefaultPackage/changeToNonDefaultPackage.test");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("reconcilePackageWithDirectory/packageMatchesDirectory/packageMatchesDirectory.test")
|
||||||
|
public void testReconcilePackageWithDirectory_packageMatchesDirectory_PackageMatchesDirectory() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/multiFileIntentions/reconcilePackageWithDirectory/packageMatchesDirectory/packageMatchesDirectory.test");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user