Intention to import members with '*'

This commit is contained in:
Valentin Kipyatkov
2015-11-10 13:25:16 +03:00
parent d3f04c6310
commit fe7f79428d
30 changed files with 510 additions and 27 deletions
@@ -23,21 +23,21 @@ import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.ImportPath
import java.util.*
public abstract class ImportInsertHelper {
abstract class ImportInsertHelper {
/*TODO: implementation is not quite correct*/
public abstract fun isImportedWithDefault(importPath: ImportPath, contextFile: KtFile): Boolean
abstract fun isImportedWithDefault(importPath: ImportPath, contextFile: KtFile): Boolean
public abstract fun mayImportOnShortenReferences(descriptor: DeclarationDescriptor): Boolean
abstract fun mayImportOnShortenReferences(descriptor: DeclarationDescriptor): Boolean
public abstract val importSortComparator: Comparator<ImportPath>
abstract val importSortComparator: Comparator<ImportPath>
public enum class ImportDescriptorResult {
enum class ImportDescriptorResult {
FAIL,
IMPORT_ADDED,
ALREADY_IMPORTED
}
public abstract fun importDescriptor(file: KtFile, descriptor: DeclarationDescriptor): ImportDescriptorResult
abstract fun importDescriptor(file: KtFile, descriptor: DeclarationDescriptor, forceAllUnderImport: Boolean = false): ImportDescriptorResult
companion object {
@JvmStatic
@@ -207,11 +207,11 @@ public class ShortenReferences(val options: (KtElement) -> Options = { Options.D
protected fun analyze(element: KtElement)
= resolutionFacade.analyze(element, BodyResolveMode.PARTIAL)
protected fun processQualifiedElement(element: T, target: DeclarationDescriptor, canShortenNow: Boolean) {
protected fun processQualifiedElement(element: T, target: DeclarationDescriptor?, canShortenNow: Boolean) {
if (canShortenNow) {
addElementToShorten(element)
}
else if (target !in failedToImportDescriptors && mayImport(target, file)) {
else if (target != null && target !in failedToImportDescriptors && mayImport(target, file)) {
descriptorsToImport.add(target)
}
else {
@@ -340,13 +340,14 @@ public class ShortenReferences(val options: (KtElement) -> Options = { Options.D
val selector = qualifiedExpression.getSelectorExpression() ?: return false
val callee = selector.getCalleeExpressionIfAny() as? KtReferenceExpression ?: return false
val target = callee.targets(bindingContext).singleOrNull() ?: return false
val targets = callee.targets(bindingContext)
if (targets.isEmpty()) return false
val scope = qualifiedExpression.getResolutionScope(bindingContext, resolutionFacade)
val selectorCopy = selector.copy() as KtReferenceExpression
val newContext = selectorCopy.analyzeInContext(scope, selector)
val targetsWhenShort = (selectorCopy.getCalleeExpressionIfAny() as KtReferenceExpression).targets(newContext)
val targetsMatch = targetsWhenShort.singleOrNull()?.asString() == target.asString()
val targetsMatch = targetsMatch(targets, targetsWhenShort)
if (receiver is KtThisExpression) {
if (!targetsMatch) return false
@@ -368,10 +369,20 @@ public class ShortenReferences(val options: (KtElement) -> Options = { Options.D
return false
}
processQualifiedElement(qualifiedExpression, target, targetsMatch)
processQualifiedElement(qualifiedExpression, targets.singleOrNull(), targetsMatch)
return true
}
private fun targetsMatch(targets1: Collection<DeclarationDescriptor>, targets2: Collection<DeclarationDescriptor>): Boolean {
if (targets1.size != targets2.size) return false
if (targets1.size == 1) {
return targets1.single().asString() == targets2.single().asString()
}
else {
return targets1.map { it.asString() }.toSet() == targets2.map { it.asString() }.toSet()
}
}
override fun shortenElement(element: KtDotQualifiedExpression): KtElement {
return element.replace(element.getSelectorExpression()!!) as KtElement
}
@@ -0,0 +1,7 @@
import javax.swing.SwingUtilities
<spot>import javax.swing.SwingUtilities.*</spot>
fun foo() {
SwingUtilities.invokeLater { }
SwingUtilities.invokeAndWait()
}
@@ -0,0 +1,6 @@
import javax.swing.SwingUtilities
fun foo() {
<spot>SwingUtilities.</spot>invokeLater { }
<spot>SwingUtilities.</spot>invokeAndWait()
}
@@ -0,0 +1,5 @@
<html>
<body>
This intention converts selected qualified reference into simple reference and adds import for corresponding class.
</body>
</html>
+5
View File
@@ -632,6 +632,11 @@
<category>Kotlin</category>
</intentionAction>
<intentionAction>
<className>org.jetbrains.kotlin.idea.intentions.ImportAllMembersIntention</className>
<category>Kotlin</category>
</intentionAction>
<intentionAction>
<className>org.jetbrains.kotlin.idea.intentions.SpecifyTypeExplicitlyIntention</className>
<category>Kotlin</category>
@@ -0,0 +1,81 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.intentions
import com.intellij.openapi.editor.Editor
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.conversion.copy.range
import org.jetbrains.kotlin.idea.imports.importableFqName
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
import org.jetbrains.kotlin.idea.util.ShortenReferences
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.scopes.receivers.ClassifierQualifier
class ImportAllMembersIntention : SelfTargetingIntention<KtDotQualifiedExpression>(
KtDotQualifiedExpression::class.java,
"Import members with '*'"
){
override fun isApplicableTo(element: KtDotQualifiedExpression, caretOffset: Int): Boolean {
if (!element.receiverExpression.range.containsOffset(caretOffset)) return false
val target = target(element) ?: return false
val targetFqName = target.importableFqName ?: return false
val file = element.getContainingKtFile()
val project = file.project
val dummyFileText = (file.packageDirective?.text ?: "") + "\n" + (file.importList?.text ?: "")
val dummyFile = KtPsiFactory(project).createAnalyzableFile("Dummy.kt", dummyFileText, file)
val helper = ImportInsertHelper.getInstance(project)
if (helper.importDescriptor(dummyFile, target, forceAllUnderImport = true) == ImportInsertHelper.ImportDescriptorResult.FAIL) return false
text = "Import members from '${targetFqName.parent().asString()}'"
return true
}
override fun applyTo(element: KtDotQualifiedExpression, editor: Editor) {
val target = target(element)!!
val classFqName = target.importableFqName!!.parent()
ImportInsertHelper.getInstance(element.project).importDescriptor(element.getContainingKtFile(), target, forceAllUnderImport = true)
val qualifiedExpressions = element.getContainingKtFile().collectDescendantsOfType<KtDotQualifiedExpression> { qualifiedExpression ->
val qualifierName = qualifiedExpression.receiverExpression.getQualifiedElementSelector() as? KtNameReferenceExpression
?: return@collectDescendantsOfType false
qualifierName.getReferencedNameAsName() == classFqName.shortName() && target(qualifiedExpression)?.importableFqName?.parent() == classFqName
}
//TODO: not deep
ShortenReferences.DEFAULT.process(qualifiedExpressions)
}
private fun target(expression: KtDotQualifiedExpression): DeclarationDescriptor? {
val bindingContext = expression.analyze(BodyResolveMode.PARTIAL)
val qualifier = bindingContext[BindingContext.QUALIFIER, expression.receiverExpression] as? ClassifierQualifier ?: return null
if (qualifier.descriptor !is ClassDescriptor) return null
val selector = expression.getQualifiedElementSelector() as? KtNameReferenceExpression ?: return null
return selector.mainReference.resolveToDescriptors(bindingContext).firstOrNull()
}
}
@@ -21,7 +21,6 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.impl.PsiModificationTrackerImpl
import com.intellij.psi.util.PsiModificationTracker
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.util.getFileResolutionScope
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.core.formatter.KotlinCodeStyleSettings
import org.jetbrains.kotlin.idea.core.targetDescriptors
@@ -30,6 +29,7 @@ import org.jetbrains.kotlin.idea.imports.importableFqName
import org.jetbrains.kotlin.idea.project.platform
import org.jetbrains.kotlin.idea.refactoring.fqName.isImported
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
import org.jetbrains.kotlin.idea.util.getFileResolutionScope
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.*
@@ -38,8 +38,8 @@ import org.jetbrains.kotlin.resolve.ImportPath
import org.jetbrains.kotlin.resolve.descriptorUtil.getImportableDescriptor
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.resolve.scopes.getDescriptorsFiltered
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
import org.jetbrains.kotlin.resolve.scopes.utils.findClassifier
@@ -99,8 +99,15 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
}
}
override fun importDescriptor(file: KtFile, descriptor: DeclarationDescriptor)
= Importer(file).importDescriptor(descriptor)
override fun importDescriptor(file: KtFile, descriptor: DeclarationDescriptor, forceAllUnderImport: Boolean): ImportDescriptorResult {
val importer = Importer(file)
if (forceAllUnderImport) {
return importer.importDescriptorWithStarImport(descriptor)
}
else {
return importer.importDescriptor(descriptor)
}
}
private inner class Importer(
private val file: KtFile
@@ -135,10 +142,7 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
val targetFqName = target.importableFqName ?: return ImportDescriptorResult.FAIL
if (isAlreadyImported(target, topLevelScope, targetFqName)) return ImportDescriptorResult.ALREADY_IMPORTED
val imports = if (file is KtCodeFragment)
file.importsAsImportList()?.getImports() ?: listOf()
else
file.getImportDirectives()
val imports = getImports(file)
if (imports.any { !it.isAllUnder && it.importPath?.fqnPart() == targetFqName }) {
return ImportDescriptorResult.FAIL
@@ -159,9 +163,9 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
}
val fqName = target.importableFqName!!
val packageFqName = fqName.parent()
val containerFqName = fqName.parent()
val tryStarImport = shouldTryStarImport(packageFqName, target, imports)
val tryStarImport = shouldTryStarImport(containerFqName, target, imports)
&& when (target) {
// this check does not give a guarantee that import with * will import the class - for example,
// there can be classes with conflicting name in more than one import with *
@@ -178,14 +182,31 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
return addExplicitImport(target)
}
private fun shouldTryStarImport(containerFqName: FqName, target: DeclarationDescriptor, imports: Collection<KtImportDirective>): Boolean {
if (containerFqName.isRoot) return false
fun importDescriptorWithStarImport(descriptor: DeclarationDescriptor): ImportDescriptorResult {
val target = descriptor.getImportableDescriptor()
val container = target.containingDeclaration
if (container is ClassDescriptor && container.kind == ClassKind.OBJECT) return false // cannot import with '*' from object
val fqName = target.importableFqName ?: return ImportDescriptorResult.FAIL
val containerFqName = fqName.parent()
val imports = getImports(file)
val starImportPath = ImportPath(containerFqName, true)
if (imports.any { it.getImportPath() == starImportPath }) return false
if (imports.any { it.importPath == starImportPath }) {
return if (isAlreadyImported(target, resolutionFacade.getFileResolutionScope(file), fqName))
ImportDescriptorResult.ALREADY_IMPORTED
else
ImportDescriptorResult.FAIL
}
if (!canImportWithStar(containerFqName, target)) return ImportDescriptorResult.FAIL
return addStarImport(target)
}
private fun shouldTryStarImport(containerFqName: FqName, target: DeclarationDescriptor, imports: Collection<KtImportDirective>): Boolean {
if (!canImportWithStar(containerFqName, target)) return false
val starImportPath = ImportPath(containerFqName, true)
if (imports.any { it.importPath == starImportPath }) return false
if (containerFqName.asString() in codeStyleSettings.PACKAGES_TO_USE_STAR_IMPORTS) return true
@@ -193,13 +214,22 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
val path = it.getImportPath()
path != null && !path.isAllUnder() && !path.hasAlias() && path.fqnPart().parent() == containerFqName
}
val nameCountToUseStar = if (container is ClassDescriptor)
val nameCountToUseStar = if (target.containingDeclaration is ClassDescriptor)
codeStyleSettings.NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS
else
codeStyleSettings.NAME_COUNT_TO_USE_STAR_IMPORT
return importsFromPackage + 1 >= nameCountToUseStar
}
private fun canImportWithStar(containerFqName: FqName, target: DeclarationDescriptor): Boolean {
if (containerFqName.isRoot) return false
val container = target.containingDeclaration
if (container is ClassDescriptor && container.kind == ClassKind.OBJECT) return false // cannot import with '*' from object
return true
}
private fun addStarImport(target: DeclarationDescriptor): ImportDescriptorResult {
val targetFqName = target.importableFqName!!
val parentFqName = targetFqName.parent()
@@ -397,4 +427,11 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
}
}
}
private fun getImports(file: KtFile): List<KtImportDirective> {
return if (file is KtCodeFragment)
file.importsAsImportList()?.imports ?: listOf()
else
file.importDirectives
}
}
+1
View File
@@ -0,0 +1 @@
org.jetbrains.kotlin.idea.intentions.ImportAllMembersIntention
@@ -0,0 +1,17 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
import javax.swing.SwingUtilities
import javax.swing.SwingUtilities.invokeLater
fun foo() {
<caret>SwingUtilities.invokeLater { }
val bottom = SwingUtilities.BOTTOM
SwingUtilities.invokeAndWait {
SwingUtilities.invokeLater { }
}
val horizontal = javax.swing.SwingUtilities.HORIZONTAL
}
@@ -0,0 +1,17 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
import javax.swing.SwingUtilities
import javax.swing.SwingUtilities.*
fun foo() {
<caret>invokeLater { }
val bottom = BOTTOM
invokeAndWait {
invokeLater { }
}
val horizontal = HORIZONTAL
}
@@ -0,0 +1,17 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
import javax.swing.SwingUtilities
import javax.swing.SwingUtilities.*
fun foo() {
<caret>SwingUtilities.invokeLater { }
val bottom = SwingUtilities.BOTTOM
SwingUtilities.invokeAndWait {
SwingUtilities.invokeLater { }
}
val horizontal = javax.swing.SwingUtilities.HORIZONTAL
}
@@ -0,0 +1,17 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
import javax.swing.SwingUtilities
import javax.swing.SwingUtilities.*
fun foo() {
<caret>invokeLater { }
val bottom = BOTTOM
invokeAndWait {
invokeLater { }
}
val horizontal = HORIZONTAL
}
@@ -0,0 +1,17 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
// ERROR: None of the following functions can be called with the arguments supplied: <br>public open fun convertPoint(p0: java.awt.Component!, p1: [ERROR : Unresolved java classifier: Point]!, p2: java.awt.Component!): [ERROR : Unresolved java classifier: Point]! defined in javax.swing.SwingUtilities<br>public open fun convertPoint(p0: java.awt.Component!, p1: kotlin.Int, p2: kotlin.Int, p3: java.awt.Component!): [ERROR : Unresolved java classifier: Point]! defined in javax.swing.SwingUtilities
// ERROR: None of the following functions can be called with the arguments supplied: <br>public open fun convertPoint(p0: java.awt.Component!, p1: [ERROR : Unresolved java classifier: Point]!, p2: java.awt.Component!): [ERROR : Unresolved java classifier: Point]! defined in javax.swing.SwingUtilities<br>public open fun convertPoint(p0: java.awt.Component!, p1: kotlin.Int, p2: kotlin.Int, p3: java.awt.Component!): [ERROR : Unresolved java classifier: Point]! defined in javax.swing.SwingUtilities
// ERROR: Unresolved reference: unresolved
import javax.swing.SwingUtilities
fun foo() {
<caret>SwingUtilities.convertPoint()
val bottom = SwingUtilities.BOTTOM
SwingUtilities.convertPoint()
SwingUtilities.unresolved
}
@@ -0,0 +1,18 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
// ERROR: None of the following functions can be called with the arguments supplied: <br>public open fun convertPoint(p0: java.awt.Component!, p1: [ERROR : Unresolved java classifier: Point]!, p2: java.awt.Component!): [ERROR : Unresolved java classifier: Point]! defined in javax.swing.SwingUtilities<br>public open fun convertPoint(p0: java.awt.Component!, p1: kotlin.Int, p2: kotlin.Int, p3: java.awt.Component!): [ERROR : Unresolved java classifier: Point]! defined in javax.swing.SwingUtilities
// ERROR: None of the following functions can be called with the arguments supplied: <br>public open fun convertPoint(p0: java.awt.Component!, p1: [ERROR : Unresolved java classifier: Point]!, p2: java.awt.Component!): [ERROR : Unresolved java classifier: Point]! defined in javax.swing.SwingUtilities<br>public open fun convertPoint(p0: java.awt.Component!, p1: kotlin.Int, p2: kotlin.Int, p3: java.awt.Component!): [ERROR : Unresolved java classifier: Point]! defined in javax.swing.SwingUtilities
// ERROR: Unresolved reference: unresolved
import javax.swing.SwingUtilities
import javax.swing.SwingUtilities.*
fun foo() {
<caret>convertPoint()
val bottom = BOTTOM
convertPoint()
SwingUtilities.unresolved
}
@@ -0,0 +1,11 @@
// INTENTION_TEXT: "Import members from 'kotlin.LazyThreadSafetyMode'"
// WITH_RUNTIME
class A {
val v1: Int by lazy(<caret>LazyThreadSafetyMode.NONE) { 1 }
val v2: Int by lazy(LazyThreadSafetyMode.PUBLICATION) { 1 }
/*
val v3 = LazyThreadSafetyMode.values
val v4 = LazyThreadSafetyMode.valueOf("")
*/
}
@@ -0,0 +1,13 @@
import kotlin.LazyThreadSafetyMode.*
// INTENTION_TEXT: "Import members from 'kotlin.LazyThreadSafetyMode'"
// WITH_RUNTIME
class A {
val v1: Int by lazy(<caret>NONE) { 1 }
val v2: Int by lazy(PUBLICATION) { 1 }
/*
val v3 = LazyThreadSafetyMode.values
val v4 = LazyThreadSafetyMode.valueOf("")
*/
}
@@ -0,0 +1,4 @@
// IS_APPLICABLE: false
// WITH_RUNTIME
val v = <caret>LazyThreadSafetyMode.values
@@ -0,0 +1,8 @@
// IS_APPLICABLE: false
// WITH_RUNTIME
import kotlin.text.Regex
fun foo() {
<caret>Regex.escape("")
}
@@ -0,0 +1,8 @@
// IS_APPLICABLE: false
// WITH_RUNTIME
import kotlin.properties.Delegates
class A {
val v1: Int by <caret>Delegates.notNull()
}
@@ -0,0 +1,6 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
fun foo() {
javax.swing.SwingUtilities<caret>.invokeLater { }
}
@@ -0,0 +1,8 @@
import javax.swing.SwingUtilities.*
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
fun foo() {
<caret>invokeLater { }
}
@@ -0,0 +1,6 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
fun foo() {
<caret>javax.swing.SwingUtilities.invokeLater { }
}
@@ -0,0 +1,8 @@
import javax.swing.SwingUtilities.*
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
fun foo() {
<caret>invokeLater { }
}
@@ -0,0 +1,17 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
import javax.swing.SwingUtilities
import javax.swing.SwingUtilities.invokeLater
fun foo() {
invokeLater { }
val bottom = <caret>SwingUtilities.BOTTOM
SwingUtilities.invokeAndWait {
invokeLater { }
}
val horizontal = javax.swing.SwingUtilities.HORIZONTAL
}
@@ -0,0 +1,17 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
import javax.swing.SwingUtilities
import javax.swing.SwingUtilities.*
fun foo() {
invokeLater { }
val bottom = <caret>BOTTOM
invokeAndWait {
invokeLater { }
}
val horizontal = HORIZONTAL
}
@@ -0,0 +1,19 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
// ERROR: Unresolved reference: unresolved
import javax.swing.SwingUtilities
fun foo() {
SwingUtilities.invokeLater { }
val bottom = <caret>SwingUtilities.BOTTOM
SwingUtilities.invokeAndWait {
SwingUtilities.invokeLater { }
}
val horizontal = javax.swing.SwingUtilities.HORIZONTAL
SwingUtilities.unresolved
}
@@ -0,0 +1,20 @@
// INTENTION_TEXT: "Import members from 'javax.swing.SwingUtilities'"
// WITH_RUNTIME
// ERROR: Unresolved reference: unresolved
import javax.swing.SwingUtilities
import javax.swing.SwingUtilities.*
fun foo() {
invokeLater { }
val bottom = <caret>BOTTOM
invokeAndWait {
invokeLater { }
}
val horizontal = HORIZONTAL
SwingUtilities.unresolved
}
@@ -0,0 +1,7 @@
// IS_APPLICABLE: false
// WITH_RUNTIME
// ERROR: Unresolved reference: unresolved
import javax.swing.SwingUtilities
val v = <caret>SwingUtilities.unresolved()
@@ -5098,6 +5098,81 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
}
}
@TestMetadata("idea/testData/intentions/importAllMembers")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class ImportAllMembers extends AbstractIntentionTest {
public void testAllFilesPresentInImportAllMembers() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/intentions/importAllMembers"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
}
@TestMetadata("AlreadyImported.kt")
public void testAlreadyImported() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/importAllMembers/AlreadyImported.kt");
doTest(fileName);
}
@TestMetadata("AlreadyImportedWithStar.kt")
public void testAlreadyImportedWithStar() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/importAllMembers/AlreadyImportedWithStar.kt");
doTest(fileName);
}
@TestMetadata("AmbiguousCalls.kt")
public void testAmbiguousCalls() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/importAllMembers/AmbiguousCalls.kt");
doTest(fileName);
}
@TestMetadata("EnumMembers.kt")
public void testEnumMembers() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/importAllMembers/EnumMembers.kt");
doTest(fileName);
}
@TestMetadata("NotFromCompanionObject.kt")
public void testNotFromCompanionObject() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/importAllMembers/NotFromCompanionObject.kt");
doTest(fileName);
}
@TestMetadata("NotFromObject.kt")
public void testNotFromObject() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/importAllMembers/NotFromObject.kt");
doTest(fileName);
}
@TestMetadata("QualifiedName.kt")
public void testQualifiedName() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/importAllMembers/QualifiedName.kt");
doTest(fileName);
}
@TestMetadata("QualifiedName2.kt")
public void testQualifiedName2() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/importAllMembers/QualifiedName2.kt");
doTest(fileName);
}
@TestMetadata("RemoveSingleImports.kt")
public void testRemoveSingleImports() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/importAllMembers/RemoveSingleImports.kt");
doTest(fileName);
}
@TestMetadata("StaticJavaMembers.kt")
public void testStaticJavaMembers() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/importAllMembers/StaticJavaMembers.kt");
doTest(fileName);
}
@TestMetadata("UnresolvedMember.kt")
public void testUnresolvedMember() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/importAllMembers/UnresolvedMember.kt");
doTest(fileName);
}
}
@TestMetadata("idea/testData/intentions/importMember")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)