Remove ultimate dir

This commit is contained in:
Kirill Shmakov
2019-06-05 10:01:40 +03:00
parent 0df8b7f610
commit 47afd9ec1c
261 changed files with 0 additions and 4634 deletions
-8
View File
@@ -1,8 +0,0 @@
.DS_Store
.idea/shelf
dependencies
ideaSDK
out
tmp
workspace.xml
*.versionsBackup
-4
View File
@@ -1,4 +0,0 @@
# Kotlin Ultimate
This project is a part of **Kotlin IntelliJ IDEA Plugin**
which provides support for Ultimate IDEA features from Kotlin side.
-228
View File
@@ -1,228 +0,0 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
description = "Kotlin IDEA Ultimate plugin"
plugins {
kotlin("jvm")
}
val ideaProjectResources = provider { project(":idea").mainSourceSet.output.resourcesDir }
val intellijUltimateEnabled : Boolean by rootProject.extra
val springClasspath by configurations.creating
val ideaPlugin by configurations.creating
dependencies {
if (intellijUltimateEnabled) {
testRuntime(intellijUltimateDep())
}
compileOnly(project(":kotlin-reflect-api"))
compile(kotlinStdlib("jdk8"))
compile(project(":core:descriptors")) { isTransitive = false }
compile(project(":compiler:psi")) { isTransitive = false }
compile(project(":core:descriptors.jvm")) { isTransitive = false }
compile(project(":core:util.runtime")) { isTransitive = false }
compile(project(":compiler:light-classes")) { isTransitive = false }
compile(project(":core:type-system")) { isTransitive = false }
compile(project(":compiler:frontend")) { isTransitive = false }
compile(project(":compiler:frontend.common")) { isTransitive = false }
compile(project(":compiler:frontend.java")) { isTransitive = false }
compile(project(":compiler:util")) { isTransitive = false }
compile(project(":js:js.frontend")) { isTransitive = false }
compile(project(":idea")) { isTransitive = false }
compile(project(":idea:idea-jvm")) { isTransitive = false }
compile(project(":idea:idea-core")) { isTransitive = false }
compile(project(":idea:ide-common")) { isTransitive = false }
compile(project(":idea:idea-gradle")) { isTransitive = false }
compile(project(":compiler:util")) { isTransitive = false }
compile(project(":idea:idea-jps-common")) { isTransitive = false }
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
if (intellijUltimateEnabled) {
compileOnly(nodeJSPlugin())
compileOnly(intellijUltimateDep()) { includeJars("trove4j", "openapi", "platform-api", "platform-impl", "java-api", "java-impl", "idea", "util", "jdom") }
compileOnly(intellijUltimatePluginDep("CSS"))
compileOnly(intellijUltimatePluginDep("DatabaseTools"))
compileOnly(intellijUltimatePluginDep("JavaEE"))
compileOnly(intellijUltimatePluginDep("jsp"))
compileOnly(intellijUltimatePluginDep("PersistenceSupport"))
compileOnly(intellijUltimatePluginDep("Spring"))
compileOnly(intellijUltimatePluginDep("properties"))
compileOnly(intellijUltimatePluginDep("java-i18n"))
compileOnly(intellijUltimatePluginDep("gradle"))
compileOnly(intellijUltimatePluginDep("Groovy"))
compileOnly(intellijUltimatePluginDep("junit"))
compileOnly(intellijUltimatePluginDep("uml"))
compileOnly(intellijUltimatePluginDep("JavaScriptLanguage"))
compileOnly(intellijUltimatePluginDep("JavaScriptDebugger"))
}
testCompile(project(":kotlin-test:kotlin-test-jvm"))
testCompile(projectTests(":idea:idea-test-framework")) { isTransitive = false }
testCompile(project(":plugins:lint")) { isTransitive = false }
testCompile(project(":idea:idea-jvm")) { isTransitive = false }
testCompile(projectTests(":compiler:tests-common"))
testCompile(projectTests(":idea")) { isTransitive = false }
testCompile(projectTests(":generators:test-generator"))
testCompile(commonDep("junit:junit"))
testCompile(project(":idea:idea-native")) { isTransitive = false }
testCompile(project(":idea:idea-gradle-native")) { isTransitive = false }
testRuntime(project(":kotlin-native:kotlin-native-library-reader")) { isTransitive = false }
testRuntime(project(":kotlin-native:kotlin-native-utils")) { isTransitive = false }
if (intellijUltimateEnabled) {
testCompileOnly(intellijUltimateDep())
}
testCompile(commonDep("org.jetbrains.kotlinx", "kotlinx-coroutines-core")) { isTransitive = false }
testRuntime(project(":kotlin-reflect"))
testRuntime(project(":kotlin-script-runtime"))
testRuntimeOnly(project(":kotlin-compiler"))
testRuntime(project(":plugins:android-extensions-ide")) { isTransitive = false }
testRuntime(project(":plugins:android-extensions-compiler")) { isTransitive = false }
testRuntime(project(":plugins:annotation-based-compiler-plugins-ide-support")) { isTransitive = false }
testRuntime(project(":idea:idea-android")) { isTransitive = false }
testRuntime(project(":idea:idea-maven")) { isTransitive = false }
testRuntime(project(":idea:idea-jps-common")) { isTransitive = false }
testRuntime(project(":idea:jvm-debugger:eval4j")) { isTransitive = false }
testRuntime(project(":idea:jvm-debugger:jvm-debugger-util")) { isTransitive = false }
testRuntime(project(":idea:jvm-debugger:jvm-debugger-core")) { isTransitive = false }
testRuntime(project(":idea:jvm-debugger:jvm-debugger-evaluation")) { isTransitive = false }
testRuntime(project(":idea:jvm-debugger:jvm-debugger-sequence")) { isTransitive = false }
testRuntime(project(":idea:formatter")) { isTransitive = false }
testRuntime(project(":sam-with-receiver-ide-plugin")) { isTransitive = false }
testRuntime(project(":kotlin-sam-with-receiver-compiler-plugin")) { isTransitive = false }
testRuntime(project(":noarg-ide-plugin")) { isTransitive = false }
testRuntime(project(":kotlin-noarg-compiler-plugin")) { isTransitive = false }
testRuntime(project(":allopen-ide-plugin")) { isTransitive = false }
testRuntime(project(":kotlin-allopen-compiler-plugin")) { isTransitive = false }
testRuntime(project(":kotlin-scripting-idea")) { isTransitive = false }
testRuntime(project(":kotlin-scripting-compiler-impl")) { isTransitive = false }
testRuntime(project(":kotlinx-serialization-compiler-plugin")) { isTransitive = false }
testRuntime(project(":kotlinx-serialization-ide-plugin")) { isTransitive = false }
testRuntime(project(":plugins:kapt3-idea")) { isTransitive = false }
testRuntime(project(":plugins:uast-kotlin"))
testRuntime(project(":plugins:uast-kotlin-idea"))
testRuntime(intellijPluginDep("smali"))
if (intellijUltimateEnabled) {
testCompile(nodeJSPlugin())
testCompile(intellijUltimatePluginDep("CSS"))
testCompile(intellijUltimatePluginDep("DatabaseTools"))
testCompile(intellijUltimatePluginDep("JavaEE"))
testCompile(intellijUltimatePluginDep("jsp"))
testCompile(intellijUltimatePluginDep("PersistenceSupport"))
testCompile(intellijUltimatePluginDep("Spring"))
testCompile(intellijUltimatePluginDep("uml"))
testCompile(intellijUltimatePluginDep("JavaScriptLanguage"))
testCompile(intellijUltimatePluginDep("JavaScriptDebugger"))
testCompile(intellijUltimatePluginDep("properties"))
testCompile(intellijUltimatePluginDep("java-i18n"))
testCompile(intellijUltimatePluginDep("gradle"))
testCompile(intellijUltimatePluginDep("Groovy"))
testCompile(intellijUltimatePluginDep("junit"))
testRuntime(intellijUltimatePluginDep("coverage"))
testRuntime(intellijUltimatePluginDep("maven"))
testRuntime(intellijUltimatePluginDep("android"))
testRuntime(intellijUltimatePluginDep("testng"))
testRuntime(intellijUltimatePluginDep("IntelliLang"))
testRuntime(intellijUltimatePluginDep("copyright"))
testRuntime(intellijUltimatePluginDep("java-decompiler"))
}
testRuntime(files("${System.getProperty("java.home")}/../lib/tools.jar"))
springClasspath(commonDep("org.springframework", "spring-core"))
springClasspath(commonDep("org.springframework", "spring-beans"))
springClasspath(commonDep("org.springframework", "spring-context"))
springClasspath(commonDep("org.springframework", "spring-tx"))
springClasspath(commonDep("org.springframework", "spring-web"))
ideaPlugin(project(":prepare:idea-plugin", configuration = "runtimeJar"))
}
val preparedResources = File(buildDir, "prepResources")
sourceSets {
"main" { projectDefault() }
"test" {
projectDefault()
resources.srcDir(preparedResources)
}
}
val ultimatePluginXmlContent: String by lazy {
val sectRex = Regex("""^\s*</?idea-plugin>\s*$""")
File(projectDir, "resources/META-INF/ultimate-plugin.xml")
.readLines()
.filterNot { it.matches(sectRex) }
.joinToString("\n")
}
val prepareResources by task<Copy> {
dependsOn(":idea:assemble")
from(ideaProjectResources, {
exclude("META-INF/plugin.xml")
})
into(preparedResources)
}
val preparePluginXml by task<Copy> {
dependsOn(":idea:assemble")
from(ideaProjectResources, { include("META-INF/plugin.xml") })
into(preparedResources)
filter {
it?.replace("<!-- ULTIMATE-PLUGIN-PLACEHOLDER -->", ultimatePluginXmlContent)
}
}
val jar = runtimeJar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
dependsOn(preparePluginXml)
dependsOn(ideaPlugin)
from(provider { zipTree(ideaPlugin.singleFile) }) {
exclude("META-INF/plugin.xml")
}
from(preparedResources, { include("META-INF/plugin.xml") })
from(mainSourceSet.output)
archiveName = "kotlin-plugin.jar"
}
val ideaPluginDir: File by rootProject.extra
val ideaUltimatePluginDir: File by rootProject.extra
task<Copy>("ideaUltimatePlugin") {
dependsOn(":ideaPlugin")
into(ideaUltimatePluginDir)
from(ideaPluginDir) { exclude("lib/kotlin-plugin.jar") }
from(jar, { into("lib") })
}
task("idea-ultimate-plugin") {
dependsOn("ideaUltimatePlugin")
doFirst { logger.warn("'$name' task is deprecated, use '${dependsOn.last()}' instead") }
}
task("ideaUltimatePluginTest") {
dependsOn("check")
}
projectTest {
dependsOn(prepareResources)
dependsOn(preparePluginXml)
workingDir = rootDir
doFirst {
if (intellijUltimateEnabled) {
systemProperty("idea.home.path", intellijUltimateRootDir().canonicalPath)
}
systemProperty("spring.classpath", springClasspath.asPath)
}
}
val generateTests by generator("org.jetbrains.kotlin.tests.GenerateUltimateTestsKt")
-39
View File
@@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/resources" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/dependencies" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="main-project-production" level="project" />
<orderEntry type="library" scope="TEST" name="main-project-tests" level="project" />
<orderEntry type="library" name="kotlin-runtime" level="project" />
<orderEntry type="library" name="kotlin-reflect" level="project" />
<orderEntry type="library" name="kotlin-script-runtime" level="project" />
<orderEntry type="library" name="javax.inject" level="project" />
<orderEntry type="library" scope="PROVIDED" name="css-support" level="project" />
<orderEntry type="library" scope="PROVIDED" name="database-support" level="project" />
<orderEntry type="library" scope="PROVIDED" name="javaee-support" level="project" />
<orderEntry type="library" scope="PROVIDED" name="jsp-support" level="project" />
<orderEntry type="library" scope="PROVIDED" name="persistence-support" level="project" />
<orderEntry type="library" scope="PROVIDED" name="spring-support" level="project" />
<orderEntry type="library" scope="PROVIDED" name="properties" level="project" />
<orderEntry type="library" scope="PROVIDED" name="java-i18n" level="project" />
<orderEntry type="library" scope="PROVIDED" name="gradle-and-groovy-plugin" level="project" />
<orderEntry type="library" scope="PROVIDED" name="junit-plugin" level="project" />
<orderEntry type="library" scope="PROVIDED" name="diagram-support" level="project" />
<orderEntry type="library" scope="PROVIDED" name="javascript-support" level="project" />
<orderEntry type="library" scope="PROVIDED" name="nodejs-support" level="project" />
<orderEntry type="library" scope="PROVIDED" name="javascript-debugger" level="project" />
<orderEntry type="library" scope="PROVIDED" name="intellij-core" level="project" />
<orderEntry type="library" name="idea-full" level="project" />
<orderEntry type="library" name="protobuf" level="project" />
<orderEntry type="library" name="javaslang" level="project" />
<orderEntry type="library" name="kotlinx-coroutines-core" level="project" />
</component>
</module>
@@ -1,10 +0,0 @@
<idea-plugin>
<extensions defaultExtensionNs="com.intellij">
<configurationType implementation="org.jetbrains.kotlin.idea.nodejs.protractor.KotlinProtractorConfigurationType"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.nodejs.mocha.KotlinMochaRunConfigurationProducer"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.nodejs.protractor.KotlinProtractorRunConfigurationProducer"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.nodejs.jest.KotlinJestRunConfigurationProducer"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.nodejs.cli.KotlinNodeJsRunConfigurationProducer"/>
</extensions>
</idea-plugin>
@@ -1,5 +0,0 @@
<idea-plugin>
<extensions defaultExtensionNs="org.intellij.intelliLang">
<injectionConfig config="injection/kotlinUltimateInjections.xml"/>
</extensions>
</idea-plugin>
@@ -1,3 +0,0 @@
<idea-plugin>
<depends optional="true" config-file="kotlin-nodejs.xml">NodeJS</depends>
</idea-plugin>
@@ -1,9 +0,0 @@
<html>
<body>
This inspection reports final Kotlin classes and functions annotated with Spring @Component, @Configuration or @Bean annotations.
<!-- tooltip end -->
<p>
<b>Deprecated</b>. This inspection is deprecated in favour of more robust <b>"Final declaration can't be overridden at runtime"</b> inspection.
</p>
</body>
</html>
@@ -1,7 +0,0 @@
<html>
<body>
Checks @ComponentScan (and similar annotations) for setup errors.
<!-- tooltip end -->
<p>
</body>
</html>
@@ -1 +0,0 @@
Checks Spring code configuration files setup in Spring facet.
@@ -1 +0,0 @@
Checks that autowired members are defined in valid Spring bean (@Component|@Service|...).
@@ -1 +0,0 @@
Checks autowiring problems in a bean class.
@@ -1,85 +0,0 @@
/*
* Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
* 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.nodejs.cli
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.execution.actions.RunConfigurationProducer
import com.intellij.openapi.module.Module
import com.intellij.openapi.util.Ref
import com.intellij.openapi.util.io.FileUtil
import com.intellij.psi.PsiElement
import com.jetbrains.nodejs.run.NodeJsRunConfiguration
import com.jetbrains.nodejs.run.NodeJsRunConfigurationType
import org.jetbrains.kotlin.idea.MainFunctionDetector
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationData
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationDataProvider
import org.jetbrains.kotlin.idea.js.asJsModule
import org.jetbrains.kotlin.idea.js.jsProductionOutputFilePath
import org.jetbrains.kotlin.idea.nodejs.TestElementPath
import org.jetbrains.kotlin.idea.nodejs.getNodeJsEnvironmentVars
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.run.addBuildTask
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
class NodeJsConfigData(
override val element: PsiElement,
override val module: Module,
override val jsOutputFilePath: String
) : KotlinJSRunConfigurationData
private class KotlinNodeJsRunConfigurationProducer :
RunConfigurationProducer<NodeJsRunConfiguration>(NodeJsRunConfigurationType.getInstance()),
KotlinJSRunConfigurationDataProvider<NodeJsConfigData> {
private val ConfigurationContext?.isAcceptable: Boolean
get() {
val original = this?.getOriginalConfiguration(null)
return original == null || original is NodeJsRunConfiguration
}
override val isForTests: Boolean
get() = false
override fun getConfigurationData(context: ConfigurationContext): NodeJsConfigData? {
if (!context.isAcceptable) return null
val element = context.psiLocation ?: return null
val module = context.module?.asJsModule() ?: return null
val jsFilePath = module.jsProductionOutputFilePath ?: return null
val declaration = element.getNonStrictParentOfType<KtNamedDeclaration>()
if (declaration is KtNamedFunction) {
val detector = MainFunctionDetector(declaration.languageVersionSettings) { it.resolveToDescriptorIfAny() }
if (!detector.isMain(declaration, false)) return null
} else if (!TestElementPath.isModuleAssociatedDir(element, module)) return null
return NodeJsConfigData(element, module, jsFilePath)
}
override fun setupConfigurationFromContext(
configuration: NodeJsRunConfiguration,
context: ConfigurationContext,
sourceElement: Ref<PsiElement>
): Boolean {
val psiElement = sourceElement.get() ?: return false
val configData = getConfigurationData(context) ?: return false
if (configuration.workingDirectory.isNullOrBlank()) {
configuration.workingDirectory = FileUtil.toSystemDependentName(psiElement.project.baseDir.path)
}
configuration.inputPath = configData.jsOutputFilePath
configuration.envs = configData.module.getNodeJsEnvironmentVars(false).envs
configuration.setGeneratedName()
configuration.addBuildTask()
return true
}
override fun isConfigurationFromContext(configuration: NodeJsRunConfiguration, context: ConfigurationContext): Boolean {
val configData = getConfigurationData(context) ?: return false
return configuration.inputPath == configData.jsOutputFilePath
}
}
@@ -1,120 +0,0 @@
/*
* Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
* 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.nodejs.jest
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.javascript.jest.JestRunConfiguration
import com.intellij.javascript.jest.JestRunConfigurationProducer
import com.intellij.javascript.jest.JestRunSettings
import com.intellij.javascript.jest.scope.JestScopeKind
import com.intellij.openapi.module.Module
import com.intellij.openapi.util.Ref
import com.intellij.openapi.util.io.FileUtil
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationData
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationDataProvider
import org.jetbrains.kotlin.idea.js.asJsModule
import org.jetbrains.kotlin.idea.js.jsTestOutputFilePath
import org.jetbrains.kotlin.idea.nodejs.TestElementInfo
import org.jetbrains.kotlin.idea.nodejs.TestElementPath
import org.jetbrains.kotlin.idea.nodejs.getNodeJsEnvironmentVars
import org.jetbrains.kotlin.idea.run.addBuildTask
import org.jetbrains.kotlin.idea.util.sourceRoots
typealias JestTestElementInfo = TestElementInfo<JestRunSettings>
class JestConfigData(
override val element: PsiElement,
override val module: Module,
override val jsOutputFilePath: String,
val testElementPath: TestElementPath
) : KotlinJSRunConfigurationData
class KotlinJestRunConfigurationProducer :
JestRunConfigurationProducer(),
KotlinJSRunConfigurationDataProvider<JestConfigData> {
private fun createTestElementRunInfo(
configData: JestConfigData,
originalSettings: JestRunSettings
): JestTestElementInfo {
val project = configData.module.project
val settings = if (originalSettings.workingDirSystemDependentPath.isBlank()) {
val workingDir = FileUtil.toSystemDependentName(project.baseDir.path)
originalSettings.toBuilder().setWorkingDir(workingDir).build()
} else originalSettings
val builder = settings.toBuilder()
builder.setTestFilePath(configData.jsOutputFilePath)
when (configData.testElementPath) {
is TestElementPath.BySuite -> {
val (suiteNames, testName) = configData.testElementPath
if (testName == null) {
builder.setScopeKind(JestScopeKind.SUITE)
builder.setTestNames(suiteNames)
} else {
builder.setScopeKind(JestScopeKind.TEST)
builder.setTestNames(suiteNames + testName)
}
}
is TestElementPath.BySingleFile -> {
builder.setScopeKind(JestScopeKind.TEST_FILE)
}
}
builder.setEnvData(configData.module.getNodeJsEnvironmentVars(true))
return JestTestElementInfo(builder.build(), configData.element)
}
override val isForTests: Boolean
get() = true
override fun getConfigurationData(
context: ConfigurationContext
): JestConfigData? {
val element = context.psiLocation ?: return null
val module = context.module?.asJsModule() ?: return null
if (module.sourceRoots.none { isTestRunnerPackageAvailableFor(module.project, it) }) return null
val testFilePath = module.jsTestOutputFilePath ?: return null
val testElementPath = TestElementPath.forElement(element, module) ?: return null
return JestConfigData(element, module, testFilePath, testElementPath)
}
override fun isConfigurationFromCompatibleContext(configuration: JestRunConfiguration, context: ConfigurationContext): Boolean {
val configData = getConfigurationData(context) ?: return false
val (thisRunSettings, _) = createTestElementRunInfo(configData, configuration.runSettings)
val thatRunSettings = configuration.runSettings
if (thisRunSettings.configFileSystemDependentPath != thatRunSettings.configFileSystemDependentPath) return false
if (thatRunSettings.scopeKind != thisRunSettings.scopeKind) return false
return when (thisRunSettings.scopeKind) {
JestScopeKind.ALL -> true
JestScopeKind.TEST_FILE -> thisRunSettings.testFileSystemDependentPath == thatRunSettings.testFileSystemDependentPath
JestScopeKind.SUITE, JestScopeKind.TEST ->
thisRunSettings.testFileSystemDependentPath == thatRunSettings.testFileSystemDependentPath &&
thisRunSettings.testNames == thatRunSettings.testNames
else -> false
}
}
override fun setupConfigurationFromCompatibleContext(
configuration: JestRunConfiguration,
context: ConfigurationContext,
sourceElement: Ref<PsiElement>
): Boolean {
val configData = getConfigurationData(context) ?: return false
val (runSettings, enclosingTestElement) = createTestElementRunInfo(configData, configuration.runSettings)
configuration.runSettings = runSettings
sourceElement.set(enclosingTestElement)
configuration.setGeneratedName()
configuration.addBuildTask()
return true
}
}
@@ -1,52 +0,0 @@
/*
* Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
* 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.nodejs
import com.intellij.openapi.module.Module
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.psi.PsiDirectory
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.util.projectStructure.getModuleDir
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
data class TestElementInfo<out Settings>(val runSettings: Settings, val enclosingTestElement: PsiElement)
sealed class TestElementPath {
data class BySuite(val suiteNames: List<String>, val testName: String?) : TestElementPath()
object BySingleFile : TestElementPath()
companion object {
fun isModuleAssociatedDir(element: PsiElement, module: Module): Boolean {
if (element !is PsiDirectory) return false
val virtualFile = element.virtualFile
return (module.getModuleDir() == virtualFile.path
|| virtualFile == ModuleRootManager.getInstance(module).contentRoots.singleOrNull())
}
fun forElement(element: PsiElement, module: Module): TestElementPath? {
if (isModuleAssociatedDir(element, module)) return TestElementPath.BySingleFile
val declaration = element.getNonStrictParentOfType<KtNamedDeclaration>() ?: return null
val klass = when (declaration) {
is KtClassOrObject -> declaration
is KtNamedFunction -> declaration.containingClassOrObject ?: return null
else -> return null
}
val suiteNames = klass.parentsWithSelf
.filterIsInstance<KtClassOrObject>()
.mapNotNull { it.name }
.toList()
.asReversed()
val testName = (declaration as? KtNamedFunction)?.name
return TestElementPath.BySuite(suiteNames, testName)
}
}
}
@@ -1,167 +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.nodejs.mocha
import com.intellij.execution.RunManager
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Ref
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiElement
import com.intellij.util.SmartList
import com.intellij.util.containers.SmartHashSet
import com.jetbrains.nodejs.mocha.MochaUtil
import com.jetbrains.nodejs.mocha.execution.*
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationData
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationDataProvider
import org.jetbrains.kotlin.idea.js.asJsModule
import org.jetbrains.kotlin.idea.js.jsTestOutputFilePath
import org.jetbrains.kotlin.idea.nodejs.TestElementInfo
import org.jetbrains.kotlin.idea.nodejs.TestElementPath
import org.jetbrains.kotlin.idea.nodejs.getNodeJsEnvironmentVars
import org.jetbrains.kotlin.idea.run.addBuildTask
import org.jetbrains.kotlin.idea.util.sourceRoots
private typealias MochaTestElementInfo = TestElementInfo<MochaRunSettings>
class MochaConfigData(
override val element: PsiElement,
override val module: Module,
override val jsOutputFilePath: String,
val testElementPath: TestElementPath
) : KotlinJSRunConfigurationData
class KotlinMochaRunConfigurationProducer : MochaRunConfigurationProducer(), KotlinJSRunConfigurationDataProvider<MochaConfigData> {
// Copied from MochaRunConfigurationProducer.collectMochaTestRoots()
private fun collectMochaTestRoots(project: Project): List<VirtualFile> {
return RunManager
.getInstance(project)
.getConfigurationsList(MochaConfigurationType.getInstance())
.filterIsInstance<MochaRunConfiguration>()
.mapNotNullTo(SmartList<VirtualFile>()) { configuration ->
val settings = configuration.runSettings
val path = when (settings.testKind) {
MochaTestKind.DIRECTORY -> settings.testDirPath
MochaTestKind.TEST_FILE,
MochaTestKind.SUITE,
MochaTestKind.TEST -> settings.testFilePath
else -> null
}
if (path.isNullOrBlank()) return@mapNotNullTo null
LocalFileSystem.getInstance().findFileByPath(path!!)
}
}
private fun createTestElementRunInfo(configData: MochaConfigData, originalSettings: MochaRunSettings): MochaTestElementInfo {
val project = configData.module.project
val settings = if (originalSettings.workingDir.isBlank()) {
val workingDir = FileUtil.toSystemDependentName(project.baseDir.path)
originalSettings.builder().setWorkingDir(workingDir).build()
} else originalSettings
val builder = settings.builder()
builder.setTestFilePath(configData.jsOutputFilePath)
if (settings.ui.isEmpty()) {
builder.setUi(MochaUtil.UI_BDD)
}
when (configData.testElementPath) {
is TestElementPath.BySuite -> {
val (suiteNames, testName) = configData.testElementPath
if (testName == null) {
builder.setTestKind(MochaTestKind.SUITE)
builder.setSuiteNames(suiteNames)
} else {
builder.setTestKind(MochaTestKind.TEST)
builder.setTestNames(suiteNames + testName)
}
}
is TestElementPath.BySingleFile -> {
builder.setTestKind(MochaTestKind.TEST_FILE)
}
}
builder.setEnvData(configData.module.getNodeJsEnvironmentVars(true))
return MochaTestElementInfo(builder.build(), configData.element)
}
override fun getConfigurationData(context: ConfigurationContext): MochaConfigData? {
val module = context.module?.asJsModule() ?: return null
val element = context.psiLocation ?: return null
val file = module.moduleFile ?: return null
val project = module.project
val testFilePath = module.jsTestOutputFilePath ?: return null
val testElementPath = TestElementPath.forElement(element, module) ?: return null
val configData = MochaConfigData(element, module, testFilePath, testElementPath)
if (context.getOriginalConfiguration(MochaConfigurationType.getInstance()) is MochaRunConfiguration) return configData
if (module.sourceRoots.any { isTestRunnerPackageAvailableFor(project, it) }) return configData
val roots = collectMochaTestRoots(project)
if (roots.isEmpty()) return null
val dirs = SmartHashSet<VirtualFile>()
for (root in roots) {
when {
root.isDirectory -> dirs.add(root)
root == file -> return configData
}
}
return if (VfsUtilCore.isUnder(file, dirs)) configData else null
}
override val isForTests: Boolean
get() = true
override fun isConfigurationFromCompatibleContext(configuration: MochaRunConfiguration, context: ConfigurationContext): Boolean {
val configData = getConfigurationData(context) ?: return false
val (thisRunSettings, _) = createTestElementRunInfo(configData, configuration.runSettings)
val thatRunSettings = configuration.runSettings
val thisTestKind = thisRunSettings.testKind
if (thisTestKind != thatRunSettings.testKind) return false
return when {
thisTestKind == MochaTestKind.DIRECTORY -> thisRunSettings.testDirPath == thatRunSettings.testDirPath
thisTestKind == MochaTestKind.PATTERN -> thisRunSettings.testFilePattern == thatRunSettings.testFilePattern
thisTestKind == MochaTestKind.TEST_FILE -> thisRunSettings.testFilePath == thatRunSettings.testFilePath
thisTestKind == MochaTestKind.SUITE -> thisRunSettings.testFilePath == thatRunSettings.testFilePath && thisRunSettings.suiteNames == thatRunSettings.suiteNames
thisTestKind != MochaTestKind.TEST -> false
else -> thisRunSettings.testFilePath == thatRunSettings.testFilePath && thisRunSettings.testNames == thatRunSettings.testNames
}
}
override fun setupConfigurationFromCompatibleContext(
configuration: MochaRunConfiguration,
context: ConfigurationContext,
sourceElement: Ref<PsiElement>
): Boolean {
val configData = getConfigurationData(context) ?: return false
val (runSettings, enclosingTestElement) = createTestElementRunInfo(configData, configuration.runSettings)
if (runSettings.testKind == MochaTestKind.DIRECTORY) return false
configuration.runSettings = runSettings
sourceElement.set(enclosingTestElement)
configuration.setGeneratedName()
configuration.addBuildTask()
return true
}
}
@@ -1,51 +0,0 @@
/*
* Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
* 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.nodejs
import com.intellij.execution.configuration.EnvironmentVariablesData
import com.intellij.openapi.module.Module
import com.intellij.openapi.roots.CompilerModuleExtension
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.util.io.FileUtil
import org.jetbrains.kotlin.idea.js.shouldUseJpsOutput
import org.jetbrains.kotlin.utils.addIfNotNull
import java.io.File
import java.util.*
const val NODE_PATH_VAR = "NODE_PATH"
fun Module.getNodeJsEnvironmentVars(isForTests: Boolean): EnvironmentVariablesData {
val nodeJsClasspath = getNodeJsClasspath(this, isForTests).joinToString(File.pathSeparator) {
val basePath = project.basePath ?: return@joinToString it
FileUtil.getRelativePath(basePath, it, '/') ?: it
}
return EnvironmentVariablesData.create(mapOf(NODE_PATH_VAR to nodeJsClasspath), true)
}
private fun addSingleModulePaths(
target: Module,
isForTests: Boolean,
result: MutableList<String>
) {
val compilerExtension = CompilerModuleExtension.getInstance(target) ?: return
if (isForTests) {
result.addIfNotNull(compilerExtension.compilerOutputPath?.path)
result.addIfNotNull(compilerExtension.compilerOutputPathForTests?.let { "${it.path}/lib" })
} else {
result.addIfNotNull(compilerExtension.compilerOutputPath?.let { "${it.path}/lib" })
}
}
private fun getNodeJsClasspath(module: Module, isForTests: Boolean): List<String> {
if (!module.shouldUseJpsOutput) return emptyList()
val result = ArrayList<String>()
ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule {
addSingleModulePaths(it, isForTests, result)
true
}
return result
}
@@ -1,52 +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.nodejs.protractor
import com.intellij.execution.configuration.ConfigurationFactoryEx
import com.intellij.execution.configurations.ConfigurationFactory
import com.intellij.execution.configurations.ConfigurationTypeBase
import com.intellij.execution.configurations.ConfigurationTypeUtil
import com.intellij.openapi.project.Project
import icons.JavaScriptLanguageIcons
class KotlinProtractorConfigurationType : ConfigurationTypeBase(
"KotlinJavaScriptTestRunnerProtractor",
"Protractor (Kotlin)",
NAME,
JavaScriptLanguageIcons.Protractor.Protractor
) {
init {
addFactory(object : ConfigurationFactoryEx<KotlinProtractorRunConfiguration>(this) {
override fun createTemplateConfiguration(project: Project) = KotlinProtractorRunConfiguration(project, this, NAME)
override fun isConfigurationSingletonByDefault() = true
override fun canConfigurationBeSingleton() = false
override fun onNewConfigurationCreated(configuration: KotlinProtractorRunConfiguration) = configuration.initialize()
})
}
companion object {
private val NAME = "Protractor"
fun getInstance() = ConfigurationTypeUtil.findConfigurationType(KotlinProtractorConfigurationType::class.java)
val factory: ConfigurationFactory
get() = getInstance().configurationFactories.first()
}
}
@@ -1,104 +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.nodejs.protractor
import com.intellij.execution.Executor
import com.intellij.execution.configurations.ConfigurationFactory
import com.intellij.execution.configurations.LocatableConfigurationBase
import com.intellij.execution.configurations.RuntimeConfigurationError
import com.intellij.execution.runners.ExecutionEnvironment
import com.intellij.javascript.nodejs.interpreter.local.NodeJsLocalInterpreter
import com.intellij.javascript.nodejs.util.NodePackage
import com.intellij.javascript.protractor.ProtractorUtil
import com.intellij.openapi.project.Project
import com.intellij.util.PathUtil
import org.jdom.Element
import org.jetbrains.kotlin.idea.run.LocatableConfigurationBaseAny
import java.io.File
// Based on com.intellij.javascript.protractor.ProtractorRunConfiguration
class KotlinProtractorRunConfiguration(
project: Project,
factory: ConfigurationFactory,
name: String
) : LocatableConfigurationBaseAny(project, factory, name) {
var runSettings = KotlinProtractorRunSettings()
val protractorPackage: NodePackage
get() {
val project = project
val interpreter = runSettings.interpreterRef.resolve(project)
return ProtractorUtil.getProtractorPackage(project, null, interpreter, true)
}
override fun getState(executor: Executor, environment: ExecutionEnvironment) =
KotlinProtractorRunState(this, environment, protractorPackage)
override fun getConfigurationEditor() = KotlinProtractorRunConfigurationEditor(project)
override fun readExternal(element: Element) {
super.readExternal(element)
runSettings = KotlinProtractorRunSettings.readFromXML(element)
}
override fun writeExternal(element: Element) {
super.writeExternal(element)
runSettings.writeToXML(element)
}
fun initialize() {
setNameChangedByUser(false)
}
override fun checkConfiguration() {
val isOptionalConfig = runSettings.testFileSystemDependentPath.isNotBlank() || runSettings.seleniumAddress.isNotBlank()
if (isOptionalConfig) {
validatePath("test file", runSettings.testFileSystemDependentPath, true, false)
if (runSettings.seleniumAddress.isBlank()) {
throw RuntimeConfigurationError("Unspecified Selenium address")
}
}
if (!isOptionalConfig || runSettings.configFileSystemDependentPath.isNotBlank()) {
validatePath("configuration file", runSettings.configFileSystemDependentPath, true, false)
}
val interpreter = runSettings.interpreterRef.resolve(project)
NodeJsLocalInterpreter.checkForRunConfiguration(interpreter)
validatePath("protractor package", protractorPackage.systemDependentPath, true, true)
}
override fun suggestedName(): String? {
val name = PathUtil.getFileName(runSettings.testFileSystemDependentPath)
return if (name.isNotBlank()) name else null
}
private fun validatePath(name: String,
path: String?,
shouldBeAbsolute: Boolean,
shouldBeDirectory: Boolean
) {
if (path.isNullOrBlank()) throw RuntimeConfigurationError("Unspecified " + name)
val file = File(path!!)
if (shouldBeAbsolute && !file.isAbsolute) throw RuntimeConfigurationError("No such " + name)
val exists = if (shouldBeDirectory) file.isDirectory else file.isFile
if (!exists) throw RuntimeConfigurationError("No such " + name)
}
}
@@ -1,144 +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.nodejs.protractor
import com.intellij.execution.configuration.EnvironmentVariablesTextFieldWithBrowseButton
import com.intellij.javascript.nodejs.interpreter.NodeJsInterpreterField
import com.intellij.javascript.nodejs.util.NodePackageField
import com.intellij.javascript.protractor.ProtractorUtil
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
import com.intellij.openapi.options.SettingsEditor
import com.intellij.openapi.options.ex.SingleConfigurableEditor
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.DialogWrapper
import com.intellij.openapi.util.io.FileUtil
import com.intellij.ui.RawCommandLineEditor
import com.intellij.ui.TextFieldWithHistoryWithBrowseButton
import com.intellij.util.containers.ContainerUtil
import com.intellij.util.ui.FormBuilder
import com.intellij.util.ui.JBUI
import com.intellij.util.ui.SwingHelper
import javax.swing.*
import java.util.Collections
// Based com.intellij.javascript.protractor.ProtractorRunConfigurationEditor
class KotlinProtractorRunConfigurationEditor(private val myProject: Project) : SettingsEditor<KotlinProtractorRunConfiguration>() {
private val testFilePathTextFieldWithBrowseButton: TextFieldWithHistoryWithBrowseButton
private val seleniumAddressTextField: JTextField
private val extraOptionsEditor: RawCommandLineEditor
private val configPathTextFieldWithBrowseButton: TextFieldWithHistoryWithBrowseButton
private val interpreterField: NodeJsInterpreterField
private val protractorPackageField: NodePackageField
private val envVarsComponent: EnvironmentVariablesTextFieldWithBrowseButton
private val panel: JPanel
init {
testFilePathTextFieldWithBrowseButton = createTestFileTextField(myProject)
seleniumAddressTextField = JTextField()
extraOptionsEditor = RawCommandLineEditor().apply { dialogCaption = "Extra Protractor Options" }
configPathTextFieldWithBrowseButton = createConfigurationFileTextField(myProject)
interpreterField = NodeJsInterpreterField(myProject, false)
protractorPackageField = NodePackageField(myProject, ProtractorUtil.PACKAGE_NAME) { interpreterField.interpreter }
envVarsComponent = EnvironmentVariablesTextFieldWithBrowseButton()
panel = FormBuilder()
.setAlignLabelOnRight(false)
.addLabeledComponent("&Test file:", testFilePathTextFieldWithBrowseButton)
.addLabeledComponent("&Selenium address:", seleniumAddressTextField)
.addLabeledComponent("E&xtra Protractor options:", extraOptionsEditor)
.addComponent(JSeparator(), JBUI.scale(8))
.addLabeledComponent("&Configuration file:", configPathTextFieldWithBrowseButton)
.addComponent(JSeparator(), JBUI.scale(8))
.addLabeledComponent("Node &interpreter:", interpreterField, JBUI.scale(8))
.addLabeledComponent("&Protractor package:", protractorPackageField)
.addLabeledComponent("&Environment variables:", envVarsComponent)
.panel
}
private fun createConfigurationFileTextField(project: Project) = TextFieldWithHistoryWithBrowseButton().apply {
val textFieldWithHistory = childComponent
textFieldWithHistory.setHistorySize(-1)
textFieldWithHistory.setMinimumAndPreferredWidth(0)
SwingHelper.addHistoryOnExpansion(textFieldWithHistory) {
val newFiles = ProtractorUtil.listPossibleConfigFilesInProject(project)
val newFilePaths = ContainerUtil.map(newFiles) { file -> FileUtil.toSystemDependentName(file.path) }
Collections.sort(newFilePaths)
newFilePaths
}
SwingHelper.installFileCompletionAndBrowseDialog(
project,
this,
"Select Protractor Configuration File",
FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor()
)
}
private fun createTestFileTextField(project: Project) = TextFieldWithHistoryWithBrowseButton().apply {
val textFieldWithHistory = childComponent
textFieldWithHistory.setHistorySize(-1)
textFieldWithHistory.setMinimumAndPreferredWidth(0)
SwingHelper.installFileCompletionAndBrowseDialog(
project,
this,
"Select Protractor Configuration File",
FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor()
)
}
override fun resetEditorFrom(runConfiguration: KotlinProtractorRunConfiguration) {
with(runConfiguration.runSettings) {
testFilePathTextFieldWithBrowseButton.setTextAndAddToHistory(testFileSystemDependentPath)
seleniumAddressTextField.text = seleniumAddress
extraOptionsEditor.text = extraOptions
configPathTextFieldWithBrowseButton.setTextAndAddToHistory(configFileSystemDependentPath)
interpreterField.interpreterRef = interpreterRef
protractorPackageField.selected = runConfiguration.protractorPackage
envVarsComponent.data = envData
}
updatePreferredWidth()
}
private fun updatePreferredWidth() {
val dialogWrapper = DialogWrapper.findInstance(panel)
if (dialogWrapper is SingleConfigurableEditor) {
// dialog for single run configuration
interpreterField.setPreferredWidthToFitText()
protractorPackageField.setPreferredWidthToFitText()
SwingHelper.setPreferredWidthToFitText(testFilePathTextFieldWithBrowseButton)
SwingHelper.setPreferredWidthToFitText(seleniumAddressTextField)
SwingHelper.setPreferredWidthToFitText(configPathTextFieldWithBrowseButton)
ApplicationManager.getApplication().invokeLater { SwingHelper.adjustDialogSizeToFitPreferredSize(dialogWrapper) }
}
}
override fun applyEditorTo(runConfiguration: KotlinProtractorRunConfiguration) {
ProtractorUtil.setProtractorPackage(myProject, protractorPackageField.selected)
runConfiguration.runSettings = runConfiguration.runSettings.copy(
interpreterRef = interpreterField.interpreterRef,
configFilePath = configPathTextFieldWithBrowseButton.text,
testFilePath = testFilePathTextFieldWithBrowseButton.text,
seleniumAddress = seleniumAddressTextField.text,
extraOptions = extraOptionsEditor.text,
envData = envVarsComponent.data
)
}
override fun createEditor() = panel
}
@@ -1,79 +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.nodejs.protractor
import com.intellij.execution.actions.CompatibleRunConfigurationProducer
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.openapi.module.Module
import com.intellij.openapi.util.Ref
import com.intellij.openapi.util.io.FileUtil
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationData
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationDataProvider
import org.jetbrains.kotlin.idea.js.asJsModule
import org.jetbrains.kotlin.idea.js.jsTestOutputFilePath
import org.jetbrains.kotlin.idea.nodejs.TestElementPath
import org.jetbrains.kotlin.idea.nodejs.getNodeJsEnvironmentVars
import org.jetbrains.kotlin.idea.run.addBuildTask
class ProtractorConfigData(
override val element: PsiElement,
override val module: Module,
override val jsOutputFilePath: String
) : KotlinJSRunConfigurationData
class KotlinProtractorRunConfigurationProducer :
CompatibleRunConfigurationProducer<KotlinProtractorRunConfiguration>(KotlinProtractorConfigurationType.getInstance()),
KotlinJSRunConfigurationDataProvider<ProtractorConfigData> {
override val isForTests: Boolean
get() = true
override fun getConfigurationData(
context: ConfigurationContext
): ProtractorConfigData? {
val module = context.module?.asJsModule() ?: return null
val element = context.psiLocation ?: return null
if (!TestElementPath.isModuleAssociatedDir(element, module)) return null
val testFilePath = module.jsTestOutputFilePath ?: return null
return ProtractorConfigData(element, module, testFilePath)
}
override fun isConfigurationFromCompatibleContext(
configuration: KotlinProtractorRunConfiguration,
context: ConfigurationContext
): Boolean {
val configData = getConfigurationData(context) ?: return false
return configuration.runSettings.testFileSystemDependentPath == FileUtil.toSystemDependentName(configData.jsOutputFilePath)
}
override fun setupConfigurationFromCompatibleContext(
configuration: KotlinProtractorRunConfiguration,
context: ConfigurationContext,
sourceElement: Ref<PsiElement>
): Boolean {
val element = context.psiLocation ?: return false
val configData = getConfigurationData(context) ?: return false
sourceElement.set(element)
configuration.runSettings = configuration.runSettings.copy(
testFilePath = configData.jsOutputFilePath,
envData = configData.module.getNodeJsEnvironmentVars(true)
)
configuration.name = configuration.suggestedName() ?: "Unknown"
configuration.addBuildTask()
return true
}
}
@@ -1,63 +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.nodejs.protractor
import com.intellij.execution.configuration.EnvironmentVariablesData
import com.intellij.javascript.nodejs.interpreter.NodeJsInterpreterRef
import com.intellij.openapi.util.JDOMExternalizerUtil.*
import com.intellij.openapi.util.io.FileUtil
import org.jdom.Element
data class KotlinProtractorRunSettings(
val interpreterRef: NodeJsInterpreterRef = NodeJsInterpreterRef.createProjectRef(),
private val configFilePath: String = "",
private val testFilePath: String = "",
val seleniumAddress: String = "",
val extraOptions: String = "",
val envData: EnvironmentVariablesData = EnvironmentVariablesData.DEFAULT
) {
val configFileSystemDependentPath get() = FileUtil.toSystemDependentName(configFilePath)
val testFileSystemDependentPath get() = FileUtil.toSystemDependentName(testFilePath)
fun writeToXML(element: Element) {
addElementWithValueAttribute(element, "config-file", FileUtil.toSystemIndependentName(configFileSystemDependentPath))
addElementWithValueAttribute(element, "test-file", FileUtil.toSystemIndependentName(testFileSystemDependentPath))
addElementWithValueAttribute(element, "selenium-address", seleniumAddress)
addElementWithValueAttribute(element, "extra-protractor-options", extraOptions)
addElementWithValueAttribute(element, "node-interpreter", interpreterRef.referenceName)
envData.writeExternal(element)
}
companion object {
fun readFromXML(element: Element): KotlinProtractorRunSettings {
val configFilePath = getFirstChildValueAttribute(element, "config-file")
val testFilePath = getFirstChildValueAttribute(element, "test-file")
val seleniumAddress = getFirstChildValueAttribute(element, "selenium-address")
val extraOptions = getFirstChildValueAttribute(element, "extra-protractor-options")
val interpreterRefName = getFirstChildValueAttribute(element, "node-interpreter")
val envData = EnvironmentVariablesData.readExternal(element)
return KotlinProtractorRunSettings(
NodeJsInterpreterRef.create(interpreterRefName ?: "project"),
configFilePath ?: "",
testFilePath ?: "",
seleniumAddress ?: "",
extraOptions ?: "",
envData
)
}
}
}
@@ -1,178 +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.nodejs.protractor
import com.intellij.execution.DefaultExecutionResult
import com.intellij.execution.ExecutionException
import com.intellij.execution.ExecutionResult
import com.intellij.execution.Executor
import com.intellij.execution.configurations.GeneralCommandLine
import com.intellij.execution.configurations.RunProfileState
import com.intellij.execution.process.ProcessHandler
import com.intellij.execution.process.ProcessTerminatedListener
import com.intellij.execution.runners.ExecutionEnvironment
import com.intellij.execution.testframework.TestConsoleProperties
import com.intellij.execution.testframework.autotest.ToggleAutoTestAction
import com.intellij.execution.testframework.sm.SMCustomMessagesParsing
import com.intellij.execution.testframework.sm.SMTestRunnerConnectionUtil
import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties
import com.intellij.execution.testframework.sm.runner.SMTestLocator
import com.intellij.execution.ui.ConsoleView
import com.intellij.javascript.HelperFilesLocator
import com.intellij.javascript.nodejs.NodeCommandLineUtil
import com.intellij.javascript.nodejs.debug.NodeLocalDebugRunProfileState
import com.intellij.javascript.nodejs.interpreter.local.NodeJsLocalInterpreter
import com.intellij.javascript.nodejs.util.NodePackage
import com.intellij.javascript.protractor.ProtractorConsoleFilter
import com.intellij.javascript.protractor.ProtractorOutputToGeneralTestEventsConverter
import com.intellij.javascript.protractor.ProtractorUtil
import com.intellij.javascript.testFramework.navigation.JSTestLocationProvider
import com.intellij.lang.javascript.buildTools.base.JsbtUtil
import com.intellij.openapi.util.Disposer
import com.intellij.util.PathUtil
import com.intellij.util.execution.ParametersListUtil
import java.io.File
import java.io.IOException
import java.nio.charset.StandardCharsets
class KotlinProtractorRunState(
private val runConfiguration: KotlinProtractorRunConfiguration,
private val environment: ExecutionEnvironment,
private val protractorPackage: NodePackage
) : RunProfileState, NodeLocalDebugRunProfileState {
companion object {
val FRAMEWORK_NAME = "KotlinProtractorJavaScriptTestRunner"
private val INTELLIJ_CONFIG_FILE_PATH = "protractor-intellij/lib/protractor-intellij-config.js"
}
private val project = runConfiguration.project
private val runSettings = runConfiguration.runSettings
override fun execute(debugPort: Int): ExecutionResult {
val interpreter = runSettings.interpreterRef.resolveAsLocal(project)
val commandLine = createCommandLine(interpreter, debugPort)
val processHandler = NodeCommandLineUtil.createProcessHandler(commandLine, false)
val consoleView = createSmtRunnerConsoleView(commandLine.workDirectory)
ProcessTerminatedListener.attach(processHandler)
consoleView.attachToProcess(processHandler)
foldCommandLine(consoleView, processHandler)
val executionResult = DefaultExecutionResult(consoleView, processHandler)
executionResult.setRestartActions(ToggleAutoTestAction())
return executionResult
}
private fun createSmtRunnerConsoleView(workingDirectory: File?): ConsoleView {
val testConsoleProperties = ProtractorConsoleProperties(runConfiguration, environment.executor, JSTestLocationProvider())
val consoleView = SMTestRunnerConnectionUtil.createConsole(FRAMEWORK_NAME, testConsoleProperties)
consoleView.addMessageFilter(ProtractorConsoleFilter(project, workingDirectory))
Disposer.register(environment, consoleView)
return consoleView
}
override fun foldCommandLine(consoleView: ConsoleView, processHandler: ProcessHandler) {
val configFileName = PathUtil.getFileName(runSettings.configFileSystemDependentPath)
val testFileName = PathUtil.getFileName(runSettings.testFileSystemDependentPath)
val seleniumAddress = runSettings.seleniumAddress
val parameters = ArrayList<String>().apply {
add("protractor")
if (configFileName.isNotBlank()) {
add(configFileName)
}
if (testFileName.isNotBlank()) {
add("--specs=$testFileName")
}
if (seleniumAddress.isNotBlank()) {
add("--seleniumAddress=$seleniumAddress")
}
addAll(ParametersListUtil.parse(runSettings.extraOptions.trim()))
}
val foldedCommandLine = ParametersListUtil.join(parameters)
JsbtUtil.foldCommandLine(consoleView, processHandler, foldedCommandLine)
}
private fun createCommandLine(interpreter: NodeJsLocalInterpreter, debugPort: Int): GeneralCommandLine {
val commandLine = GeneralCommandLine().apply { charset = StandardCharsets.UTF_8 }
runSettings.envData.configureCommandLine(commandLine, true)
val originalConfigFilePath = runSettings.configFileSystemDependentPath
val testFilePath = runSettings.testFileSystemDependentPath
val seleniumAddress = runSettings.seleniumAddress
val withConfigFile = originalConfigFilePath.isNotBlank()
commandLine.setWorkDirectory(project.basePath)
commandLine.exePath = interpreter.interpreterSystemDependentPath
NodeCommandLineUtil.addNodeOptionsForDebugging(commandLine, emptyList(), debugPort, true, interpreter, true)
NodeCommandLineUtil.configureUsefulEnvironment(commandLine)
commandLine.addParameter(ProtractorUtil.getProtractorMainJsFile(protractorPackage).absolutePath)
val intellijConfigFile = try {
HelperFilesLocator.getFileRelativeToHelpersDir(INTELLIJ_CONFIG_FILE_PATH)
}
catch (e: IOException) {
throw ExecutionException("Cannot locate wrapper config file", e)
}
commandLine.addParameter(intellijConfigFile.absolutePath)
val actualConfigFilePath = if (withConfigFile) {
originalConfigFilePath
}
else {
val tempConfigFile = File.createTempFile("protractor", "conf.js")
tempConfigFile.writeText("exports.config = {}")
tempConfigFile.absolutePath
}
commandLine.addParameter("--intellijOriginalConfigFile=$actualConfigFilePath")
if (testFilePath.isNotBlank()) {
commandLine.addParameter("--specs=$testFilePath")
}
if (seleniumAddress.isNotBlank()) {
commandLine.addParameter("--seleniumAddress=$seleniumAddress")
}
commandLine.addParameters(ParametersListUtil.parse(runSettings.extraOptions.trim()))
commandLine.addParameter("--disableChecks")
return commandLine
}
private class ProtractorConsoleProperties(
configuration: KotlinProtractorRunConfiguration,
executor: Executor,
private val myLocator: SMTestLocator
) : SMTRunnerConsoleProperties(configuration, FRAMEWORK_NAME, executor), SMCustomMessagesParsing {
init {
isUsePredefinedMessageFilter = false
setIfUndefined(TestConsoleProperties.HIDE_PASSED_TESTS, false)
setIfUndefined(TestConsoleProperties.HIDE_IGNORED_TEST, true)
setIfUndefined(TestConsoleProperties.SCROLL_TO_SOURCE, true)
setIfUndefined(TestConsoleProperties.SELECT_FIRST_DEFECT, true)
isIdBasedTestTree = true
isPrintTestingStartedTime = false
}
override fun getTestLocator() = myLocator
override fun createTestEventsConverter(testFrameworkName: String, consoleProperties: TestConsoleProperties) =
ProtractorOutputToGeneralTestEventsConverter(testFrameworkName, consoleProperties.isEditable)
}
}
@@ -1,10 +0,0 @@
<problems>
<problem>
<file>test.kt</file>
<line>9</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/test.kt" />
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Autowired members defined in invalid Spring bean (Kotlin)</problem_class>
<description>Autowired members must be defined in valid Spring bean (@Component|@Service|...)</description>
</problem>
</problems>
@@ -1,2 +0,0 @@
// INSPECTION_CLASS: com.intellij.spring.model.highlighting.autowire.SpringUastAutowiredMembersInspection
// FIXTURE_CLASS: org.jetbrains.kotlin.idea.spring.tests.SpringTestFixtureExtension
@@ -1,19 +0,0 @@
// WITH_RUNTIME
import org.springframework.stereotype.Component
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.context.support.SpringBeanAutowiringSupport
open class KtBean1 {
@Autowired var foo: Int = 1
}
@Component
open class KtBean2 {
@Autowired var foo: Int = 1
}
open class KtBean3 : SpringBeanAutowiringSupport() {
@Autowired var foo: Int = 1
}
@@ -1,25 +0,0 @@
// WITH_RUNTIME
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.beans.factory.annotation.Qualifier
@Configuration
@ComponentScan
open class InvalidAutowiredByTypeQualifiers
abstract class AbstractBarBean
@Component
open class BarBean1 : AbstractBarBean()
@Component
open class BarBean2 : AbstractBarBean()
@Component
open class IncompleteClassAutowiring() {
@Autowired
lateinit var : String
}
@@ -1,53 +0,0 @@
<problems>
<problem>
<file>invalidAutowiredResource.kt</file>
<line>24</line>
<entry_point TYPE="file" FQNAME="temp:///src/mismatchedType/mismatchedType.kt" />
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Autowiring for Bean Class (Kotlin)</problem_class>
<description>Could not autowire. Bean should be of 'invalidAutowiredResource.BarBean' type</description>
</problem>
<problem>
<file>invalidAutowiredResource.kt</file>
<line>31</line>
<entry_point TYPE="file" FQNAME="temp:///src/invalidAutowiredResource/invalidAutowiredResource.kt" />
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Autowiring for Bean Class (Kotlin)</problem_class>
<description>Cannot resolve bean 'fooBeannn'</description>
</problem>
<problem>
<file>invalidAutowiredQualifier.kt</file>
<line>23</line>
<entry_point TYPE="file" FQNAME="temp:///src/invalidAutowiredQualifier/invalidAutowiredQualifier.kt" />
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Autowiring for Bean Class (Kotlin)</problem_class>
<description>Could not autowire. Qualified bean must be of 'BarBean' type.</description>
</problem>
<problem>
<file>invalidAutowiredQualifier.kt</file>
<line>30</line>
<entry_point TYPE="file" FQNAME="temp:///src/invalidAutowiredQualifier/invalidAutowiredQualifier.kt" />
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Autowiring for Bean Class (Kotlin)</problem_class>
<description>Cannot find bean with qualifier 'fooBeannn'</description>
</problem>
<problem>
<file>invalidAutowiredQualifier.kt</file>
<line>37</line>
<entry_point TYPE="file" FQNAME="temp:///src/invalidAutowiredQualifier/invalidAutowiredQualifier.kt" />
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Autowiring for Bean Class (Kotlin)</problem_class>
<description>Cannot find bean qualified with @Qualifier</description>
</problem>
<problem>
<file>invalidAutowiredByType.kt</file>
<line>23</line>
<entry_point TYPE="file" FQNAME="temp:///src/invalidAutowiredByType/invalidAutowiredByType.kt" />
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Autowiring for Bean Class (Kotlin)</problem_class>
<description>Could not autowire. No beans of 'String' type found.</description>
</problem>
<problem>
<file>invalidAutowiredByType.kt</file>
<line>29</line>
<entry_point TYPE="file" FQNAME="temp:///src/invalidAutowiredByType/invalidAutowiredByType.kt" />
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Autowiring for Bean Class (Kotlin)</problem_class>
<description>&lt;html&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Could not autowire. There is more than one bean of 'AbstractBarBean' type.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign='top'&gt;Beans:&lt;/td&gt;&lt;td&gt;abstractBarBean&amp;nbsp;&amp;nbsp; (invalidAutowiredByType.kt)&lt;br&gt;barBean1&amp;nbsp;&amp;nbsp; (invalidAutowiredByType.kt)&lt;br&gt;barBean2&amp;nbsp;&amp;nbsp; (invalidAutowiredByType.kt)&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/html&gt;</description>
</problem>
</problems>
@@ -1,4 +0,0 @@
// INSPECTION_CLASS: com.intellij.spring.model.highlighting.autowire.SpringUastInjectionPointsAutowiringInspection
// FIXTURE_CLASS: org.jetbrains.kotlin.idea.spring.tests.SpringTestFixtureExtension
// CONFIGURE_SPRING_FILE_SET
// RUNTIME_WITH_FULL_JDK
@@ -1,30 +0,0 @@
// WITH_RUNTIME
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.beans.factory.annotation.Qualifier
@Configuration
@ComponentScan
open class InvalidAutowiredByTypeQualifiers
abstract class AbstractBarBean
@Component
open class BarBean1 : AbstractBarBean()
@Component
open class BarBean2 : AbstractBarBean()
@Component
open class NoAutowiredCandidates() {
@Autowired
lateinit var bean: String
}
@Component
open class MultipleAutowiredCandidates() {
@Autowired
lateinit var bean: AbstractBarBean
}
@@ -1,39 +0,0 @@
// WITH_RUNTIME
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.beans.factory.annotation.Qualifier
@Configuration
@ComponentScan
open class MismatchedTypes
@Component
open class FooBean
@Component
open class BarBean
@Component
open class MismatchedType() {
@Autowired
@Qualifier("fooBean")
lateinit var bean1: BarBean
}
@Component
open class UnresolvedBeanRef() {
@Autowired
@Qualifier("fooBeannn")
lateinit var bean1: FooBean
}
@Component
open class NamelessQualifier() {
@Autowired
@Qualifier
lateinit var bean1: FooBean
}
@@ -1,33 +0,0 @@
// WITH_RUNTIME
// FULL_JDK
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import javax.annotation.Resource
@Configuration
@ComponentScan
open class MismatchedTypes
@Component
open class FooBean
@Component
open class BarBean
@Component
open class MismatchedType() {
@Autowired
@Resource(name = "fooBean")
lateinit var bean1: BarBean
}
@Component
open class UnresolvedBeanRef() {
@Autowired
@Resource(name = "fooBeannn")
lateinit var bean1: FooBean
}
@@ -1,16 +0,0 @@
// WITH_RUNTIME
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
@Configuration
@ComponentScan
open class ParameterlessFunctions
@Component
open class ParameterlessFunction {
@Autowired fun foo() = 1
}
@@ -1,6 +0,0 @@
package foo
// Make PsiPackage not empty
fun dummyFun() {
}
@@ -1,18 +0,0 @@
<problems>
<problem>
<file>test.kt</file>
<line>14</line>
<package>&lt;default&gt;</package>
<entry_point TYPE="file" FQNAME="temp:///src/test/test.kt" />
<problem_class severity="ERROR" attribute_key="WRONG_REFERENCES_ATTRIBUTES">@ComponentScan setup</problem_class>
<description>Cannot resolve symbol 'bar'</description>
</problem>
<problem>
<file>test.kt</file>
<line>18</line>
<package>&lt;default&gt;</package>
<entry_point TYPE="file" FQNAME="temp:///src/test/test.kt" />
<problem_class severity="ERROR" attribute_key="WRONG_REFERENCES_ATTRIBUTES">@ComponentScan setup</problem_class>
<description>Cannot resolve symbol 'bar'</description>
</problem>
</problems>
@@ -1,3 +0,0 @@
// INSPECTION_CLASS: com.intellij.spring.model.highlighting.jam.SpringComponentScanInspection
// FIXTURE_CLASS: org.jetbrains.kotlin.idea.spring.tests.SpringTestFixtureExtension
// CONFIGURE_SPRING_FILE_SET
@@ -1,19 +0,0 @@
// WITH_RUNTIME
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
@Configuration
@ComponentScan(basePackages = arrayOf("foo"))
open class App1
@Configuration
@ComponentScan(basePackages = arrayOf("foo", "bar"))
open class App2
@Configuration
@ComponentScan(basePackages = arrayOf("bar"))
open class App3
@@ -1,18 +0,0 @@
<problems>
<problem>
<file>test.kt</file>
<line>12</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/test.kt" />
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Spring Facet Code Configuration (Kotlin)</problem_class>
<description>Application context not configured for this file</description>
</problem>
<problem>
<file>test.kt</file>
<line>15</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/test.kt" />
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Spring Facet Code Configuration (Kotlin)</problem_class>
<description>Application context not configured for this file</description>
</problem>
</problems>
@@ -1,3 +0,0 @@
// INSPECTION_CLASS: com.intellij.spring.model.highlighting.config.SpringFacetUastInspection
// FIXTURE_CLASS: org.jetbrains.kotlin.idea.spring.tests.SpringTestFixtureExtension
// FORBID_SPRING_FILE_SET_AUTOCONFIGURE
@@ -1,15 +0,0 @@
// WITH_RUNTIME
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
@Configuration
@ComponentScan
annotation class MyConfiguration
@Configuration
class Application1
@MyConfiguration
class Application2
@@ -1 +0,0 @@
com.intellij.spring.model.highlighting.autowire.SpringUastInjectionPointsAutowiringInspection
@@ -1,30 +0,0 @@
// "Add qualifier" "true"
// FIXTURE_CLASS: org.jetbrains.kotlin.idea.spring.tests.SpringTestFixtureExtension
// CONFIGURE_SPRING_FILE_SET
// WITH_RUNTIME
// DISABLE-ERRORS
// FORCE_PACKAGE_FOLDER
package pkg
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.beans.factory.annotation.Qualifier
@Configuration
@ComponentScan
open class InvalidAutowiredByTypeQualifiers
abstract class BaseBarBean
@Component
open class BarBean1 : BaseBarBean()
@Component
open class BarBean2 : BaseBarBean()
@Component
open class MultipleAutowiredCandidates() {
@Autowired
lateinit var <caret>bean: BaseBarBean
}
@@ -1,31 +0,0 @@
// "Add qualifier" "true"
// FIXTURE_CLASS: org.jetbrains.kotlin.idea.spring.tests.SpringTestFixtureExtension
// CONFIGURE_SPRING_FILE_SET
// WITH_RUNTIME
// DISABLE-ERRORS
// FORCE_PACKAGE_FOLDER
package pkg
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.beans.factory.annotation.Qualifier
@Configuration
@ComponentScan
open class InvalidAutowiredByTypeQualifiers
abstract class BaseBarBean
@Component
open class BarBean1 : BaseBarBean()
@Component
open class BarBean2 : BaseBarBean()
@Component
open class MultipleAutowiredCandidates() {
@Qualifier("barBean1")
@Autowired
lateinit var bean: BaseBarBean
}
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="a.KotlinSpringBean" name="xmlKotlinBean"/>
</beans>
-6
View File
@@ -1,6 +0,0 @@
// FIXTURE_CLASS: org.jetbrains.kotlin.idea.spring.tests.SpringTestFixtureExtension
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: usages
package a
class <caret>KotlinSpringBean
@@ -1 +0,0 @@
Usage in XML descriptor 5 <bean class="a.KotlinSpringBean" name="xmlKotlinBean"/>
@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="a.KotlinSpringBean" name="xmlKotlinBean">
<constructor-arg name="value" value="2"/>
<property name="value"/>
</bean>
</beans>
@@ -1,6 +0,0 @@
// FIXTURE_CLASS: org.jetbrains.kotlin.idea.spring.tests.SpringTestFixtureExtension
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtParameter
// OPTIONS: usages
package a
class KotlinSpringBean(var <caret>value: Int)
@@ -1,2 +0,0 @@
Usage in XML descriptor 6 <constructor-arg name="value" value="2"/>
Usage in XML descriptor 7 <property name="value"/>
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="a.KotlinSpringBean" name="xmlKotlinBean">
<property name="foo"/>
</bean>
</beans>
@@ -1,8 +0,0 @@
// FIXTURE_CLASS: org.jetbrains.kotlin.idea.spring.tests.SpringTestFixtureExtension
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtProperty
// OPTIONS: usages
package a
class KotlinSpringBean {
var <caret>foo: Int = 1
}
@@ -1 +0,0 @@
Usage in XML descriptor 6 <property name="foo"/>
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="a.KotlinSpringBean" name="xmlKotlinBean">
<property name="bar"/>
</bean>
</beans>
@@ -1,10 +0,0 @@
// FIXTURE_CLASS: org.jetbrains.kotlin.idea.spring.tests.SpringTestFixtureExtension
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtNamedFunction
// OPTIONS: usages
package a
class KotlinSpringBean {
fun <caret>setBar(value: Int) {
}
}
@@ -1 +0,0 @@
Usage in XML descriptor 6 <property name="bar"/>
@@ -1,11 +0,0 @@
// ELEMENT: lang
// CHAR: \n
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
@Configuration
@ComponentScan(basePackages = arrayOf("java.la<caret>ng"))
open class App {
}
@@ -1,11 +0,0 @@
// ELEMENT: lang
// CHAR: \n
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
@Configuration
@ComponentScan(basePackages = arrayOf("java.langng"))
open class App {
}
@@ -1,11 +0,0 @@
// ELEMENT: lang
// CHAR: \t
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
@Configuration
@ComponentScan(basePackages = arrayOf("java.la<caret>ng"))
open class App {
}
@@ -1,11 +0,0 @@
// ELEMENT: lang
// CHAR: \t
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
@Configuration
@ComponentScan(basePackages = arrayOf("java.lang"))
open class App {
}
@@ -1,12 +0,0 @@
// ELEMENT: existingBean1
// CHAR: \n
package bean
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Qualifier
class MultiHolder(var thing: String)
class AutoMultiUser() {
@Qualifier("exist<caret>ing") @Autowired lateinit var multi1: MultiHolder
}
@@ -1,12 +0,0 @@
// ELEMENT: existingBean1
// CHAR: \n
package bean
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Qualifier
class MultiHolder(var thing: String)
class AutoMultiUser() {
@Qualifier("existingBean1ing") @Autowired lateinit var multi1: MultiHolder
}
@@ -1,12 +0,0 @@
// ELEMENT: existingBean1
// CHAR: \t
package bean
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Qualifier
class MultiHolder(var thing: String)
class AutoMultiUser() {
@Qualifier("exist<caret>ing") @Autowired lateinit var multi1: MultiHolder
}
@@ -1,12 +0,0 @@
// ELEMENT: existingBean1
// CHAR: \t
package bean
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Qualifier
class MultiHolder(var thing: String)
class AutoMultiUser() {
@Qualifier("existingBean1") @Autowired lateinit var multi1: MultiHolder
}
@@ -1,7 +0,0 @@
// ELEMENT: singleton
package test
import org.springframework.context.annotation.Scope
@Scope("<caret>")
class ScopedBean
@@ -1,7 +0,0 @@
// ELEMENT: singleton
package test
import org.springframework.context.annotation.Scope
@Scope("singleton")
class ScopedBean
@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="fooBean" class="java.lang.String"/>
<bean id="barBean" class="java.lang.String"/>
<bean id="scopedBean" class="test.ScopedBean"/>
<bean class="bean.MultiHolder" name="existingBean1">
<constructor-arg name="thing" value="1"/>
</bean>
<bean class="bean.MultiHolder" name="existingBean2">
<constructor-arg name="thing" value="2"/>
</bean>
<bean class="bean.MultiHolder" name="anotherBean">
<constructor-arg name="thing" value="0"/>
</bean>
<bean class="bean.AutoMultiUser" name="existingBean3">
</bean>
</beans>
@@ -1,14 +0,0 @@
// ELEMENT: fooBean
// CHAR: \n
import org.springframework.beans.factory.BeanFactory
import org.springframework.beans.factory.xml.XmlBeanFactory
import org.springframework.core.io.FileSystemResource
import org.springframework.core.io.Resource
class FooBeanClass {
init {
val configFile = FileSystemResource("spring-config.xml")
val factory = XmlBeanFactory(configFile)
factory.getBean("fo<caret>o")
}
}
@@ -1,14 +0,0 @@
// ELEMENT: fooBean
// CHAR: \n
import org.springframework.beans.factory.BeanFactory
import org.springframework.beans.factory.xml.XmlBeanFactory
import org.springframework.core.io.FileSystemResource
import org.springframework.core.io.Resource
class FooBeanClass {
init {
val configFile = FileSystemResource("spring-config.xml")
val factory = XmlBeanFactory(configFile)
factory.getBean("fooBeano")
}
}
@@ -1,14 +0,0 @@
// ELEMENT: fooBean
// CHAR: \t
import org.springframework.beans.factory.BeanFactory
import org.springframework.beans.factory.xml.XmlBeanFactory
import org.springframework.core.io.FileSystemResource
import org.springframework.core.io.Resource
class FooBeanClass {
init {
val configFile = FileSystemResource("spring-config.xml")
val factory = XmlBeanFactory(configFile)
factory.getBean("fo<caret>o")
}
}
@@ -1,14 +0,0 @@
// ELEMENT: fooBean
// CHAR: \t
import org.springframework.beans.factory.BeanFactory
import org.springframework.beans.factory.xml.XmlBeanFactory
import org.springframework.core.io.FileSystemResource
import org.springframework.core.io.Resource
class FooBeanClass {
init {
val configFile = FileSystemResource("spring-config.xml")
val factory = XmlBeanFactory(configFile)
factory.getBean("fooBean")
}
}
@@ -1,24 +0,0 @@
// NUMBER: 1
// EXIST: { lookupString:"buildBar" }
package a
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.AnnotationConfigApplicationContext
class FooBean
class BarBean
@Configuration
open class KotlinAnnotated {
@Bean(name=arrayOf("annFooBean")) open fun buildFoo(): FooBean = FooBean()
@Bean open fun buildBar(): BarBean = BarBean()
}
class Test {
fun test() {
val context = AnnotationConfigApplicationContext("a");
context.getBean("build<caret>")
}
}
@@ -1,25 +0,0 @@
// NUMBER: 2
// EXIST: { lookupString:"annFooBean" }
// EXIST: { lookupString:"kotlinAnnotated" }
package a
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.AnnotationConfigApplicationContext
class FooBean
class BarBean
@Configuration
open class KotlinAnnotated {
@Bean(name=arrayOf("annFooBean")) open fun buildFoo(): FooBean = FooBean()
@Bean open fun buildBar(): BarBean = BarBean()
}
class Test {
fun test() {
val context = AnnotationConfigApplicationContext("a");
context.getBean("ann<caret>")
}
}
@@ -1,13 +0,0 @@
// NUMBER: 3
// EXIST: { lookupString:"lang" }
// EXIST: { lookupString:"util" }
// EXIST: { lookupString:"sql" }
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
@Configuration
@ComponentScan(basePackages = arrayOf("java.l<caret>ang"))
open class App {
}
@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="bean.MultiHolder" name="existingBean1">
<constructor-arg name="thing" value="1"/>
</bean>
<bean class="bean.MultiHolder" name="existingBean2">
<constructor-arg name="thing" value="2"/>
</bean>
<bean class="bean.MultiHolder" name="anotherBean">
<constructor-arg name="thing" value="0"/>
</bean>
<bean class="bean.AutoMultiUser" name="existingBean3">
</bean>
</beans>
@@ -1,15 +0,0 @@
// NUMBER: 3
// EXIST: { lookupString:"anotherBean" }
// EXIST: { lookupString:"existingBean1" }
// EXIST: { lookupString:"existingBean2" }
package bean
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Qualifier
class MultiHolder(var thing: String)
class AutoMultiUser() {
@Qualifier("<caret>existingBean1") @Autowired lateinit var multi1: MultiHolder
}
@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="bean.MultiHolder" name="existingBean1">
<constructor-arg name="thing" value="1"/>
</bean>
<bean class="bean.MultiHolder" name="existingBean2">
<constructor-arg name="thing" value="2"/>
</bean>
<bean class="bean.MultiHolder" name="anotherBean">
<constructor-arg name="thing" value="0"/>
</bean>
<bean class="bean.AutoMultiUser" name="existingBean3">
</bean>
</beans>
@@ -1,14 +0,0 @@
// NUMBER: 2
// EXIST: { lookupString:"existingBean1" }
// EXIST: { lookupString:"existingBean2" }
package bean
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Qualifier
class MultiHolder(var thing: String)
class AutoMultiUser() {
@Qualifier("existing<caret>Bean2") @Autowired lateinit var multi2: MultiHolder
}
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="fooBean" class="java.lang.String"/>
<bean id="fooBean2" class="java.lang.String"/>
<bean id="barBean" class="java.lang.String"/>
<bean id="scopedBean" class="test.ScopedBean"/>
</beans>
@@ -1,9 +0,0 @@
// NUMBER: 2
// EXIST: { lookupString:"singleton" }
// EXIST: { lookupString:"prototype" }
package test
import org.springframework.context.annotation.Scope
@Scope("<caret>")
class ScopedBean
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="fooBean" class="java.lang.String"/>
<bean id="fooBean2" class="java.lang.String"/>
<bean id="barBean" class="java.lang.String"/>
<bean id="scopedBean" class="test.ScopedBean"/>
</beans>
@@ -1,15 +0,0 @@
// NUMBER: 2
// EXIST: { lookupString:"fooBean" }
// EXIST: { lookupString:"fooBean2" }
import org.springframework.beans.factory.BeanFactory
import org.springframework.beans.factory.xml.XmlBeanFactory
import org.springframework.core.io.FileSystemResource
import org.springframework.core.io.Resource
class FooBeanClass {
init {
val configFile = FileSystemResource("spring-config.xml")
val factory = XmlBeanFactory(configFile)
factory.getBean("fo<caret>o")
}
}
@@ -1,9 +0,0 @@
// NO_XML_CONFIG
// REF: /src.fileReferenceInClasspathResource.test.xml
import org.springframework.core.io.ClassPathResource
class Bean {
init {
ClassPathResource("<caret>fileReferenceInClasspathResource.test.xml")
}
}
@@ -1,3 +0,0 @@
<test>
<foo/>
</test>
@@ -1,9 +0,0 @@
// NO_XML_CONFIG
// REF: /src.fileReferenceInClasspathXmlContext.test.xml
import org.springframework.context.support.ClassPathXmlApplicationContext
class Bean {
init {
ClassPathXmlApplicationContext("<caret>fileReferenceInClasspathXmlContext.test.xml")
}
}
@@ -1,3 +0,0 @@
<test>
<foo/>
</test>
@@ -1,12 +0,0 @@
// NO_XML_CONFIG
// REF: java
// REF: java.java
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
@Configuration
@ComponentScan(basePackages = arrayOf("<caret>java"))
open class App {
}
@@ -1,11 +0,0 @@
// REF: <bean class="bean.MultiHolder" name="existingBean1">\n <constructor-arg name="thing" value="1"/>\n </bean>
package bean
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Qualifier
class MultiHolder(var thing: String)
class AutoMultiUser() {
@Qualifier("<caret>existingBean1") @Autowired lateinit var multi1: MultiHolder
}
@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="bean.MultiHolder" name="existingBean1">
<constructor-arg name="thing" value="1"/>
</bean>
<bean class="bean.MultiHolder" name="existingBean2">
<constructor-arg name="thing" value="2"/>
</bean>
<bean class="bean.MultiHolder" name="anotherBean">
<constructor-arg name="thing" value="0"/>
</bean>
<bean class="bean.AutoMultiUser" name="existingBean3">
</bean>
</beans>
@@ -1,7 +0,0 @@
// REF: singleton
package test
import org.springframework.context.annotation.Scope
@Scope("<caret>singleton")
class Bean
@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="fooBean" class="test.Bean"/>
</beans>
@@ -1,13 +0,0 @@
// REF: <bean id="fooBean" class="java.lang.String"/>
import org.springframework.beans.factory.BeanFactory
import org.springframework.beans.factory.xml.XmlBeanFactory
import org.springframework.core.io.FileSystemResource
import org.springframework.core.io.Resource
class FooBeanClass {
init {
val configFile = FileSystemResource("spring-config.xml")
val factory = XmlBeanFactory(configFile)
if (factory.containsBean("<caret>fooBean")) println("FooBean")
}
}
@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="fooBean" class="java.lang.String"/>
</beans>
@@ -1,13 +0,0 @@
// REF: <bean id="fooBean" class="java.lang.String"/>
import org.springframework.beans.factory.BeanFactory
import org.springframework.beans.factory.xml.XmlBeanFactory
import org.springframework.core.io.FileSystemResource
import org.springframework.core.io.Resource
class FooBeanClass {
init {
val configFile = FileSystemResource("spring-config.xml")
val factory = XmlBeanFactory(configFile)
factory.getBean("<caret>fooBean")
}
}
@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="fooBean" class="java.lang.String"/>
</beans>
@@ -1,11 +0,0 @@
// JAVAX_ANNOTATION_RESOURCE
// REF: <bean id="fooBean" class="test.Bean"/>
package test
import javax.annotation.Resource
class Bean
class Test {
@Resource(name= "<caret>fooBean") lateinit var name: String
}
@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="fooBean" class="test.Bean"/>
</beans>
@@ -1,11 +0,0 @@
// JAVAX_ANNOTATION_RESOURCE
// REF: <bean id="fooBean" class="test.Bean"/>
package test
import javax.annotation.Resource
class Bean
class Test {
@Resource(name= "<caret>&fooBean") lateinit var name: String
}
@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="fooBean" class="test.Bean"/>
</beans>
@@ -1,4 +0,0 @@
package bean;
public class BeanA {
}
@@ -1,8 +0,0 @@
package bean;
import org.springframework.beans.factory.annotation.Value;
public class JavaRef {
@Value("#{ nameJ }") private BeanA valueA;
@Value("#{ nameK2 }") private BeanA valueK;
}

Some files were not shown because too many files have changed in this diff Show More