diff --git a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/MavenLanguageFeatureQuickFixTest.kt b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/MavenUpdateConfigurationQuickFixTest.kt similarity index 95% rename from idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/MavenLanguageFeatureQuickFixTest.kt rename to idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/MavenUpdateConfigurationQuickFixTest.kt index 4999d2164fe..73b2f09ad5a 100644 --- a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/MavenLanguageFeatureQuickFixTest.kt +++ b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/MavenUpdateConfigurationQuickFixTest.kt @@ -29,7 +29,7 @@ import org.junit.Test import java.io.File import kotlin.reflect.KMutableProperty0 -class MavenLanguageFeatureQuickFixTest : MavenImportingTestCase() { +class MavenUpdateConfigurationQuickFixTest : MavenImportingTestCase() { private lateinit var codeInsightTestFixture: CodeInsightTestFixture fun getTestDataPath() = KotlinTestUtils.getHomeDirectory() + "/idea/idea-maven/testData/languageFeature/" + getTestName(true).substringBefore('_') @@ -66,6 +66,10 @@ class MavenLanguageFeatureQuickFixTest : MavenImportingTestCase() { doTest("Enable coroutine support in the current module") } + @Test fun testAddKotlinReflect() { + doTest("Add kotlin-reflect.jar to the classpath") + } + private fun doTest(intentionName: String) { val pomVFile = createProjectSubFile("pom.xml", File(getTestDataPath(), "pom.xml").readText()) val sourceVFile = createProjectSubFile("src/main/kotlin/src.kt", File(getTestDataPath(), "src.kt").readText()) diff --git a/idea/idea-maven/testData/languageFeature/addKotlinReflect/pom.xml b/idea/idea-maven/testData/languageFeature/addKotlinReflect/pom.xml new file mode 100644 index 00000000000..9711e6ae81d --- /dev/null +++ b/idea/idea-maven/testData/languageFeature/addKotlinReflect/pom.xml @@ -0,0 +1,56 @@ + + + 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 + + + + + ${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/idea-maven/testData/languageFeature/addKotlinReflect/pom.xml.after b/idea/idea-maven/testData/languageFeature/addKotlinReflect/pom.xml.after new file mode 100644 index 00000000000..0236b164547 --- /dev/null +++ b/idea/idea-maven/testData/languageFeature/addKotlinReflect/pom.xml.after @@ -0,0 +1,61 @@ + + + 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 + + + + + ${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/idea-maven/testData/languageFeature/addKotlinReflect/src.kt b/idea/idea-maven/testData/languageFeature/addKotlinReflect/src.kt new file mode 100644 index 00000000000..b60ca708991 --- /dev/null +++ b/idea/idea-maven/testData/languageFeature/addKotlinReflect/src.kt @@ -0,0 +1,7 @@ +import kotlin.reflect.full.* + +class Foo(val prop: Any) { + fun func() {} +} + +fun y01() = Foo::prop.getter diff --git a/idea/testData/gradle/languageFeature/addKotlinReflect/build.gradle b/idea/testData/gradle/languageFeature/addKotlinReflect/build.gradle new file mode 100644 index 00000000000..846876a724c --- /dev/null +++ b/idea/testData/gradle/languageFeature/addKotlinReflect/build.gradle @@ -0,0 +1,18 @@ +group 'Again' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } +} + +apply plugin: 'kotlin' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0" +} diff --git a/idea/testData/gradle/languageFeature/addKotlinReflect/build.gradle.after b/idea/testData/gradle/languageFeature/addKotlinReflect/build.gradle.after new file mode 100644 index 00000000000..b702695295b --- /dev/null +++ b/idea/testData/gradle/languageFeature/addKotlinReflect/build.gradle.after @@ -0,0 +1,19 @@ +group 'Again' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } +} + +apply plugin: 'kotlin' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0" + compile "org.jetbrains.kotlin:kotlin-reflect:1.1.0" +} diff --git a/idea/testData/gradle/languageFeature/addKotlinReflect/src.kt b/idea/testData/gradle/languageFeature/addKotlinReflect/src.kt new file mode 100644 index 00000000000..b60ca708991 --- /dev/null +++ b/idea/testData/gradle/languageFeature/addKotlinReflect/src.kt @@ -0,0 +1,7 @@ +import kotlin.reflect.full.* + +class Foo(val prop: Any) { + fun func() {} +} + +fun y01() = Foo::prop.getter diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleLanguageFeatureQuickFixTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleUpdateConfigurationQuickFixTest.kt similarity index 95% rename from idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleLanguageFeatureQuickFixTest.kt rename to idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleUpdateConfigurationQuickFixTest.kt index cb60bccf9bb..aa9dcf946d4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleLanguageFeatureQuickFixTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleUpdateConfigurationQuickFixTest.kt @@ -29,7 +29,7 @@ import org.junit.Test import java.io.File import kotlin.reflect.KMutableProperty0 -class GradleLanguageFeatureQuickFixTest : GradleImportingTestCase() { +class GradleUpdateConfigurationQuickFixTest : GradleImportingTestCase() { private lateinit var codeInsightTestFixture: CodeInsightTestFixture fun getTestDataPath() = PluginTestCaseBase.getTestDataPathBase() + "/gradle/languageFeature/" + getTestName(true).substringBefore('_') @@ -62,6 +62,10 @@ class GradleLanguageFeatureQuickFixTest : GradleImportingTestCase() { doTest("Enable coroutine support in the current module") } + @Test fun testAddKotlinReflect() { + doTest("Add kotlin-reflect.jar to the classpath") + } + private fun doTest(intentionName: String) { val buildGradleVFile = createProjectSubFile("build.gradle", File(getTestDataPath(), "build.gradle").readText()) importProject() diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/LanguageFeatureQuickFixTest.kt b/idea/tests/org/jetbrains/kotlin/idea/quickfix/UpdateConfigurationQuickFixTest.kt similarity index 89% rename from idea/tests/org/jetbrains/kotlin/idea/quickfix/LanguageFeatureQuickFixTest.kt rename to idea/tests/org/jetbrains/kotlin/idea/quickfix/UpdateConfigurationQuickFixTest.kt index 80e73731468..4cfecb7c86a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/LanguageFeatureQuickFixTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/UpdateConfigurationQuickFixTest.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder +import org.jetbrains.kotlin.idea.configuration.KotlinJavaModuleConfigurator import org.jetbrains.kotlin.idea.facet.KotlinFacetType import org.jetbrains.kotlin.idea.facet.getRuntimeLibraryVersion import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings @@ -38,7 +39,7 @@ import org.jetbrains.kotlin.idea.test.configureKotlinFacet import org.jetbrains.kotlin.idea.versions.bundledRuntimeVersion import java.io.File -class LanguageFeatureQuickFixTest : LightPlatformCodeInsightFixtureTestCase() { +class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase() { fun testEnableCoroutines() { configureRuntime("mockRuntime11") resetProjectSettings(LanguageVersion.KOTLIN_1_1) @@ -148,10 +149,26 @@ class LanguageFeatureQuickFixTest : LightPlatformCodeInsightFixtureTestCase() { assertEquals(bundledRuntimeVersion(), getRuntimeLibraryVersion(myFixture.module)) } + fun testAddKotlinReflect() { + configureRuntime("mockRuntime11") + myFixture.configureByText("foo.kt", """class Foo(val prop: Any) { + fun func() {} + } + + fun y01() = Foo::prop.getter + """) + myFixture.launchAction(myFixture.findSingleIntention("Add kotlin-reflect.jar to the classpath")) + val kotlinRuntime = KotlinJavaModuleConfigurator.instance.getKotlinLibrary(myModule)!! + val classes = kotlinRuntime.getFiles(OrderRootType.CLASSES).map { it.name } + assertContainsElements(classes, "kotlin-reflect.jar") + val sources = kotlinRuntime.getFiles(OrderRootType.SOURCES) + assertContainsElements(sources.map { it.name }, "kotlin-reflect-sources.jar") + } + private fun configureRuntime(path: String) { - val name = if (path == "mockRuntime106") "kotlin-runtime" else "kotlin-stdlib" - val tempFile = FileUtil.createTempFile(name, ".jar") - FileUtil.copy(File("idea/testData/configuration/$path/$name.jar"), tempFile) + val name = if (path == "mockRuntime106") "kotlin-runtime.jar" else "kotlin-stdlib.jar" + val tempFile = File(FileUtil.createTempDirectory("kotlin-update-configuration", null), name) + FileUtil.copy(File("idea/testData/configuration/$path/$name"), tempFile) val tempVFile = LocalFileSystem.getInstance().findFileByIoFile(tempFile)!! updateModel(myFixture.module) { model ->