diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/JKImportStorage.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/JKImportStorage.kt index d06ea13bb0e..d986f67db5b 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/JKImportStorage.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/JKImportStorage.kt @@ -6,18 +6,28 @@ package org.jetbrains.kotlin.nj2k import com.intellij.psi.CommonClassNames +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.load.java.NULLABILITY_ANNOTATIONS import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtQualifiedExpression import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices -class JKImportStorage { +class JKImportStorage(languageSettings: LanguageVersionSettings) { private val imports = mutableSetOf() + private val defaultImports: Set = + JvmPlatformAnalyzerServices.getDefaultImports( + languageSettings, + includeLowPriorityImports = true + ).mapNotNull { import -> + if (import.isAllUnder) null else import.fqName + }.toSet() + fun addImport(import: FqName) { - if (isImportNeeded(import)) { + if (isImportNeeded(import, allowSingleIdentifierImport = false)) { imports += import } } @@ -28,23 +38,17 @@ class JKImportStorage { fun getImports(): Set = imports + fun isImportNeeded(fqName: FqName, allowSingleIdentifierImport: Boolean = false): Boolean { + if (!allowSingleIdentifierImport && fqName.asString().count { it == '.' } < 1) return false + if (fqName in NULLABILITY_ANNOTATIONS) return false + if (fqName in defaultImports) return false + return true + } + + fun isImportNeeded(fqName: String, allowSingleIdentifierImport: Boolean = false): Boolean = + isImportNeeded(FqName(fqName), allowSingleIdentifierImport) + companion object { - fun isImportNeeded(fqName: FqName): Boolean { - if (fqName in NULLABILITY_ANNOTATIONS) return false - if (fqName in JAVA_TYPE_WRAPPERS_WHICH_HAVE_CONFLICTS_WITH_KOTLIN_ONES) return false - return true - } - - fun isImportNeededForCall(qualifiedExpression: KtQualifiedExpression): Boolean { - val shortName = qualifiedExpression.getCalleeExpressionIfAny()?.text ?: return true - if (shortName !in SHORT_NAMES) return true - val fqName = qualifiedExpression.selectorExpression?.mainReference?.resolve()?.getKotlinFqName() ?: return true - return isImportNeeded(fqName) - } - - fun isImportNeeded(fqName: String): Boolean = isImportNeeded(FqName(fqName)) - - private val JAVA_TYPE_WRAPPERS_WHICH_HAVE_CONFLICTS_WITH_KOTLIN_ONES = setOf( FqName(CommonClassNames.JAVA_LANG_BYTE), FqName(CommonClassNames.JAVA_LANG_SHORT), @@ -53,9 +57,15 @@ class JKImportStorage { FqName(CommonClassNames.JAVA_LANG_DOUBLE) ) - private val SHORT_NAMES = - (NULLABILITY_ANNOTATIONS + JAVA_TYPE_WRAPPERS_WHICH_HAVE_CONFLICTS_WITH_KOTLIN_ONES) - .map { it.shortName().asString() } - .toSet() + private val SHORT_NAMES = JAVA_TYPE_WRAPPERS_WHICH_HAVE_CONFLICTS_WITH_KOTLIN_ONES + .map { it.shortName().identifier } + .toSet() + + fun isImportNeededForCall(qualifiedExpression: KtQualifiedExpression): Boolean { + val shortName = qualifiedExpression.getCalleeExpressionIfAny()?.text ?: return true + if (shortName !in SHORT_NAMES) return true + val fqName = qualifiedExpression.selectorExpression?.mainReference?.resolve()?.getKotlinFqName() ?: return true + return fqName !in JAVA_TYPE_WRAPPERS_WHICH_HAVE_CONFLICTS_WITH_KOTLIN_ONES + } } } \ No newline at end of file diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverter.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverter.kt index a97812335bc..fff888fd532 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverter.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverter.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.nj2k import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.application.ModalityState import com.intellij.openapi.command.CommandProcessor import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.module.Module @@ -27,13 +26,18 @@ import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.project.Project import com.intellij.openapi.util.Computable import com.intellij.psi.* -import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.withContext -import org.jetbrains.kotlin.idea.core.util.EDT +import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl +import org.jetbrains.kotlin.idea.project.languageVersionSettings +import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.j2k.* +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.nj2k.printing.JKCodeBuilder import org.jetbrains.kotlin.nj2k.types.JKTypeFactory +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtImportList import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.resolve.ImportPath class NewJavaToKotlinConverter( val project: Project, @@ -66,12 +70,11 @@ class NewJavaToKotlinConverter( val kotlinFile = ApplicationManager.getApplication().runReadAction(Computable { KtPsiFactory(project).createFileWithLightClassSupport("dummy.kt", result!!.text, files[i]) }) - runBlocking(EDT.ModalityStateElement(ModalityState.defaultModalityState())) { - withContext(EDT) { - CommandProcessor.getInstance().runUndoTransparentAction { - result!!.importsToAdd.forEach { - postProcessor.insertImport(kotlinFile, it) - } + + ApplicationManager.getApplication().invokeAndWait { + CommandProcessor.getInstance().runUndoTransparentAction { + runWriteAction { + kotlinFile.addImports(result!!.importsToAdd) } } } @@ -95,6 +98,33 @@ class NewJavaToKotlinConverter( } } + private fun KtFile.addImports(imports: Collection) { + val factory = KtPsiFactory(this) + var importList = importList + for (import in imports) { + val importDirective = factory.createImportDirective(ImportPath(import, isAllUnder = false)) + if (importList == null) { + importList = addImportList(importDirective.parent as KtImportList) + } else { + importList.add(importDirective) + } + } + } + + private fun KtFile.addImportList(importList: KtImportList): KtImportList { + if (packageDirective != null) { + return addAfter(importList, packageDirective) as KtImportList + } + + val firstDeclaration = findChildByClass(KtDeclaration::class.java) + if (firstDeclaration != null) { + return addBefore(importList, firstDeclaration) as KtImportList + } + + return add(importList) as KtImportList + } + + override fun elementsToKotlin(inputElements: List, processor: WithProgressProcessor): Result { val phaseDescription = "Converting Java code to Kotlin code" val contextElement = inputElements.firstOrNull() ?: return Result(emptyList(), null, null) @@ -102,9 +132,14 @@ class NewJavaToKotlinConverter( val typeFactory = JKTypeFactory(symbolProvider) symbolProvider.typeFactory = typeFactory symbolProvider.preBuildTree(inputElements) - val importStorage = JKImportStorage() - val treeBuilder = JavaToJKTreeBuilder(symbolProvider, typeFactory, converterServices, importStorage) + val languageVersion = when { + contextElement.isPhysical -> contextElement.languageVersionSettings + else -> LanguageVersionSettingsImpl.DEFAULT + } + + val importStorage = JKImportStorage(languageVersion) + val treeBuilder = JavaToJKTreeBuilder(symbolProvider, typeFactory, converterServices, importStorage) // we want to leave all imports as is in the case when user is converting only imports val saveImports = inputElements.all { element -> diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/FilterImportsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/FilterImportsConversion.kt index bbd89eb62e0..5a72e3731fc 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/FilterImportsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/FilterImportsConversion.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.nj2k.conversions -import org.jetbrains.kotlin.nj2k.JKImportStorage import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.tree.JKImportList import org.jetbrains.kotlin.nj2k.tree.JKTreeElement @@ -14,7 +13,7 @@ class FilterImportsConversion(context: NewJ2kConverterContext) : RecursiveApplic override fun applyToElement(element: JKTreeElement): JKTreeElement { if (element !is JKImportList) return recurse(element) element.imports = element.imports.filter { import -> - JKImportStorage.isImportNeeded(import.name.value) + context.importStorage.isImportNeeded(import.name.value, allowSingleIdentifierImport = true) } return recurse(element) } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/printing/JKSymbolRenderer.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/printing/JKSymbolRenderer.kt index 9f3bba6b80d..d9dfec56e6e 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/printing/JKSymbolRenderer.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/printing/JKSymbolRenderer.kt @@ -6,9 +6,9 @@ package org.jetbrains.kotlin.nj2k.printing import com.intellij.openapi.project.Project +import com.intellij.psi.PsiClass import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.PsiShortNamesCache -import com.intellij.util.Processor import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.nj2k.JKImportStorage import org.jetbrains.kotlin.nj2k.escaped @@ -77,7 +77,13 @@ private class CanBeShortenedCache(project: Project) { } fun canBeShortened(symbol: JKClassSymbol): Boolean = canBeShortenedCache.getOrPut(symbol.name) { - !shortNameCache.processClassesWithName(symbol.name, { false }, searchScope, null) + var symbolsWithSuchNameCount = 0 + val processSymbol = { _: PsiClass -> + symbolsWithSuchNameCount++ + symbolsWithSuchNameCount <= 1 //stop if met more than one symbol with such name + } + shortNameCache.processClassesWithName(symbol.name, processSymbol, searchScope, null) + symbolsWithSuchNameCount == 1 } companion object { diff --git a/nj2k/testData/copyPastePlainText/PostProcessing.expected.kt b/nj2k/testData/copyPastePlainText/PostProcessing.expected.kt index 3deb195a4f1..44cd0814484 100644 --- a/nj2k/testData/copyPastePlainText/PostProcessing.expected.kt +++ b/nj2k/testData/copyPastePlainText/PostProcessing.expected.kt @@ -1,6 +1,7 @@ package to import java.io.File +import java.util.ArrayList class JavaClass { diff --git a/nj2k/testData/copyPastePlainText/WholeFile.expected.kt b/nj2k/testData/copyPastePlainText/WholeFile.expected.kt index 1bab4052d30..11a8cf7b1fc 100644 --- a/nj2k/testData/copyPastePlainText/WholeFile.expected.kt +++ b/nj2k/testData/copyPastePlainText/WholeFile.expected.kt @@ -1,5 +1,7 @@ package to +import java.util.ArrayList + class JavaClass { internal fun foo() { diff --git a/nj2k/testData/newJ2k/assignmentExpression/nullability-settings.kt b/nj2k/testData/newJ2k/assignmentExpression/nullability-settings.kt index 629d8806fe5..60e9b81eaf2 100644 --- a/nj2k/testData/newJ2k/assignmentExpression/nullability-settings.kt +++ b/nj2k/testData/newJ2k/assignmentExpression/nullability-settings.kt @@ -1,3 +1,5 @@ +import java.util.HashSet + internal class Foo { fun foo(o: HashSet<*>) { val o2: HashSet<*> = o diff --git a/nj2k/testData/newJ2k/assignmentExpression/nullability.kt b/nj2k/testData/newJ2k/assignmentExpression/nullability.kt index 8dd3c9ff495..94224d39719 100644 --- a/nj2k/testData/newJ2k/assignmentExpression/nullability.kt +++ b/nj2k/testData/newJ2k/assignmentExpression/nullability.kt @@ -1,3 +1,5 @@ +import java.util.HashSet + internal class Foo { fun foo(o: HashSet<*>) { var foo = 0 diff --git a/nj2k/testData/newJ2k/class/kt-639.kt b/nj2k/testData/newJ2k/class/kt-639.kt index 72f35d68665..f8928cdfd62 100644 --- a/nj2k/testData/newJ2k/class/kt-639.kt +++ b/nj2k/testData/newJ2k/class/kt-639.kt @@ -1,5 +1,7 @@ package demo +import java.util.HashMap + internal class Test { constructor() {} constructor(s: String?) {} diff --git a/nj2k/testData/newJ2k/detectProperties/PropertyType.kt b/nj2k/testData/newJ2k/detectProperties/PropertyType.kt index 4fc2f7207e9..e3a6c8aa904 100644 --- a/nj2k/testData/newJ2k/detectProperties/PropertyType.kt +++ b/nj2k/testData/newJ2k/detectProperties/PropertyType.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + internal class A { private val list1 = ArrayList() private val list2: MutableList = ArrayList() diff --git a/nj2k/testData/newJ2k/field/specifyType.kt b/nj2k/testData/newJ2k/field/specifyType.kt index 34d725b27d0..7a3aa420a7c 100644 --- a/nj2k/testData/newJ2k/field/specifyType.kt +++ b/nj2k/testData/newJ2k/field/specifyType.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + internal class A { private val field1: List = ArrayList() val field2: List = ArrayList() diff --git a/nj2k/testData/newJ2k/for/forThroughListIndices.kt b/nj2k/testData/newJ2k/for/forThroughListIndices.kt index 1a6adf1625e..951a236e2ed 100644 --- a/nj2k/testData/newJ2k/for/forThroughListIndices.kt +++ b/nj2k/testData/newJ2k/for/forThroughListIndices.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + internal class C { fun foo1(list: MutableList) { for (i in list.indices) { diff --git a/nj2k/testData/newJ2k/for/overMapEntries.kt b/nj2k/testData/newJ2k/for/overMapEntries.kt index 3c140200d16..f39d9bfd409 100644 --- a/nj2k/testData/newJ2k/for/overMapEntries.kt +++ b/nj2k/testData/newJ2k/for/overMapEntries.kt @@ -1,3 +1,5 @@ +import java.util.HashMap + internal object Test { @JvmStatic fun main(args: Array) { diff --git a/nj2k/testData/newJ2k/issues/kt-1048.kt b/nj2k/testData/newJ2k/issues/kt-1048.kt index a4fda406353..2df6a082a50 100644 --- a/nj2k/testData/newJ2k/issues/kt-1048.kt +++ b/nj2k/testData/newJ2k/issues/kt-1048.kt @@ -1,6 +1,8 @@ // ERROR: The integer literal does not conform to the expected type CapturedType(*) // ERROR: The integer literal does not conform to the expected type CapturedType(*) // ERROR: Type argument is not within its bounds: should be subtype of 'String?' +import java.util.HashMap + internal class G(t: T) class Java { internal fun test() { diff --git a/nj2k/testData/newJ2k/issues/kt-15791.kt b/nj2k/testData/newJ2k/issues/kt-15791.kt index d115b105595..6e38706404c 100644 --- a/nj2k/testData/newJ2k/issues/kt-15791.kt +++ b/nj2k/testData/newJ2k/issues/kt-15791.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + internal object A { @JvmStatic fun main(args: Array) { diff --git a/nj2k/testData/newJ2k/issues/kt-19382.kt b/nj2k/testData/newJ2k/issues/kt-19382.kt index b05f4d2bac6..8e500166174 100644 --- a/nj2k/testData/newJ2k/issues/kt-19382.kt +++ b/nj2k/testData/newJ2k/issues/kt-19382.kt @@ -1,5 +1,7 @@ package test +import java.util.HashMap + class TestPrimitiveFromMap { fun foo(map: HashMap): Int { return map["zzz"]!! diff --git a/nj2k/testData/newJ2k/issues/kt-19604.kt b/nj2k/testData/newJ2k/issues/kt-19604.kt index 23f16be8289..0408a4bab8c 100644 --- a/nj2k/testData/newJ2k/issues/kt-19604.kt +++ b/nj2k/testData/newJ2k/issues/kt-19604.kt @@ -1,3 +1,5 @@ +import java.util.HashMap + class TestMethodReference { private val hashMap = HashMap() fun update(key: String, msg: String) { diff --git a/nj2k/testData/newJ2k/issues/kt-19606.kt b/nj2k/testData/newJ2k/issues/kt-19606.kt index 23f16be8289..0408a4bab8c 100644 --- a/nj2k/testData/newJ2k/issues/kt-19606.kt +++ b/nj2k/testData/newJ2k/issues/kt-19606.kt @@ -1,3 +1,5 @@ +import java.util.HashMap + class TestMethodReference { private val hashMap = HashMap() fun update(key: String, msg: String) { diff --git a/nj2k/testData/newJ2k/issues/kt-24677.kt b/nj2k/testData/newJ2k/issues/kt-24677.kt index 28c79479bdb..1c84c8878b1 100644 --- a/nj2k/testData/newJ2k/issues/kt-24677.kt +++ b/nj2k/testData/newJ2k/issues/kt-24677.kt @@ -1,4 +1,5 @@ import Foo.SomeClass +import java.util.ArrayList internal interface FooInterface { fun foo(): ArrayList? diff --git a/nj2k/testData/newJ2k/issues/kt-32572.kt b/nj2k/testData/newJ2k/issues/kt-32572.kt index a9e30129bfe..56d830dc225 100644 --- a/nj2k/testData/newJ2k/issues/kt-32572.kt +++ b/nj2k/testData/newJ2k/issues/kt-32572.kt @@ -1,3 +1,5 @@ +import java.util.HashMap + class TestClass { private val hashMap: Map> = HashMap() } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/issues/kt-32702.kt b/nj2k/testData/newJ2k/issues/kt-32702.kt index 87c0fd51599..f510cf598e0 100644 --- a/nj2k/testData/newJ2k/issues/kt-32702.kt +++ b/nj2k/testData/newJ2k/issues/kt-32702.kt @@ -1,3 +1,4 @@ +import java.util.ArrayList import java.util.function.Consumer internal class Test { diff --git a/nj2k/testData/newJ2k/issues/kt-809-string.kt b/nj2k/testData/newJ2k/issues/kt-809-string.kt index c4c72856a5e..377be2bd040 100644 --- a/nj2k/testData/newJ2k/issues/kt-809-string.kt +++ b/nj2k/testData/newJ2k/issues/kt-809-string.kt @@ -1,5 +1,7 @@ package demo +import demo.One + internal class Container { var myString = "1" } diff --git a/nj2k/testData/newJ2k/issues/kt-809.kt b/nj2k/testData/newJ2k/issues/kt-809.kt index 25d571a61e1..bca8cb383e7 100644 --- a/nj2k/testData/newJ2k/issues/kt-809.kt +++ b/nj2k/testData/newJ2k/issues/kt-809.kt @@ -1,5 +1,7 @@ package demo +import demo.One + internal class Container { var myInt = 1 } diff --git a/nj2k/testData/newJ2k/issues/kt-820-field.kt b/nj2k/testData/newJ2k/issues/kt-820-field.kt index ce8e7da3d93..d67ce6cc202 100644 --- a/nj2k/testData/newJ2k/issues/kt-820-field.kt +++ b/nj2k/testData/newJ2k/issues/kt-820-field.kt @@ -1,5 +1,7 @@ package demo +import demo.One + internal class Container { var myInt = 1 } diff --git a/nj2k/testData/newJ2k/issues/kt-820.kt b/nj2k/testData/newJ2k/issues/kt-820.kt index 45776f80a9c..8a8303f2cd9 100644 --- a/nj2k/testData/newJ2k/issues/kt-820.kt +++ b/nj2k/testData/newJ2k/issues/kt-820.kt @@ -1,5 +1,7 @@ package demo +import demo.One + internal class Container { var myInt = 1 } diff --git a/nj2k/testData/newJ2k/issues/kt-824.kt b/nj2k/testData/newJ2k/issues/kt-824.kt index 2f7e3eba0ed..146d150f37e 100644 --- a/nj2k/testData/newJ2k/issues/kt-824.kt +++ b/nj2k/testData/newJ2k/issues/kt-824.kt @@ -1,5 +1,7 @@ package demo +import demo.One + internal class Container { var myBoolean = true } diff --git a/nj2k/testData/newJ2k/issues/spaceBeforeAssignment.kt b/nj2k/testData/newJ2k/issues/spaceBeforeAssignment.kt index f371b2b549d..d8f9b81cda0 100644 --- a/nj2k/testData/newJ2k/issues/spaceBeforeAssignment.kt +++ b/nj2k/testData/newJ2k/issues/spaceBeforeAssignment.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + internal class A { var list: List = ArrayList() } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/javaStreamsApi/formatting.kt b/nj2k/testData/newJ2k/javaStreamsApi/formatting.kt index 8f7a3a8bab0..eaa6c4afae5 100644 --- a/nj2k/testData/newJ2k/javaStreamsApi/formatting.kt +++ b/nj2k/testData/newJ2k/javaStreamsApi/formatting.kt @@ -1,3 +1,4 @@ +import java.util.Comparator import java.util.stream.Collectors internal class Test { diff --git a/nj2k/testData/newJ2k/javaStreamsApi/streamOperations.kt b/nj2k/testData/newJ2k/javaStreamsApi/streamOperations.kt index 55a1020f3b6..24f235a60c7 100644 --- a/nj2k/testData/newJ2k/javaStreamsApi/streamOperations.kt +++ b/nj2k/testData/newJ2k/javaStreamsApi/streamOperations.kt @@ -1,3 +1,4 @@ +import java.util.Comparator import java.util.stream.Collectors internal class Test { diff --git a/nj2k/testData/newJ2k/list/ForEach.kt b/nj2k/testData/newJ2k/list/ForEach.kt index def3610a002..f5f440b62f8 100644 --- a/nj2k/testData/newJ2k/list/ForEach.kt +++ b/nj2k/testData/newJ2k/list/ForEach.kt @@ -1,4 +1,6 @@ // ERROR: Unresolved reference: LinkedList +import java.util.ArrayList + class ForEach { fun test() { val xs = ArrayList() diff --git a/nj2k/testData/newJ2k/list/Lists.kt b/nj2k/testData/newJ2k/list/Lists.kt index 1de6c7d648c..d11b79c3f35 100644 --- a/nj2k/testData/newJ2k/list/Lists.kt +++ b/nj2k/testData/newJ2k/list/Lists.kt @@ -1,4 +1,6 @@ // ERROR: Unresolved reference: LinkedList +import java.util.ArrayList + class Lists { fun test() { val xs: MutableList = ArrayList() diff --git a/nj2k/testData/newJ2k/methodCallExpression/specialBuiltinMembers.kt b/nj2k/testData/newJ2k/methodCallExpression/specialBuiltinMembers.kt index fe8856cf003..049e9a43811 100644 --- a/nj2k/testData/newJ2k/methodCallExpression/specialBuiltinMembers.kt +++ b/nj2k/testData/newJ2k/methodCallExpression/specialBuiltinMembers.kt @@ -1,3 +1,5 @@ +import java.util.HashMap + internal enum class E { A, B, C } diff --git a/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue.kt b/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue.kt index 69e37b5606f..95abc37e1c2 100644 --- a/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue.kt +++ b/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + internal class A { fun createCollection(): MutableCollection { return ArrayList() diff --git a/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue2.kt b/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue2.kt index ca5a0123701..16e0d80a52e 100644 --- a/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue2.kt +++ b/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue2.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + internal class A { private val collection: MutableCollection fun createCollection(): MutableCollection { diff --git a/nj2k/testData/newJ2k/mutableCollections/Iterator.kt b/nj2k/testData/newJ2k/mutableCollections/Iterator.kt index 691a6c746b8..2659826b9a4 100644 --- a/nj2k/testData/newJ2k/mutableCollections/Iterator.kt +++ b/nj2k/testData/newJ2k/mutableCollections/Iterator.kt @@ -1,3 +1,5 @@ +import java.util.HashMap + internal class IteratorTest { var mutableMap1: MutableMap = HashMap() var mutableMap2: MutableMap = HashMap() diff --git a/nj2k/testData/newJ2k/mutableCollections/Iterator2.kt b/nj2k/testData/newJ2k/mutableCollections/Iterator2.kt index a69ed99e412..a604b47ca75 100644 --- a/nj2k/testData/newJ2k/mutableCollections/Iterator2.kt +++ b/nj2k/testData/newJ2k/mutableCollections/Iterator2.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + class TestMutableCollection { val list: MutableList = ArrayList() fun test() { diff --git a/nj2k/testData/newJ2k/mutableCollections/listOfMutableList.kt b/nj2k/testData/newJ2k/mutableCollections/listOfMutableList.kt index 422eefccb64..d0eb8e6b025 100644 --- a/nj2k/testData/newJ2k/mutableCollections/listOfMutableList.kt +++ b/nj2k/testData/newJ2k/mutableCollections/listOfMutableList.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + class Test { internal var list: List> = ArrayList() fun test() { diff --git a/nj2k/testData/newJ2k/mutableCollections/mutableListInOtherClass.kt b/nj2k/testData/newJ2k/mutableCollections/mutableListInOtherClass.kt index 4c1ecc0db47..c820bf7ee9e 100644 --- a/nj2k/testData/newJ2k/mutableCollections/mutableListInOtherClass.kt +++ b/nj2k/testData/newJ2k/mutableCollections/mutableListInOtherClass.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + class Owner { var list: MutableList = ArrayList() } diff --git a/nj2k/testData/newJ2k/newClassExpression/fullQualifiedName.kt b/nj2k/testData/newJ2k/newClassExpression/fullQualifiedName.kt index 563b79ef7ce..4ef128eabaa 100644 --- a/nj2k/testData/newJ2k/newClassExpression/fullQualifiedName.kt +++ b/nj2k/testData/newJ2k/newClassExpression/fullQualifiedName.kt @@ -1,5 +1,7 @@ package test +import java.util.ArrayList + internal class User { fun main() { val list: List<*> = ArrayList() diff --git a/nj2k/testData/newJ2k/newClassExpression/fullQualifiedName2.kt b/nj2k/testData/newJ2k/newClassExpression/fullQualifiedName2.kt index 353eafa9b62..4ef128eabaa 100644 --- a/nj2k/testData/newJ2k/newClassExpression/fullQualifiedName2.kt +++ b/nj2k/testData/newJ2k/newClassExpression/fullQualifiedName2.kt @@ -1,7 +1,9 @@ package test +import java.util.ArrayList + internal class User { fun main() { val list: List<*> = ArrayList() } -} +} \ No newline at end of file diff --git a/nj2k/testData/newJ2k/newClassExpression/genericClassInvocation.kt b/nj2k/testData/newJ2k/newClassExpression/genericClassInvocation.kt index a500cadb3da..fe40a351b51 100644 --- a/nj2k/testData/newJ2k/newClassExpression/genericClassInvocation.kt +++ b/nj2k/testData/newJ2k/newClassExpression/genericClassInvocation.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + internal class User { fun main() { val list: List = ArrayList() diff --git a/nj2k/testData/newJ2k/newClassExpression/newListAndNewMember.kt b/nj2k/testData/newJ2k/newClassExpression/newListAndNewMember.kt index 6d66872aca5..02be4a150de 100644 --- a/nj2k/testData/newJ2k/newClassExpression/newListAndNewMember.kt +++ b/nj2k/testData/newJ2k/newClassExpression/newListAndNewMember.kt @@ -1,5 +1,7 @@ package org.test +import java.util.ArrayList + internal class Member internal class User { fun main() { diff --git a/nj2k/testData/newJ2k/nullability/nullableField.kt b/nj2k/testData/newJ2k/nullability/nullableField.kt index 97a314d14b6..1f38580e8ec 100644 --- a/nj2k/testData/newJ2k/nullability/nullableField.kt +++ b/nj2k/testData/newJ2k/nullability/nullableField.kt @@ -1,5 +1,7 @@ package test +import java.util.ArrayList + class Test { private var myProp: String? = null private var myIntProp: Int? = null diff --git a/nj2k/testData/newJ2k/postProcessing/GetOperator.kt b/nj2k/testData/newJ2k/postProcessing/GetOperator.kt index e4fbe070812..e68d6b823f2 100644 --- a/nj2k/testData/newJ2k/postProcessing/GetOperator.kt +++ b/nj2k/testData/newJ2k/postProcessing/GetOperator.kt @@ -1,5 +1,6 @@ import javaApi.JavaClass import kotlinApi.KotlinClass +import java.util.HashMap internal class X { operator fun get(index: Int): Int { diff --git a/nj2k/testData/newJ2k/postProcessing/java8MapForEachWithFullJdk.kt b/nj2k/testData/newJ2k/postProcessing/java8MapForEachWithFullJdk.kt index 682abad0b4f..f991570bc87 100644 --- a/nj2k/testData/newJ2k/postProcessing/java8MapForEachWithFullJdk.kt +++ b/nj2k/testData/newJ2k/postProcessing/java8MapForEachWithFullJdk.kt @@ -1,3 +1,5 @@ +import java.util.HashMap + internal class Test { fun test(map: HashMap) { map.forEach { (key: String?, value: String?) -> foo(key, value) } diff --git a/nj2k/testData/newJ2k/projections/projections.kt b/nj2k/testData/newJ2k/projections/projections.kt index 4e67b422fdb..415b7fe880e 100644 --- a/nj2k/testData/newJ2k/projections/projections.kt +++ b/nj2k/testData/newJ2k/projections/projections.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + internal class C { fun foo1(src: Collection) { val t = src.iterator().next() diff --git a/nj2k/testData/newJ2k/rawGenerics/kt-540-map.kt b/nj2k/testData/newJ2k/rawGenerics/kt-540-map.kt index 971eb878ce6..205ecc380a8 100644 --- a/nj2k/testData/newJ2k/rawGenerics/kt-540-map.kt +++ b/nj2k/testData/newJ2k/rawGenerics/kt-540-map.kt @@ -1,5 +1,7 @@ package demo +import java.util.HashMap + internal class Test { fun main() { val commonMap = HashMap() diff --git a/nj2k/testData/newJ2k/rawGenerics/kt-540.kt b/nj2k/testData/newJ2k/rawGenerics/kt-540.kt index aad02a12d41..e3981b0891c 100644 --- a/nj2k/testData/newJ2k/rawGenerics/kt-540.kt +++ b/nj2k/testData/newJ2k/rawGenerics/kt-540.kt @@ -1,5 +1,7 @@ package demo +import java.util.ArrayList + internal class Test { fun main() { val common: List = ArrayList() diff --git a/nj2k/testData/newJ2k/settings/specifyFieldTypeByDefault.kt b/nj2k/testData/newJ2k/settings/specifyFieldTypeByDefault.kt index a2171f81acd..ff26dba613b 100644 --- a/nj2k/testData/newJ2k/settings/specifyFieldTypeByDefault.kt +++ b/nj2k/testData/newJ2k/settings/specifyFieldTypeByDefault.kt @@ -1,3 +1,5 @@ +import java.util.ArrayList + internal class A { private val field1: List = ArrayList() val field2: List = ArrayList() diff --git a/nj2k/testData/newJ2k/toKotlinClasses/LibraryFunctions.kt b/nj2k/testData/newJ2k/toKotlinClasses/LibraryFunctions.kt index f40610ffc24..7fbdf093dd2 100644 --- a/nj2k/testData/newJ2k/toKotlinClasses/LibraryFunctions.kt +++ b/nj2k/testData/newJ2k/toKotlinClasses/LibraryFunctions.kt @@ -1,5 +1,7 @@ package demo +import java.util.ArrayList + class TestJava { fun f(result: Function1) { result.invoke("a") diff --git a/nj2k/testData/newJ2k/toKotlinClasses/TypeParameterBound.kt b/nj2k/testData/newJ2k/toKotlinClasses/TypeParameterBound.kt index a20e43b3ecd..f50d8e45dee 100644 --- a/nj2k/testData/newJ2k/toKotlinClasses/TypeParameterBound.kt +++ b/nj2k/testData/newJ2k/toKotlinClasses/TypeParameterBound.kt @@ -1,2 +1,4 @@ +import java.util.ArrayList + internal interface I?>?> internal class C : I?>?> \ No newline at end of file diff --git a/nj2k/testData/newJ2k/typeParameters/needTypeArgs.kt b/nj2k/testData/newJ2k/typeParameters/needTypeArgs.kt index 40d66b52980..5c722d7f1dc 100644 --- a/nj2k/testData/newJ2k/typeParameters/needTypeArgs.kt +++ b/nj2k/testData/newJ2k/typeParameters/needTypeArgs.kt @@ -1,3 +1,5 @@ +import java.util.HashMap + internal class A { fun foo() { val map1 = getMap1() diff --git a/nj2k/testData/newJ2k/typeParameters/rawTypeCast.kt b/nj2k/testData/newJ2k/typeParameters/rawTypeCast.kt index 43173313c98..211b941862b 100644 --- a/nj2k/testData/newJ2k/typeParameters/rawTypeCast.kt +++ b/nj2k/testData/newJ2k/typeParameters/rawTypeCast.kt @@ -2,7 +2,8 @@ // ERROR: Type mismatch: inferred type is (CapturedType(*)!!..Any?) but String? was expected // ERROR: Type mismatch: inferred type is Any? but String? was expected // ERROR: Type mismatch: inferred type is (CapturedType(*)!!..Any?) but String? was expected -// ERROR: Type mismatch: inferred type is kotlin.collections.HashMap /* = java.util.HashMap */ but Map was expected +// ERROR: Type mismatch: inferred type is HashMap but Map was expected +import java.util.HashMap import java.util.Properties internal object A {