diff --git a/compiler/tests/org/jetbrains/kotlin/cli/jvm/KotlinCliJavaFileManagerTest.kt b/compiler/tests/org/jetbrains/kotlin/cli/jvm/KotlinCliJavaFileManagerTest.kt index bcd91dfc647..6b9ec0061c8 100644 --- a/compiler/tests/org/jetbrains/kotlin/cli/jvm/KotlinCliJavaFileManagerTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/cli/jvm/KotlinCliJavaFileManagerTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * 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. @@ -15,24 +15,36 @@ */ package org.jetbrains.kotlin.cli.jvm -import com.intellij.ide.highlighter.JavaFileType -import com.intellij.psi.PsiFileFactory +import com.intellij.core.CoreJavaFileManager +import com.intellij.openapi.components.ServiceManager import com.intellij.psi.search.GlobalSearchScope -import com.intellij.testFramework.PlatformTestCase -import com.intellij.testFramework.PsiTestCase -import com.intellij.testFramework.PsiTestUtil import junit.framework.TestCase import org.intellij.lang.annotations.Language -import org.jetbrains.kotlin.cli.jvm.compiler.JavaRoot -import org.jetbrains.kotlin.cli.jvm.compiler.JvmDependenciesIndex -import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl +import org.jetbrains.kotlin.cli.jvm.compiler.* +import org.jetbrains.kotlin.cli.jvm.config.JavaSourceRoot import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.test.ConfigurationKind +import org.jetbrains.kotlin.test.KotlinTestUtils +import org.jetbrains.kotlin.test.KotlinTestWithEnvironment +import org.jetbrains.kotlin.test.TestJdkKind +import java.io.File + + +class KotlinCliJavaFileManagerTest : KotlinTestWithEnvironment() { + private var javaFilesDir: File? = null -//Partial copy of CoreJavaFileManagerTest -class KotlinCliJavaFileManagerTest : PsiTestCase() { fun testCommon() { - val manager = configureManager("package foo;\n\n" + "public class TopLevel {\n" + "public class Inner {\n" + " public class Inner {}\n" + "}\n" + "\n" + "}", "TopLevel") + val manager = configureManager( + "package foo;\n" + + "\n" + + "public class TopLevel {\n" + + "public class Inner {\n" + + " public class Inner {}\n" + + "}\n" + + "\n" + + "}", + "TopLevel") assertCanFind(manager, "foo", "TopLevel") assertCanFind(manager, "foo", "TopLevel.Inner") @@ -44,8 +56,32 @@ class KotlinCliJavaFileManagerTest : PsiTestCase() { } fun testInnerClassesWithDollars() { - val manager = configureManager("package foo;\n\n" + "public class TopLevel {\n" + - "public class I\$nner {" + " public class I\$nner{}" + " public class \$Inner{}" + " public class In\$ne\$r\${}" + " public class Inner\$\${}" + " public class \$\$\$\$\${}" + "}\n" + "public class Inner\$ {" + " public class I\$nner{}" + " public class \$Inner{}" + " public class In\$ne\$r\${}" + " public class Inner\$\${}" + " public class \$\$\$\$\${}" + "}\n" + "public class In\$ner\$\$ {" + " public class I\$nner{}" + " public class \$Inner{}" + " public class In\$ne\$r\${}" + " public class Inner\$\${}" + " public class \$\$\$\$\${}" + "}\n" + "\n" + "}", "TopLevel") + val manager = configureManager( + "package foo;\n\n" + + "public class TopLevel {\n" + + "public class I\$nner {\n" + + " public class I\$nner{}\n" + + " public class \$Inner{}\n" + + " public class In\$ne\$r\${}\n" + + " public class Inner\$\${}\n" + + " public class \$\$\$\$\${}\n" + + "}\n" + + "public class Inner\$ {\n" + + " public class I\$nner{}\n" + + " public class \$Inner{}\n" + + " public class In\$ne\$r\${}\n" + + " public class Inner\$\${}\n" + + " public class \$\$\$\$\${}\n" + + "}\n" + + "public class In\$ner\$\$ {\n" + + " public class I\$nner{}\n" + + " public class \$Inner{}\n" + + " public class In\$ne\$r\${}\n" + + " public class Inner\$\${}\n" + + " public class \$\$\$\$\${}\n" + + "}\n" + + "\n" + + "}", "TopLevel") assertCanFind(manager, "foo", "TopLevel") @@ -138,17 +174,31 @@ class KotlinCliJavaFileManagerTest : PsiTestCase() { TestCase.assertNull("Should not find class in empty scope", manager.findClass("foo.Test", GlobalSearchScope.EMPTY_SCOPE)) } + @Throws(Exception::class) + override fun createEnvironment(): KotlinCoreEnvironment { + javaFilesDir = KotlinTestUtils.tmpDir("java-file-manager-test") + + val configuration = KotlinTestUtils.compilerConfigurationForTests( + ConfigurationKind.MOCK_RUNTIME, + TestJdkKind.MOCK_JDK, + emptyList(), + listOf(javaFilesDir!!)) + + return KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) + } + private fun configureManager(@Language("JAVA") text: String, className: String): KotlinCliJavaFileManagerImpl { - val root = PsiTestUtil.createTestProjectStructure(myProject, myModule, PlatformTestCase.myFilesToDelete) - val pkg = root.createChildDirectory(this, "foo") - val dir = myPsiManager.findDirectory(pkg) - TestCase.assertNotNull(dir) - dir!! - dir.add(PsiFileFactory.getInstance(project).createFileFromText(className + ".java", JavaFileType.INSTANCE, text)) - val coreJavaFileManagerExt = KotlinCliJavaFileManagerImpl(myPsiManager) - coreJavaFileManagerExt.initIndex(JvmDependenciesIndex(listOf(JavaRoot(root, JavaRoot.RootType.SOURCE)))) - coreJavaFileManagerExt.addToClasspath(root) - return coreJavaFileManagerExt + val fooPackageDir = File(javaFilesDir, "foo") + fooPackageDir.mkdir() + + File(fooPackageDir, "$className.java").writeText(text) + + val coreJavaFileManager = ServiceManager.getService(project, CoreJavaFileManager::class.java) as KotlinCliJavaFileManagerImpl + + val root = environment.contentRootToVirtualFile(JavaSourceRoot(javaFilesDir!!, null))!! + coreJavaFileManager.initIndex(JvmDependenciesIndex(listOf(JavaRoot(root, JavaRoot.RootType.SOURCE)))) + + return coreJavaFileManager } private fun assertCanFind(manager: KotlinCliJavaFileManagerImpl, packageFQName: String, classFqName: String) { diff --git a/compiler/tests/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java b/compiler/tests/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java index cb8e08075ec..11b78ae94fe 100644 --- a/compiler/tests/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java +++ b/compiler/tests/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java @@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; public abstract class KotlinTestWithEnvironment extends KotlinTestWithEnvironmentManagement { - private KotlinCoreEnvironment environment; + protected KotlinCoreEnvironment environment; @Override protected void setUp() throws Exception {