diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt index 3505e46f417..b1d9cbccc7e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt @@ -73,8 +73,8 @@ sealed class ScriptDependenciesInfo(val project: Project) : IdeaModuleInfo, Bina ) : ScriptDependenciesInfo(project) { override val sdk: Sdk? get() { - val manager = ScriptDependenciesManager.getInstance(project) - return manager.getScriptSdk(scriptFile) ?: ScriptDependenciesManager.getScriptDefaultSdk(project) + return ScriptDependenciesManager.getInstance(project).getScriptSdk(scriptFile) + ?: ScriptDependenciesManager.getScriptDefaultSdk(project) } override fun contentScope(): GlobalSearchScope { @@ -85,14 +85,17 @@ sealed class ScriptDependenciesInfo(val project: Project) : IdeaModuleInfo, Bina } } + // we do not know which scripts these dependencies are class ForProject(project: Project) : ScriptDependenciesInfo(project) { override val sdk: Sdk? - get() = ScriptDependenciesManager.getScriptDefaultSdk(project) + get() { + return ScriptDependenciesManager.getInstance(project).getAllScriptsSdks().firstOrNull() + ?: ScriptDependenciesManager.getScriptDefaultSdk(project) + } override fun contentScope(): GlobalSearchScope { - // we do not know which scripts these dependencies are return KotlinSourceFilterScope.libraryClassFiles( - ScriptDependenciesManager.getInstance(project).getAllScriptsClasspathScope(), project + ScriptDependenciesManager.getInstance(project).getAllScriptsDependenciesClassFilesScope(), project ) } } @@ -105,7 +108,7 @@ sealed class ScriptDependenciesSourceInfo(val project: Project) : IdeaModuleInfo get() = ScriptDependenciesInfo.ForProject(project) override fun sourceScope(): GlobalSearchScope = KotlinSourceFilterScope.librarySources( - ScriptDependenciesManager.getInstance(project).getAllLibrarySourcesScope(), project + ScriptDependenciesManager.getInstance(project).getAllScriptDependenciesSourcesScope(), project ) override fun hashCode() = project.hashCode() diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/getModuleInfo.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/getModuleInfo.kt index c789bdc3bf9..2392ea73580 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/getModuleInfo.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/getModuleInfo.kt @@ -225,14 +225,14 @@ private inline fun collectInfosByVirtualFile( val isBinary = virtualFile.fileType.isKotlinBinary() val scriptConfigurationManager = ScriptDependenciesManager.getInstance(project) - if (isBinary && virtualFile in scriptConfigurationManager.getAllScriptsClasspathScope()) { + if (isBinary && virtualFile in scriptConfigurationManager.getAllScriptsDependenciesClassFilesScope()) { if (treatAsLibrarySource) { onOccurrence(ScriptDependenciesSourceInfo.ForProject(project)) } else { onOccurrence(ScriptDependenciesInfo.ForProject(project)) } } - if (!isBinary && virtualFile in scriptConfigurationManager.getAllLibrarySourcesScope()) { + if (!isBinary && virtualFile in scriptConfigurationManager.getAllScriptDependenciesSourcesScope()) { onOccurrence(ScriptDependenciesSourceInfo.ForProject(project)) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ProjectRootsUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ProjectRootsUtil.kt index 0209f8e00c1..561cf482583 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ProjectRootsUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ProjectRootsUtil.kt @@ -129,11 +129,11 @@ object ProjectRootsUtil { if (includeLibraryClasses && (isBinary || canContainClassFiles)) { if (fileIndex.isInLibraryClasses(file)) return true - if (scriptConfigurationManager?.getAllScriptsClasspathScope()?.contains(file) == true) return true + if (scriptConfigurationManager?.getAllScriptsDependenciesClassFilesScope()?.contains(file) == true) return true } if (includeLibrarySource && !isBinary) { if (fileIndex.isInLibrarySource(file)) return true - if (scriptConfigurationManager?.getAllLibrarySourcesScope()?.contains(file) == true && + if (scriptConfigurationManager?.getAllScriptDependenciesSourcesScope()?.contains(file) == true && !fileIndex.isInSourceContentWithoutInjected(file) ) { return true diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptDependenciesClassFinder.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptDependenciesClassFinder.kt index e725fd943d1..d961b940712 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptDependenciesClassFinder.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptDependenciesClassFinder.kt @@ -31,7 +31,7 @@ class KotlinScriptDependenciesClassFinder( private val scriptDependenciesManager: ScriptDependenciesManager ) : NonClasspathClassFinder(project), KotlinSafeClassFinder { - override fun calcClassRoots(): List = scriptDependenciesManager.getAllScriptsClasspath().toList() + override fun calcClassRoots(): List = scriptDependenciesManager.getAllScriptsDependenciesClassFiles().toList() override fun findClass(qualifiedName: String, scope: GlobalSearchScope): PsiClass? { tailrec fun findClassInner(parentQualifier: String, inners: List = emptyList()): PsiClass? { diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesCache.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesCache.kt index 4057b125cbe..f9fe9741de5 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesCache.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesCache.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.core.script import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer import com.intellij.openapi.extensions.Extensions import com.intellij.openapi.project.Project +import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiElementFinder import com.intellij.psi.PsiManager @@ -55,36 +56,66 @@ class ScriptDependenciesCache(private val project: Project) { private val scriptsDependenciesClasspathScopeCache = SLRUCacheWithLock() - fun scriptDependenciesClasspathScope(file: VirtualFile): GlobalSearchScope { + fun scriptDependenciesClassFilesScope(file: VirtualFile): GlobalSearchScope { return scriptsDependenciesClasspathScopeCache.getOrPut(file) { - val dependencies = scriptDependenciesCache.get(file) - val roots = dependencies?.classpath ?: emptyList() - NonClasspathDirectoriesScope.compose(ScriptDependenciesManager.toVfsRoots(roots)) + val dependencies = scriptDependenciesCache.get(file) ?: return@getOrPut GlobalSearchScope.EMPTY_SCOPE + val roots = dependencies.classpath + + val sdk = ScriptDependenciesManager.getScriptSdk(dependencies) + + @Suppress("FoldInitializerAndIfToElvis") + if (sdk == null) { + return@getOrPut NonClasspathDirectoriesScope.compose(ScriptDependenciesManager.toVfsRoots(roots)) + } + + return@getOrPut NonClasspathDirectoriesScope.compose( + sdk.rootProvider.getFiles(OrderRootType.CLASSES).toList() + + ScriptDependenciesManager.toVfsRoots(roots) + ) } } - val allScriptsClasspath by ClearableLazyValue(cacheLock) { - val files = scriptDependenciesCache.getAll().flatMap { it.value.classpath }.distinct() - ScriptDependenciesManager.toVfsRoots(files) + val allSdks by ClearableLazyValue(cacheLock) { + scriptDependenciesCache.getAll() + .mapNotNull { ScriptDependenciesManager.getInstance(project).getScriptSdk(it.key) } + .distinct() } - val allScriptsClasspathScope by ClearableLazyValue(cacheLock) { - NonClasspathDirectoriesScope(allScriptsClasspath) + val allDependenciesClassFiles by ClearableLazyValue(cacheLock) { + val sdkFiles = allSdks + .filter { it != ScriptDependenciesManager.getProjectSdk(project) } + .flatMap { it.rootProvider.getFiles(OrderRootType.CLASSES).toList() } + + val scriptDependenciesClasspath = scriptDependenciesCache.getAll().flatMap { it.value.classpath }.distinct() + + sdkFiles + ScriptDependenciesManager.toVfsRoots(scriptDependenciesClasspath) } - val allLibrarySources by ClearableLazyValue(cacheLock) { - ScriptDependenciesManager.toVfsRoots(scriptDependenciesCache.getAll().flatMap { it.value.sources }.distinct()) + val allDependenciesSources by ClearableLazyValue(cacheLock) { + val sdkSources = allSdks + .filter { it != ScriptDependenciesManager.getProjectSdk(project) } + .flatMap { it.rootProvider.getFiles(OrderRootType.SOURCES).toList() } + + val scriptDependenciesSources = scriptDependenciesCache.getAll().flatMap { it.value.sources }.distinct() + sdkSources + ScriptDependenciesManager.toVfsRoots(scriptDependenciesSources) } - val allLibrarySourcesScope by ClearableLazyValue(cacheLock) { - NonClasspathDirectoriesScope(allLibrarySources) + val allDependenciesClassFilesScope by ClearableLazyValue(cacheLock) { + NonClasspathDirectoriesScope.compose(allDependenciesClassFiles) + } + + val allDependenciesSourcesScope by ClearableLazyValue(cacheLock) { + NonClasspathDirectoriesScope.compose(allDependenciesSources) } private fun onChange(files: List) { - this::allScriptsClasspath.clearValue() - this::allScriptsClasspathScope.clearValue() - this::allLibrarySources.clearValue() - this::allLibrarySourcesScope.clearValue() + this::allSdks.clearValue() + + this::allDependenciesClassFiles.clearValue() + this::allDependenciesClassFilesScope.clearValue() + + this::allDependenciesSources.clearValue() + this::allDependenciesSourcesScope.clearValue() scriptsDependenciesClasspathScopeCache.clear() @@ -110,8 +141,10 @@ class ScriptDependenciesCache(private val project: Project) { } fun hasNotCachedRoots(scriptDependencies: ScriptDependencies): Boolean { - return !allScriptsClasspath.containsAll(ScriptDependenciesManager.toVfsRoots(scriptDependencies.classpath)) || - !allLibrarySources.containsAll(ScriptDependenciesManager.toVfsRoots(scriptDependencies.sources)) + return !allSdks.contains(ScriptDependenciesManager.getScriptSdk(scriptDependencies)) || + !allDependenciesClassFiles.containsAll(ScriptDependenciesManager.toVfsRoots(scriptDependencies.classpath)) || + !allDependenciesSources.containsAll(ScriptDependenciesManager.toVfsRoots(scriptDependencies.sources)) + } fun clear() { diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesManager.kt index ed27b726747..185d96c6695 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesManager.kt @@ -52,12 +52,15 @@ class ScriptDependenciesManager internal constructor( fun getScriptDependencies(file: VirtualFile): ScriptDependencies = cacheUpdater.getCurrentDependencies(file) fun getScriptSdk(file: VirtualFile): Sdk? = getScriptSdk(getScriptDependencies(file)) - fun getScriptDependenciesClassFilesScope(file: VirtualFile) = cache.scriptDependenciesClasspathScope(file) + fun getScriptDependenciesClassFilesScope(file: VirtualFile) = cache.scriptDependenciesClassFilesScope(file) - fun getAllScriptsClasspathScope() = cache.allScriptsClasspathScope - fun getAllLibrarySourcesScope() = cache.allLibrarySourcesScope - fun getAllLibrarySources() = cache.allLibrarySources - fun getAllScriptsClasspath() = cache.allScriptsClasspath + fun getAllScriptsSdks() = cache.allSdks + + fun getAllScriptsDependenciesClassFilesScope() = cache.allDependenciesClassFilesScope + fun getAllScriptDependenciesSourcesScope() = cache.allDependenciesSourcesScope + + fun getAllScriptsDependenciesClassFiles() = cache.allDependenciesClassFiles + fun getAllScriptDependenciesSources() = cache.allDependenciesSources companion object { @JvmStatic diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/JavaClassesInScriptDependenciesShortNameCache.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/JavaClassesInScriptDependenciesShortNameCache.kt index 008f4f857cb..02e870dfe1b 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/JavaClassesInScriptDependenciesShortNameCache.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/JavaClassesInScriptDependenciesShortNameCache.kt @@ -35,7 +35,7 @@ class JavaClassesInScriptDependenciesShortNameCache(private val project: Project override fun getAllClassNames(dest: HashSet) {} override fun getClassesByName(name: String, scope: GlobalSearchScope): Array { - val classpathScope = ScriptDependenciesManager.getInstance(project).getAllScriptsClasspathScope() + val classpathScope = ScriptDependenciesManager.getInstance(project).getAllScriptsDependenciesClassFilesScope() val classes = StubIndex.getElements( JavaShortClassNameIndex.getInstance().key, name, project, classpathScope.intersectWith(scope), PsiClass::class.java ) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptDependenciesIndexableSetContributor.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptDependenciesIndexableSetContributor.kt index 4027a8fb39f..06a9aa29236 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptDependenciesIndexableSetContributor.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptDependenciesIndexableSetContributor.kt @@ -25,7 +25,7 @@ class KotlinScriptDependenciesIndexableSetContributor : IndexableSetContributor( override fun getAdditionalProjectRootsToIndex(project: Project): Set { val manager = ScriptDependenciesManager.getInstance(project) - return (manager.getAllScriptsClasspath() + manager.getAllLibrarySources()).filterTo(LinkedHashSet()) { it.isValid } + return (manager.getAllScriptsDependenciesClassFiles() + manager.getAllScriptDependenciesSources()).filterTo(LinkedHashSet()) { it.isValid } } override fun getAdditionalRootsToIndex(): Set = emptySet() diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptResolveScopeProvider.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptResolveScopeProvider.kt index bd9a2147cb1..b6336f6de28 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptResolveScopeProvider.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptResolveScopeProvider.kt @@ -40,7 +40,7 @@ class KotlinScriptResolveScopeProvider : ResolveScopeProvider() { scriptDefinition.template == Any::class -> null scriptDefinition is StandardIdeScriptDefinition -> null scriptDefinition is KotlinScriptDefinitionFromAnnotatedTemplate -> // TODO: should include the file itself - ScriptDependenciesManager.getInstance(project).getAllScriptsClasspathScope() + ScriptDependenciesManager.getInstance(project).getAllScriptsDependenciesClassFilesScope() else -> null } } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependencySourceNavigationPolicyForJavaClasses.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependencySourceNavigationPolicyForJavaClasses.kt index 7f7f8076006..b9efc76987b 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependencySourceNavigationPolicyForJavaClasses.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependencySourceNavigationPolicyForJavaClasses.kt @@ -50,13 +50,13 @@ class ScriptDependencySourceNavigationPolicyForJavaClasses : ClsCustomNavigation val project = file.project val kotlinScriptConfigurationManager = ScriptDependenciesManager.getInstance(project) - if (virtualFile !in kotlinScriptConfigurationManager.getAllScriptsClasspathScope()) return null + if (virtualFile !in kotlinScriptConfigurationManager.getAllScriptsDependenciesClassFilesScope()) return null val sourceFileName = (file.classes.first() as ClsClassImpl).sourceFileName val packageName = file.packageName val relativePath = if (packageName.isEmpty()) sourceFileName else packageName.replace('.', '/') + '/' + sourceFileName - for (root in kotlinScriptConfigurationManager.getAllLibrarySources().filter { it.isValid }) { + for (root in kotlinScriptConfigurationManager.getAllScriptDependenciesSources().filter { it.isValid }) { val sourceFile = root.findFileByRelativePath(relativePath) if (sourceFile != null && sourceFile.isValid) { val sourcePsi = file.manager.findFile(sourceFile) diff --git a/idea/testData/script/definition/defaultTemplate/template.kt b/idea/testData/script/definition/defaultTemplate/template.kt index de50ff52f75..856f516ddcb 100644 --- a/idea/testData/script/definition/defaultTemplate/template.kt +++ b/idea/testData/script/definition/defaultTemplate/template.kt @@ -10,6 +10,7 @@ class FromTextDependenciesResolver : DependenciesResolver { @Suppress("UNCHECKED_CAST") override fun resolve(scriptContents: ScriptContents, environment: Environment): DependenciesResolver.ResolveResult { return ScriptDependencies( + javaHome = environment["javaHome"] as? File, classpath = (environment["classpath"] as? List).orEmpty(), imports = (environment["imports"] as? List).orEmpty(), sources = (environment["sources"] as? List).orEmpty() diff --git a/idea/testData/script/definition/highlighting/customJavaHome/script.kts b/idea/testData/script/definition/highlighting/customJavaHome/script.kts new file mode 100644 index 00000000000..b80cacc6f2f --- /dev/null +++ b/idea/testData/script/definition/highlighting/customJavaHome/script.kts @@ -0,0 +1,3 @@ +import java.util.stream.IntStream + +// DEPENDENCIES: javaHome:9; classpath:runtime-classes \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt index 921de7518bd..d26f3282741 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt @@ -10,7 +10,9 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.extensions.Extensions import com.intellij.openapi.module.JavaModuleType import com.intellij.openapi.module.Module +import com.intellij.openapi.projectRoots.ProjectJdkTable import com.intellij.openapi.roots.ModuleRootModificationUtil +import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.vfs.LocalFileSystem @@ -31,10 +33,12 @@ import org.jetbrains.kotlin.idea.core.script.isScriptDependenciesUpdaterDisabled import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings import org.jetbrains.kotlin.idea.highlighter.KotlinHighlightingUtil import org.jetbrains.kotlin.idea.navigation.GotoCheck +import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.MockLibraryUtil +import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.test.util.addDependency import org.jetbrains.kotlin.test.util.projectLibrary import org.jetbrains.kotlin.test.util.renderAsGotoImplementation @@ -136,7 +140,7 @@ abstract class AbstractScriptDefinitionsOrderTest : AbstractScriptConfigurationT } } -private val validKeys = setOf("sources", "classpath", "imports", "template-classes-names") +private val validKeys = setOf("javaHome", "sources", "classpath", "imports", "template-classes-names") private const val useDefaultTemplate = "// DEPENDENCIES:" private const val templatesSettings = "// TEMPLATES: " // some bugs can only be reproduced when some module and script have intersecting library dependencies @@ -165,6 +169,15 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { ?: error("Couldn't find $SCRIPT_NAME file in $testDir") } + private val sdk by lazy { + val jdk = PluginTestCaseBase.jdk(TestJdkKind.MOCK_JDK) + runWriteAction { + ProjectJdkTable.getInstance().addJdk(jdk, testRootDisposable) + ProjectRootManager.getInstance(project).projectSdk = jdk + } + jdk + } + protected fun configureScriptFile(path: String) { val mainScriptFile = findMainScript(path) val environment = createScriptEnvironment(mainScriptFile) @@ -189,6 +202,10 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { } if (module != null) { + ModuleRootModificationUtil.updateModel(module) { model -> + model.sdk = sdk + } + module.addDependency( projectLibrary( "script-runtime", @@ -267,6 +284,18 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { env["template-classes-names"] = listOf("custom.scriptDefinition.Template") } + if (env["javaHome"] != null) { + val jdkKind = when ((env["javaHome"] as? List)?.singleOrNull()) { + "9" -> TestJdkKind.FULL_JDK_9 + else -> TestJdkKind.MOCK_JDK + } + runWriteAction { + val jdk = PluginTestCaseBase.jdk(jdkKind) + ProjectJdkTable.getInstance().addJdk(jdk, testRootDisposable) + env["javaHome"] = File(jdk.homePath) + } + } + env.putAll(defaultEnvironment) return env } diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java index a761e23d3c8..af7b1e38d44 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java @@ -61,6 +61,11 @@ public class ScriptConfigurationHighlightingTestGenerated extends AbstractScript runTest("idea/testData/script/definition/highlighting/customExtension/"); } + @TestMetadata("customJavaHome") + public void testCustomJavaHome() throws Exception { + runTest("idea/testData/script/definition/highlighting/customJavaHome/"); + } + @TestMetadata("customLibrary") public void testCustomLibrary() throws Exception { runTest("idea/testData/script/definition/highlighting/customLibrary/");