diff --git a/idea/idea-maven/testData/languageFeature/addKotlinReflect/pom.xml.after.182 b/idea/idea-maven/testData/languageFeature/addKotlinReflect/pom.xml.after.182 deleted file mode 100644 index 46a601c7653..00000000000 --- a/idea/idea-maven/testData/languageFeature/addKotlinReflect/pom.xml.after.182 +++ /dev/null @@ -1,62 +0,0 @@ - - - 4.0.0 - - maventest - maventest - 1.0-SNAPSHOT - - $VERSION$ - - - - org.jetbrains.kotlin - kotlin-stdlib-jre8 - ${kotlin.version} - - - org.jetbrains.kotlin - kotlin-test - ${kotlin.version} - test - - - org.jetbrains.kotlin - kotlin-reflect - RELEASE - compile - - - - - ${project.basedir}/src/main/kotlin - - - org.jetbrains.kotlin - kotlin-maven-plugin - ${kotlin.version} - - - compile - compile - - wrong-goal - compile - - - - test-compile - test-compile - - test-compile - - - - - - - - - \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinInTempDirTest.kt.as32 b/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinInTempDirTest.kt.as32 deleted file mode 100644 index 38bd43f41c6..00000000000 --- a/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinInTempDirTest.kt.as32 +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.idea.configuration - -import com.intellij.openapi.util.io.FileUtil -import org.junit.Assert -import java.io.File -import java.nio.file.Path - -abstract class AbstractConfigureKotlinInTempDirTest : AbstractConfigureKotlinTest() { - override fun getProjectDirOrFile(): Path { - val tempDir = FileUtil.generateRandomTemporaryPath() - FileUtil.createTempDirectory("temp", null) - myFilesToDelete.add(tempDir) - - FileUtil.copyDir(File(projectRoot), tempDir) - - val projectRoot = tempDir.path - - val projectFilePath = projectRoot + "/projectFile.ipr" - if (!File(projectFilePath).exists()) { - val dotIdeaPath = projectRoot + "/.idea" - Assert.assertTrue("Project file or '.idea' dir should exists in " + projectRoot, File(dotIdeaPath).exists()) - return File(projectRoot).toPath() - } - - return File(projectFilePath).toPath() - } -} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinTest.kt.as32 b/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinTest.kt.as32 deleted file mode 100644 index 46f2a10fae6..00000000000 --- a/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinTest.kt.as32 +++ /dev/null @@ -1,263 +0,0 @@ -/* - * 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.configuration - -import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.application.PathMacros -import com.intellij.openapi.module.Module -import com.intellij.openapi.module.ModuleManager -import com.intellij.openapi.project.Project -import com.intellij.openapi.projectRoots.ProjectJdkTable -import com.intellij.openapi.projectRoots.Sdk -import com.intellij.openapi.roots.ProjectRootManager -import com.intellij.openapi.util.io.FileUtil -import com.intellij.openapi.util.io.FileUtilRt -import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess -import com.intellij.testFramework.PlatformTestCase -import com.intellij.testFramework.UsefulTestCase -import junit.framework.TestCase -import org.jetbrains.kotlin.idea.configuration.KotlinWithLibraryConfigurator.FileState -import org.jetbrains.kotlin.idea.framework.KotlinSdkType -import org.jetbrains.kotlin.idea.test.PluginTestCaseBase -import org.jetbrains.kotlin.utils.PathUtil -import java.io.File -import java.nio.file.Path - -abstract class AbstractConfigureKotlinTest : PlatformTestCase() { - override fun setUp() { - super.setUp() - - val distPaths = with(PathUtil.kotlinPathsForIdeaPlugin) { - listOf( - stdlibPath, - stdlibSourcesPath, - reflectPath, - kotlinTestPath, - jsKotlinTestJarPath, - jsStdLibJarPath, - jsStdLibSrcJarPath - ) - } - - for (path in distPaths) { - VfsRootAccess.allowRootAccess(testRootDisposable, path.absolutePath) - } - } - - @Throws(Exception::class) - override fun tearDown() { - PathMacros.getInstance().removeMacro(TEMP_DIR_MACRO_KEY) - - super.tearDown() - } - - @Throws(Exception::class) - override fun initApplication() { - super.initApplication() - - KotlinSdkType.setUpIfNeeded() - - ApplicationManager.getApplication().runWriteAction { - ProjectJdkTable.getInstance().addJdk(PluginTestCaseBase.mockJdk6()) - ProjectJdkTable.getInstance().addJdk(PluginTestCaseBase.mockJdk8()) - ProjectJdkTable.getInstance().addJdk(PluginTestCaseBase.mockJdk9()) - } - - PluginTestCaseBase.clearSdkTable(testRootDisposable) - - val tempLibDir = FileUtil.createTempDirectory("temp", null) - PathMacros.getInstance().setMacro(TEMP_DIR_MACRO_KEY, FileUtilRt.toSystemDependentName(tempLibDir.absolutePath)) - } - - protected fun doTestConfigureModulesWithNonDefaultSetup(configurator: KotlinWithLibraryConfigurator) { - assertNoFilesInDefaultPaths() - - val modules = modules - for (module in modules) { - assertNotConfigured(module, configurator) - } - - configurator.configure(myProject, emptyList()) - - assertNoFilesInDefaultPaths() - - for (module in modules) { - assertProperlyConfigured(module, configurator) - } - } - - protected fun doTestOneJavaModule(jarState: FileState) { - doTestOneModule(jarState, JAVA_CONFIGURATOR) - } - - protected fun doTestOneJsModule(jarState: FileState) { - doTestOneModule(jarState, JS_CONFIGURATOR) - } - - private fun doTestOneModule(jarState: FileState, configurator: KotlinWithLibraryConfigurator) { - val module = module - - assertNotConfigured(module, configurator) - configure(module, jarState, configurator) - assertProperlyConfigured(module, configurator) - } - - override fun getModule(): Module { - val modules = ModuleManager.getInstance(myProject).modules - assert(modules.size == 1) { "One module should be loaded " + modules.size } - myModule = modules[0] - return super.getModule() - } - - val modules: Array - get() = ModuleManager.getInstance(myProject).modules - - override fun getProjectDirOrFile(): Path { - val projectFilePath = projectRoot + "/projectFile.ipr" - TestCase.assertTrue("Project file should exists " + projectFilePath, File(projectFilePath).exists()) - return File(projectFilePath).toPath() - } - - override fun doCreateProject(projectFile: Path): Project { - return myProjectManager.loadProject(projectFile.toFile().path)!! - } - - private val projectName: String - get() { - val testName = getTestName(true) - return if (testName.contains("_")) { - testName.substring(0, testName.indexOf("_")) - } - else testName - } - - protected val projectRoot: String - get() = BASE_PATH + projectName - - override fun setUpModule() {} - - private fun assertNoFilesInDefaultPaths() { - UsefulTestCase.assertDoesntExist(File(JAVA_CONFIGURATOR.getDefaultPathToJarFile(project))) - UsefulTestCase.assertDoesntExist(File(JS_CONFIGURATOR.getDefaultPathToJarFile(project))) - } - - companion object { - private val BASE_PATH = "idea/testData/configuration/" - private val TEMP_DIR_MACRO_KEY = "TEMP_TEST_DIR" - protected val JAVA_CONFIGURATOR: KotlinJavaModuleConfigurator by lazy { - object : KotlinJavaModuleConfigurator() { - override fun getDefaultPathToJarFile(project: Project) = getPathRelativeToTemp("default_jvm_lib") - } - } - - protected val JS_CONFIGURATOR: KotlinJsModuleConfigurator by lazy { - object : KotlinJsModuleConfigurator() { - override fun getDefaultPathToJarFile(project: Project) = getPathRelativeToTemp("default_js_lib") - } - } - - private fun configure( - modules: List, - runtimeState: FileState, - configurator: KotlinWithLibraryConfigurator, - jarFromDist: String, - jarFromTemp: String - ) { - val project = modules.first().project - val collector = createConfigureKotlinNotificationCollector(project) - - val pathToJar = getPathToJar(runtimeState, jarFromDist, jarFromTemp) - for (module in modules) { - configurator.configureModule(module, pathToJar, pathToJar, collector, runtimeState) - } - collector.showNotification() - } - - private fun getPathToJar(runtimeState: FileState, jarFromDist: String, jarFromTemp: String) = when (runtimeState) { - KotlinWithLibraryConfigurator.FileState.EXISTS -> jarFromDist - KotlinWithLibraryConfigurator.FileState.COPY -> jarFromTemp - KotlinWithLibraryConfigurator.FileState.DO_NOT_COPY -> jarFromDist - } - - protected fun configure(module: Module, jarState: FileState, configurator: KotlinProjectConfigurator) { - if (configurator is KotlinJavaModuleConfigurator) { - configure(listOf(module), jarState, - configurator as KotlinWithLibraryConfigurator, - pathToExistentRuntimeJar, pathToNonexistentRuntimeJar) - } - if (configurator is KotlinJsModuleConfigurator) { - configure(listOf(module), jarState, - configurator as KotlinWithLibraryConfigurator, - pathToExistentJsJar, pathToNonexistentJsJar) - } - } - - private val pathToNonexistentRuntimeJar: String - get() { - val pathToTempKotlinRuntimeJar = FileUtil.getTempDirectory() + "/kotlin-runtime.jar" - PlatformTestCase.myFilesToDelete.add(File(pathToTempKotlinRuntimeJar)) - return pathToTempKotlinRuntimeJar - } - - private val pathToNonexistentJsJar: String - get() { - val pathToTempKotlinRuntimeJar = FileUtil.getTempDirectory() + "/" + PathUtil.JS_LIB_JAR_NAME - PlatformTestCase.myFilesToDelete.add(File(pathToTempKotlinRuntimeJar)) - return pathToTempKotlinRuntimeJar - } - - private val pathToExistentRuntimeJar: String - get() = PathUtil.kotlinPathsForDistDirectory.stdlibPath.parent - - private val pathToExistentJsJar: String - get() = PathUtil.kotlinPathsForDistDirectory.jsStdLibJarPath.parent - - protected fun assertNotConfigured(module: Module, configurator: KotlinWithLibraryConfigurator) { - TestCase.assertFalse( - String.format("Module %s should not be configured as %s Module", module.name, configurator.presentableText), - configurator.isConfigured(module)) - } - - protected fun assertConfigured(module: Module, configurator: KotlinWithLibraryConfigurator) { - TestCase.assertTrue(String.format("Module %s should be configured with configurator '%s'", module.name, - configurator.presentableText), - configurator.isConfigured(module)) - } - - protected fun assertProperlyConfigured(module: Module, configurator: KotlinWithLibraryConfigurator) { - assertConfigured(module, configurator) - assertNotConfigured(module, getOppositeConfigurator(configurator)) - } - - private fun getOppositeConfigurator(configurator: KotlinWithLibraryConfigurator): KotlinWithLibraryConfigurator { - if (configurator === JAVA_CONFIGURATOR) return JS_CONFIGURATOR - if (configurator === JS_CONFIGURATOR) return JAVA_CONFIGURATOR - - throw IllegalArgumentException("Only JS_CONFIGURATOR and JAVA_CONFIGURATOR are supported") - } - - private fun getPathRelativeToTemp(relativePath: String): String { - val tempPath = PathMacros.getInstance().getValue(TEMP_DIR_MACRO_KEY) - return tempPath + '/' + relativePath - } - } - - override fun getTestProjectJdk(): Sdk { - val projectRootManager = ProjectRootManager.getInstance(project) - return projectRootManager.projectSdk ?: throw IllegalStateException("SDK ${projectRootManager.projectSdkName} was not found") - } -} diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt.as32 b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt.as32 deleted file mode 100644 index 62f47fa44f1..00000000000 --- a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt.as32 +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2010-2017 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.configuration - -import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.application.impl.ApplicationImpl -import com.intellij.openapi.util.io.FileUtil -import org.jetbrains.kotlin.config.ApiVersion -import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider -import org.jetbrains.kotlin.config.LanguageVersion -import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder -import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings -import org.jetbrains.kotlin.idea.project.languageVersionSettings -import org.junit.Assert -import java.io.File -import java.io.IOException -import java.nio.file.Path - -open class ConfigureKotlinInTempDirTest : AbstractConfigureKotlinInTempDirTest() { - @Throws(IOException::class) - fun testNoKotlincExistsNoSettingsRuntime10() { - val application = ApplicationManager.getApplication() as ApplicationImpl - application.isSaveAllowed = true - Assert.assertEquals(LanguageVersion.KOTLIN_1_0, module.languageVersionSettings.languageVersion) - Assert.assertEquals(LanguageVersion.KOTLIN_1_0, myProject.getLanguageVersionSettings(null).languageVersion) - application.saveAll() - Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") == null) - } - - fun testNoKotlincExistsNoSettingsLatestRuntime() { - val application = ApplicationManager.getApplication() as ApplicationImpl - application.isSaveAllowed = true - Assert.assertEquals(LanguageVersion.LATEST_STABLE, module.languageVersionSettings.languageVersion) - Assert.assertEquals(LanguageVersion.LATEST_STABLE, myProject.getLanguageVersionSettings(null).languageVersion) - application.saveAll() - Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") == null) - } - - fun testKotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance() { - val application = ApplicationManager.getApplication() as ApplicationImpl - application.isSaveAllowed = true - Assert.assertEquals(LanguageVersion.LATEST_STABLE, module.languageVersionSettings.languageVersion) - Assert.assertEquals(LanguageVersion.LATEST_STABLE, myProject.getLanguageVersionSettings(null).languageVersion) - KotlinCommonCompilerArgumentsHolder.getInstance(project).update { - autoAdvanceLanguageVersion = false - autoAdvanceApiVersion = false - } - application.saveAll() - Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") != null) - } - - fun testDropKotlincOnVersionAutoAdvance() { - val application = ApplicationManager.getApplication() as ApplicationImpl - application.isSaveAllowed = true - Assert.assertEquals(LanguageVersion.LATEST_STABLE, module.languageVersionSettings.languageVersion) - KotlinCommonCompilerArgumentsHolder.getInstance(project).update { - autoAdvanceLanguageVersion = true - autoAdvanceApiVersion = true - } - application.saveAll() - Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") == null) - } - - fun testProject106InconsistentVersionInConfig() { - val settings = KotlinFacetSettingsProvider.getInstance(myProject).getInitializedSettings(module) - Assert.assertEquals(false, settings.useProjectSettings) - Assert.assertEquals("1.0", settings.languageLevel!!.description) - Assert.assertEquals("1.0", settings.apiLevel!!.description) - } - - fun testProject107InconsistentVersionInConfig() { - val settings = KotlinFacetSettingsProvider.getInstance(myProject).getInitializedSettings(module) - Assert.assertEquals(false, settings.useProjectSettings) - Assert.assertEquals("1.0", settings.languageLevel!!.description) - Assert.assertEquals("1.0", settings.apiLevel!!.description) - } - - fun testFacetWithProjectSettings() { - val settings = KotlinFacetSettingsProvider.getInstance(myProject).getInitializedSettings(module) - Assert.assertEquals(true, settings.useProjectSettings) - Assert.assertEquals("1.1", settings.languageLevel!!.description) - Assert.assertEquals("1.1", settings.apiLevel!!.description) - Assert.assertEquals("-version -Xallow-kotlin-package -Xskip-metadata-version-check", settings.compilerSettings!!.additionalArguments) - } - - fun testLoadAndSaveProjectWithV2FacetConfig() { - val moduleFileContentBefore = String(module.moduleFile!!.contentsToByteArray()) - val application = ApplicationManager.getApplication() as ApplicationImpl - application.isSaveAllowed = true - application.saveAll() - val moduleFileContentAfter = String(module.moduleFile!!.contentsToByteArray()) - Assert.assertEquals(moduleFileContentBefore, moduleFileContentAfter) - } - - fun testApiVersionWithoutLanguageVersion() { - KotlinCommonCompilerArgumentsHolder.getInstance(myProject) - val settings = myProject.getLanguageVersionSettings() - Assert.assertEquals(ApiVersion.KOTLIN_1_1, settings.apiVersion) - } - - //todo[Sedunov]: wait for fix in platform to avoid misunderstood from Java newbies (also PluginStartupComponent) - /*fun testKotlinSdkAdded() { - Assert.assertTrue(ProjectJdkTable.getInstance().allJdks.any { it.sdkType is KotlinSdkType }) - }*/ -} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/CommonIntentionActionsTest.kt.as32 b/idea/tests/org/jetbrains/kotlin/idea/quickfix/CommonIntentionActionsTest.kt.as32 deleted file mode 100644 index 504c9448f77..00000000000 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/CommonIntentionActionsTest.kt.as32 +++ /dev/null @@ -1,430 +0,0 @@ -/* - * Copyright 2010-2017 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.quickfix - -import com.intellij.codeInsight.intention.IntentionAction -import com.intellij.lang.jvm.JvmElement -import com.intellij.lang.jvm.JvmModifier -import com.intellij.lang.jvm.actions.* -import com.intellij.lang.jvm.types.JvmSubstitutor -import com.intellij.openapi.project.Project -import com.intellij.openapi.util.Pair.pair -import com.intellij.psi.JavaPsiFacade -import com.intellij.psi.PsiJvmSubstitutor -import com.intellij.psi.PsiSubstitutor -import com.intellij.psi.PsiType -import com.intellij.psi.codeStyle.SuggestedNameInfo -import com.intellij.testFramework.fixtures.CodeInsightTestFixture -import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase -import org.jetbrains.kotlin.idea.search.allScope -import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor -import org.jetbrains.uast.UParameter -import org.jetbrains.uast.UastContext -import org.jetbrains.uast.toUElement -import org.junit.Assert - -class CommonIntentionActionsTest : LightPlatformCodeInsightFixtureTestCase() { - private class SimpleMethodRequest( - project: Project, - private val methodName: String, - private val modifiers: Collection = emptyList(), - private val returnType: ExpectedTypes = emptyList(), - private val annotations: Collection = emptyList(), - private val parameters: List>> = emptyList(), - private val targetSubstitutor: JvmSubstitutor = PsiJvmSubstitutor(project, PsiSubstitutor.EMPTY) - ) : CreateMethodRequest { - override fun getTargetSubstitutor(): JvmSubstitutor = targetSubstitutor - - override fun getModifiers() = modifiers - - override fun getMethodName() = methodName - - override fun getAnnotations() = annotations - - override fun getParameters() = parameters - - override fun getReturnType() = returnType - - override fun isValid(): Boolean = true - - } - - private class NameInfo(vararg names: String) : SuggestedNameInfo(names) - - override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE_FULL_JDK - - fun testMakeNotFinal() { - myFixture.configureByText("foo.kt", """ - class Foo { - fun bar(){} - } - """) - - myFixture.launchAction( - createModifierActions( - myFixture.atCaret(), MemberRequest.Modifier(JvmModifier.FINAL, false) - ).findWithText("Make 'bar' open") - ) - myFixture.checkResult(""" - class Foo { - open fun bar(){} - } - """) - } - - fun testMakePrivate() { - myFixture.configureByText("foo.kt", """ - class Foo { - fun bar(){} - } - """) - - myFixture.launchAction( - createModifierActions( - myFixture.atCaret(), MemberRequest.Modifier(JvmModifier.PRIVATE, true) - ).findWithText("Make 'Foo' private") - ) - myFixture.checkResult(""" - private class Foo { - fun bar(){} - } - """) - } - - fun testMakeNotPrivate() { - myFixture.configureByText("foo.kt", """ - private class Foo { - fun bar(){} - } - """.trim()) - - myFixture.launchAction( - createModifierActions( - myFixture.atCaret(), MemberRequest.Modifier(JvmModifier.PRIVATE, false) - ).findWithText("Remove 'private' modifier") - ) - myFixture.checkResult(""" - class Foo { - fun bar(){} - } - """.trim(), true) - } - - fun testMakePrivatePublic() { - myFixture.configureByText( - "foo.kt", """class Foo { - | private fun bar(){} - |}""".trim().trimMargin() - ) - - myFixture.launchAction( - createModifierActions( - myFixture.atCaret(), MemberRequest.Modifier(JvmModifier.PUBLIC, true) - ).findWithText("Remove 'private' modifier") - ) - myFixture.checkResult( - """class Foo { - | fun bar(){} - |}""".trim().trimMargin(), true - ) - } - - fun testMakeProtectedPublic() { - myFixture.configureByText( - "foo.kt", """open class Foo { - | protected fun bar(){} - |}""".trim().trimMargin() - ) - - myFixture.launchAction( - createModifierActions( - myFixture.atCaret(), MemberRequest.Modifier(JvmModifier.PUBLIC, true) - ).findWithText("Remove 'protected' modifier") - ) - myFixture.checkResult( - """open class Foo { - | fun bar(){} - |}""".trim().trimMargin(), true - ) - } - - fun testMakeInternalPublic() { - myFixture.configureByText( - "foo.kt", """class Foo { - | internal fun bar(){} - |}""".trim().trimMargin() - ) - - myFixture.launchAction( - createModifierActions( - myFixture.atCaret(), MemberRequest.Modifier(JvmModifier.PUBLIC, true) - ).findWithText("Remove 'internal' modifier") - ) - myFixture.checkResult( - """class Foo { - | fun bar(){} - |}""".trim().trimMargin(), true - ) - } - - fun testDontMakePublicPublic() { - myFixture.configureByText( - "foo.kt", """class Foo { - | fun bar(){} - |}""".trim().trimMargin() - ) - - assertEmpty(createModifierActions(myFixture.atCaret(), MemberRequest.Modifier(JvmModifier.PUBLIC, true))) - } - - fun testDontMakeFunInObjectsOpen() { - myFixture.configureByText("foo.kt", """ - object Foo { - fun bar(){} - } - """.trim()) - assertEmpty(createModifierActions(myFixture.atCaret(), MemberRequest.Modifier(JvmModifier.FINAL, false))) - } - - fun testAddVoidVoidMethod() { - myFixture.configureByText("foo.kt", """ - |class Foo { - | fun bar() {} - |} - """.trim().trimMargin()) - - myFixture.launchAction( - createMethodActions( - myFixture.atCaret(), - methodRequest(project, "baz", JvmModifier.PRIVATE, PsiType.VOID) - ).findWithText("Add method 'baz' to 'Foo'") - ) - myFixture.checkResult(""" - |class Foo { - | fun bar() {} - | private fun baz() { - | - | } - |} - """.trim().trimMargin(), true) - } - - fun testAddIntIntMethod() { - myFixture.configureByText("foo.kt", """ - |class Foo { - | fun bar() {} - |} - """.trim().trimMargin()) - - myFixture.launchAction( - createMethodActions( - myFixture.atCaret(), - SimpleMethodRequest(project, - methodName = "baz", - modifiers = listOf(JvmModifier.PUBLIC), - returnType = expectedTypes(PsiType.INT), - parameters = expectedParams(PsiType.INT)) - ).findWithText("Add method 'baz' to 'Foo'") - ) - myFixture.checkResult(""" - |class Foo { - | fun bar() {} - | fun baz(param0: Int): Int { - | TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - | } - |} - """.trim().trimMargin(), true) - } - - fun testAddIntPrimaryConstructor() { - myFixture.configureByText("foo.kt", """ - |class Foo { - |} - """.trim().trimMargin()) - - myFixture.launchAction( - createConstructorActions( - myFixture.atCaret(), constructorRequest(project, listOf(pair("param0", PsiType.INT as PsiType))) - ).findWithText("Add primary constructor to 'Foo'") - ) - myFixture.checkResult(""" - |class Foo(param0: Int) { - |} - """.trim().trimMargin(), true) - } - - fun testAddIntSecondaryConstructor() { - myFixture.configureByText("foo.kt", """ - |class Foo() { - |} - """.trim().trimMargin()) - - myFixture.launchAction( - createConstructorActions( - myFixture.atCaret(), - constructorRequest(project, listOf(pair("param0", PsiType.INT as PsiType))) - ).findWithText("Add secondary constructor to 'Foo'") - ) - myFixture.checkResult(""" - |class Foo() { - | constructor(param0: Int) { - | - | } - |} - """.trim().trimMargin(), true) - } - - fun testChangePrimaryConstructorInt() { - myFixture.configureByText("foo.kt", """ - |class Foo() { - |} - """.trim().trimMargin()) - - myFixture.launchAction( - createConstructorActions( - myFixture.atCaret(), - constructorRequest(project, listOf(pair("param0", PsiType.INT as PsiType))) - ).findWithText("Add 'int' as 1st parameter to method 'Foo'") - ) - myFixture.checkResult(""" - |class Foo(param0: Int) { - |} - """.trim().trimMargin(), true) - } - - fun testRemoveConstructorParameters() { - myFixture.configureByText("foo.kt", """ - |class Foo(i: Int) { - |} - """.trim().trimMargin()) - - myFixture.launchAction( - createConstructorActions( - myFixture.atCaret(), - constructorRequest(project, emptyList()) - ).findWithText("Remove 1st parameter from method 'Foo'") - ) - myFixture.checkResult(""" - |class Foo() { - |} - """.trim().trimMargin(), true) - } - - fun testAddStringVarProperty() { - myFixture.configureByText("foo.kt", """ - |class Foo { - | fun bar() {} - |} - """.trim().trimMargin()) - - myFixture.launchAction( - createPropertyActions( - myFixture.atCaret(), - MemberRequest.Property( - propertyName = "baz", - visibilityModifier = JvmModifier.PUBLIC, - propertyType = PsiType.getTypeByName("java.lang.String", project, project.allScope()), - getterRequired = true, - setterRequired = true - ) - ).findWithText("Add 'var' property 'baz' to 'Foo'") - ) - myFixture.checkResult(""" - |class Foo { - | var baz: String = TODO("initialize me") - | - | fun bar() {} - |} - """.trim().trimMargin(), true) - } - - fun testAddLateInitStringVarProperty() { - myFixture.configureByText("foo.kt", """ - |class Foo { - | fun bar() {} - |} - """.trim().trimMargin()) - - myFixture.launchAction( - createPropertyActions( - myFixture.atCaret(), - MemberRequest.Property( - propertyName = "baz", - visibilityModifier = JvmModifier.PUBLIC, - propertyType = PsiType.getTypeByName("java.lang.String", project, project.allScope()), - getterRequired = true, - setterRequired = true - ) - ).findWithText("Add 'lateinit var' property 'baz' to 'Foo'") - ) - myFixture.checkResult(""" - |class Foo { - | lateinit var baz: String - | - | fun bar() {} - |} - """.trim().trimMargin(), true) - } - - fun testAddStringValProperty() { - myFixture.configureByText("foo.kt", """ - |class Foo { - | fun bar() {} - |} - """.trim().trimMargin()) - - myFixture.launchAction( - createPropertyActions( - myFixture.atCaret(), - MemberRequest.Property( - propertyName = "baz", - visibilityModifier = JvmModifier.PUBLIC, - propertyType = PsiType.getTypeByName("java.lang.String", project, project.allScope()), - getterRequired = true, - setterRequired = false - ) - ).findWithText("Add 'val' property 'baz' to 'Foo'") - ) - myFixture.checkResult(""" - |class Foo { - | val baz: String = TODO("initialize me") - | - | fun bar() {} - |} - """.trim().trimMargin(), true) - } - - private fun makeParams(vararg psyTypes: PsiType): List { - val uastContext = UastContext(myFixture.project) - val factory = JavaPsiFacade.getElementFactory(myFixture.project) - val parameters = psyTypes.mapIndexed { index, psiType -> factory.createParameter("param$index", psiType) } - return parameters.map { uastContext.convertElement(it, null, UParameter::class.java) as UParameter } - } - - private fun expectedTypes(vararg psiTypes: PsiType) = psiTypes.map { expectedType(it) } - - private fun expectedParams(vararg psyTypes: PsiType) = - psyTypes.mapIndexed { index, psiType -> NameInfo("param$index") to expectedTypes(psiType) } - - private inline fun CodeInsightTestFixture.atCaret() = elementAtCaret.toUElement() as T - - @Suppress("CAST_NEVER_SUCCEEDS") - private fun List.findWithText(text: String): IntentionAction = - this.firstOrNull { it.text == text } ?: - Assert.fail("intention with text '$text' was not found, only ${this.joinToString { "\"${it.text}\"" }} available") as Nothing -} -