diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt index b401e372b1c..781650509cb 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt @@ -29,7 +29,6 @@ object JvmPlatform : TargetPlatform("JVM") { ArrayList().apply { addAll(Common.getDefaultImports(includeKotlinComparisons)) - add(ImportPath.fromString("java.lang.*")) add(ImportPath.fromString("kotlin.jvm.*")) fun addAllClassifiersFromScope(scope: MemberScope) { @@ -46,6 +45,8 @@ object JvmPlatform : TargetPlatform("JVM") { } + override val defaultLowPriorityImports: List = listOf(ImportPath.fromString("java.lang.*")) + override fun getDefaultImports(includeKotlinComparisons: Boolean): List = defaultImports(includeKotlinComparisons) override val platformConfigurator: PlatformConfigurator = JvmPlatformConfigurator diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt index 333cbf08900..9a8408cdadb 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt @@ -24,7 +24,11 @@ abstract class TargetPlatform(val platformName: String) { override fun toString() = platformName abstract val platformConfigurator: PlatformConfigurator + + open val defaultLowPriorityImports: List get() = emptyList() + abstract fun getDefaultImports(includeKotlinComparisons: Boolean): List + open val excludedImports: List get() = emptyList() abstract val multiTargetPlatform: MultiTargetPlatform diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt index f9e8334ad73..5ada6ed7f1a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt @@ -16,73 +16,24 @@ package org.jetbrains.kotlin.resolve.lazy -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.config.LanguageFeature.DefaultImportOfPackageKotlinComparisons import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.isChildOf -import org.jetbrains.kotlin.name.isSubpackageOf import org.jetbrains.kotlin.resolve.ImportPath import org.jetbrains.kotlin.resolve.SinceKotlinAccessibility import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.checkSinceKotlinVersionAccessibility -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.getValue class DefaultImportProvider( storageManager: StorageManager, - moduleDescriptor: ModuleDescriptor, private val targetPlatform: TargetPlatform, private val languageVersionSettings: LanguageVersionSettings ) { - companion object { - private val PACKAGES_WITH_ALIASES = listOf(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME, KotlinBuiltIns.TEXT_PACKAGE_FQ_NAME) - - private fun ModuleDescriptor.findTypeAliasesInPackages(packages: Collection): Collection { - val result = mutableListOf() - - for (dependencyModuleDescriptor in allDependencyModules) { - if (dependencyModuleDescriptor !is ModuleDescriptorImpl) continue - - for (packageFqName in packages) { - dependencyModuleDescriptor.packageFragmentProviderForContent.getPackageFragments(packageFqName) - .flatMapTo(result) { packageFragmentDescriptor -> - packageFragmentDescriptor.getMemberScope() - .getContributedDescriptors(DescriptorKindFilter.TYPE_ALIASES) - .filterIsInstance() - } - } - } - - return result - } - } - val defaultImports: List by storageManager.createLazyValue { targetPlatform.getDefaultImports(languageVersionSettings.supportsFeature(DefaultImportOfPackageKotlinComparisons)) } - val excludedImports: List by storageManager.createLazyValue { - val builtinTypeAliases = - moduleDescriptor.findTypeAliasesInPackages(PACKAGES_WITH_ALIASES) - .filter { it.checkSinceKotlinVersionAccessibility(languageVersionSettings) == SinceKotlinAccessibility.Accessible } - - val nonKotlinDefaultImportedPackages = - defaultImports - .filter { it.isAllUnder } - .mapNotNull { - it.fqName.takeUnless { it.isSubpackageOf(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) } - } - val nonKotlinAliasedTypeFqNames = - builtinTypeAliases - .mapNotNull { it.expandedType.constructor.declarationDescriptor?.fqNameSafe } - .filter { nonKotlinDefaultImportedPackages.any(it::isChildOf) } - - nonKotlinAliasedTypeFqNames + targetPlatform.excludedImports + val allDefaultImports: List by storageManager.createLazyValue { + defaultImports + targetPlatform.defaultLowPriorityImports } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt index aa458ab1820..03ede647a7f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt @@ -45,6 +45,7 @@ class FileScopeFactory( private val ktImportsFactory: KtImportsFactory, private val platformToKotlinClassMap: PlatformToKotlinClassMap, private val defaultImportProvider: DefaultImportProvider, + private val targetPlatform: TargetPlatform, private val languageVersionSettings: LanguageVersionSettings, private val deprecationResolver: DeprecationResolver ) { @@ -53,6 +54,10 @@ class FileScopeFactory( ktImportsFactory.createImportDirectivesNotCached(defaultImportProvider.defaultImports) } + private val defaultLowPriorityImports by storageManager.createLazyValue { + ktImportsFactory.createImportDirectivesNotCached(targetPlatform.defaultLowPriorityImports) + } + fun createScopesForFile(file: KtFile, existingImports: ImportingScope? = null): FileScopes { val packageView = moduleDescriptor.getPackage(file.packageFqName) val packageFragment = topLevelDescriptorProvider.getPackageFragmentOrDiagnoseFailure(file.packageFqName, file) @@ -60,10 +65,16 @@ class FileScopeFactory( return FilesScopesBuilder(file, existingImports, packageFragment, packageView).result } + private data class DefaultImportResolvers( + val explicit: LazyImportResolver, + val allUnder: LazyImportResolver, + val lowPriority: LazyImportResolver + ) + private fun createDefaultImportResolvers( extraImports: Collection, aliasImportNames: Collection - ): Pair { + ): DefaultImportResolvers { val tempTrace = TemporaryBindingTrace.create(bindingTrace, "Transient trace for default imports lazy resolve", false) val allImplicitImports = defaultImports concat extraImports @@ -73,22 +84,29 @@ class FileScopeFactory( allImplicitImports.filter { it.isAllUnder || it.importedFqName !in aliasImportNames } } - val defaultExplicitImportResolver = createImportResolver( + val explicit = createImportResolver( ExplicitImportsIndexed(defaultImportsFiltered), tempTrace, packageFragment = null, aliasImportNames = aliasImportNames ) - val defaultAllUnderImportResolver = - createImportResolver( - AllUnderImportsIndexed(defaultImportsFiltered), - tempTrace, - packageFragment = null, - aliasImportNames = aliasImportNames, - excludedImports = defaultImportProvider.excludedImports - ) + val allUnder = createImportResolver( + AllUnderImportsIndexed(defaultImportsFiltered), + tempTrace, + packageFragment = null, + aliasImportNames = aliasImportNames, + excludedImports = targetPlatform.excludedImports + ) + val lowPriority = createImportResolver( + AllUnderImportsIndexed(defaultLowPriorityImports.also { imports -> + assert(imports.all { it.isAllUnder }) { "All low priority imports must be all-under: $imports" } + }), + tempTrace, + packageFragment = null, + aliasImportNames = aliasImportNames + ) - return defaultExplicitImportResolver to defaultAllUnderImportResolver + return DefaultImportResolvers(explicit, allUnder, lowPriority) } private val defaultImportResolvers by storageManager.createLazyValue { @@ -152,7 +170,7 @@ class FileScopeFactory( val result = FileScopes(lexicalScope, lazyImportingScope, importResolver) - private fun createDefaultImportResolversForFile(): Pair { + private fun createDefaultImportResolversForFile(): DefaultImportResolvers { val extraImports = file.takeIf { it.isScript() }?.originalFile?.virtualFile?.let { vFile -> val scriptExternalDependencies = getScriptExternalDependencies(vFile, file.project) ktImportsFactory.createImportDirectives(scriptExternalDependencies?.imports?.map { ImportPath.fromString(it) }.orEmpty()) @@ -166,37 +184,40 @@ class FileScopeFactory( } fun createImportingScope(): LazyImportScope { - val (defaultExplicitImportResolver, defaultAllUnderImportResolver) = createDefaultImportResolversForFile() + val (defaultExplicitImportResolver, defaultAllUnderImportResolver, defaultLowPriorityImportResolver) = + createDefaultImportResolversForFile() val dummyContainerDescriptor = DummyContainerDescriptor(file, packageFragment) var scope: ImportingScope val debugName = "LazyFileScope for file " + file.name + scope = LazyImportScope( - existingImports, defaultAllUnderImportResolver, LazyImportScope.FilteringKind.INVISIBLE_CLASSES, + existingImports, defaultAllUnderImportResolver, defaultLowPriorityImportResolver, + LazyImportScope.FilteringKind.INVISIBLE_CLASSES, "Default all under imports in $debugName (invisible classes only)" ) scope = LazyImportScope( - scope, allUnderImportResolver, LazyImportScope.FilteringKind.INVISIBLE_CLASSES, + scope, allUnderImportResolver, null, LazyImportScope.FilteringKind.INVISIBLE_CLASSES, "All under imports in $debugName (invisible classes only)" ) scope = currentPackageScope(packageView, aliasImportNames, dummyContainerDescriptor, FilteringKind.INVISIBLE_CLASSES, scope) scope = LazyImportScope( - scope, defaultAllUnderImportResolver, LazyImportScope.FilteringKind.VISIBLE_CLASSES, + scope, defaultAllUnderImportResolver, defaultLowPriorityImportResolver, LazyImportScope.FilteringKind.VISIBLE_CLASSES, "Default all under imports in $debugName (visible classes)" ) scope = LazyImportScope( - scope, allUnderImportResolver, LazyImportScope.FilteringKind.VISIBLE_CLASSES, + scope, allUnderImportResolver, null, LazyImportScope.FilteringKind.VISIBLE_CLASSES, "All under imports in $debugName (visible classes)" ) scope = LazyImportScope( - scope, defaultExplicitImportResolver, LazyImportScope.FilteringKind.ALL, + scope, defaultExplicitImportResolver, null, LazyImportScope.FilteringKind.ALL, "Default explicit imports in $debugName" ) @@ -204,7 +225,7 @@ class FileScopeFactory( scope = currentPackageScope(packageView, aliasImportNames, dummyContainerDescriptor, FilteringKind.VISIBLE_CLASSES, scope) - return LazyImportScope(scope, explicitImportResolver, LazyImportScope.FilteringKind.ALL, "Explicit imports in $debugName") + return LazyImportScope(scope, explicitImportResolver, null, LazyImportScope.FilteringKind.ALL, "Explicit imports in $debugName") } } @@ -228,7 +249,7 @@ class FileScopeFactory( return object : ImportingScope { override val parent: ImportingScope? = parentScope - override fun getContributedPackage(name: Name) = null + override fun getContributedPackage(name: Name): Nothing? = null override fun getContributedClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? { if (name in excludedNames) return null diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt index 55a26b9a8a4..adbccf9368a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt @@ -38,7 +38,7 @@ import org.jetbrains.kotlin.types.expressions.OperatorConventions import org.jetbrains.kotlin.util.collectionUtils.concat import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.addToStdlib.flatMapToNullable -import java.util.* +import org.jetbrains.kotlin.utils.ifEmpty interface IndexedImports { val imports: List @@ -208,6 +208,7 @@ class LazyImportResolver( class LazyImportScope( override val parent: ImportingScope?, private val importResolver: LazyImportResolver, + private val secondaryImportResolver: LazyImportResolver?, private val filteringKind: LazyImportScope.FilteringKind, private val debugName: String ) : ImportingScope { @@ -218,19 +219,23 @@ class LazyImportScope( INVISIBLE_CLASSES } - private fun isClassifierVisible(descriptor: ClassifierDescriptor): Boolean { + private fun LazyImportResolver.isClassifierVisible(descriptor: ClassifierDescriptor): Boolean { if (filteringKind == FilteringKind.ALL) return true - if (importResolver.deprecationResolver.isHiddenInResolution(descriptor)) return false + if (deprecationResolver.isHiddenInResolution(descriptor)) return false val visibility = (descriptor as DeclarationDescriptorWithVisibility).visibility val includeVisible = filteringKind == FilteringKind.VISIBLE_CLASSES if (!visibility.mustCheckInImports()) return includeVisible - return Visibilities.isVisibleIgnoringReceiver(descriptor, importResolver.moduleDescriptor) == includeVisible + return Visibilities.isVisibleIgnoringReceiver(descriptor, moduleDescriptor) == includeVisible } override fun getContributedClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? { - return importResolver.selectSingleFromImports(name) { scope, name -> + return importResolver.getClassifier(name, location) ?: secondaryImportResolver?.getClassifier(name, location) + } + + private fun LazyImportResolver.getClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? { + return selectSingleFromImports(name) { scope, _ -> val descriptor = scope.getContributedClassifier(name, location) if ((descriptor is ClassDescriptor || descriptor is TypeAliasDescriptor) && isClassifierVisible(descriptor)) descriptor @@ -239,16 +244,20 @@ class LazyImportScope( } } - override fun getContributedPackage(name: Name) = null + override fun getContributedPackage(name: Name): PackageViewDescriptor? = null override fun getContributedVariables(name: Name, location: LookupLocation): Collection { if (filteringKind == FilteringKind.INVISIBLE_CLASSES) return listOf() - return importResolver.collectFromImports(name) { scope, name -> scope.getContributedVariables(name, location) } + return importResolver.collectFromImports(name) { scope, _ -> scope.getContributedVariables(name, location) }.ifEmpty { + secondaryImportResolver?.collectFromImports(name) { scope, _ -> scope.getContributedVariables(name, location) }.orEmpty() + } } override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { if (filteringKind == FilteringKind.INVISIBLE_CLASSES) return listOf() - return importResolver.collectFromImports(name) { scope, name -> scope.getContributedFunctions(name, location) } + return importResolver.collectFromImports(name) { scope, _ -> scope.getContributedFunctions(name, location) }.ifEmpty { + secondaryImportResolver?.collectFromImports(name) { scope, _ -> scope.getContributedFunctions(name, location) }.orEmpty() + } } override fun getContributedDescriptors( @@ -259,26 +268,49 @@ class LazyImportScope( // we do not perform any filtering by visibility here because all descriptors from both visible/invisible filter scopes are to be added anyway if (filteringKind == FilteringKind.INVISIBLE_CLASSES) return listOf() - return importResolver.storageManager.compute { - val descriptors = LinkedHashSet() + val storageManager = importResolver.storageManager + if (secondaryImportResolver != null) { + assert(storageManager === secondaryImportResolver.storageManager) { "Multiple storage managers are not supported" } + } + + return storageManager.compute { + val result = linkedSetOf() + val importedNames = if (secondaryImportResolver == null) null else hashSetOf() + for (directive in importResolver.indexedImports.imports) { val importPath = directive.importPath ?: continue val importedName = importPath.importedName if (importedName == null || nameFilter(importedName)) { - descriptors.addAll( - importResolver.getImportScope(directive).getContributedDescriptors( - kindFilter, - nameFilter, - changeNamesForAliased - ) - ) + val newDescriptors = + importResolver.getImportScope(directive).getContributedDescriptors(kindFilter, nameFilter, changeNamesForAliased) + result.addAll(newDescriptors) + + if (importedNames != null) { + for (descriptor in newDescriptors) { + importedNames.add(descriptor.name) + } + } } } - descriptors + + secondaryImportResolver?.let { resolver -> + for (directive in resolver.indexedImports.imports) { + val newDescriptors = + resolver.getImportScope(directive).getContributedDescriptors(kindFilter, nameFilter, changeNamesForAliased) + + for (descriptor in newDescriptors) { + if (descriptor.name !in importedNames!!) { + result.add(descriptor) + } + } + } + } + + result } } - override fun toString() = "LazyImportScope: " + debugName + override fun toString() = "LazyImportScope: $debugName" override fun printStructure(p: Printer) { p.println(this::class.java.simpleName, ": ", debugName, " {") @@ -288,11 +320,13 @@ class LazyImportScope( p.println("}") } - override fun definitelyDoesNotContainName(name: Name) = importResolver.definitelyDoesNotContainName(name) + override fun definitelyDoesNotContainName(name: Name): Boolean = + importResolver.definitelyDoesNotContainName(name) && secondaryImportResolver?.definitelyDoesNotContainName(name) != false override fun recordLookup(name: Name, location: LookupLocation) { importResolver.recordLookup(name, location) + secondaryImportResolver?.recordLookup(name, location) } - override fun computeImportedNames() = importResolver.allNames + override fun computeImportedNames(): Set? = importResolver.allNames?.union(secondaryImportResolver?.allNames.orEmpty()) } diff --git a/compiler/testData/diagnostics/tests/ResolveToJava.kt b/compiler/testData/diagnostics/tests/ResolveToJava.kt index aff18e7a3e7..da19002d0a3 100644 --- a/compiler/testData/diagnostics/tests/ResolveToJava.kt +++ b/compiler/testData/diagnostics/tests/ResolveToJava.kt @@ -1,5 +1,6 @@ // !WITH_NEW_INFERENCE // !CHECK_TYPE +// JAVAC_SKIP // FILE: f.kt diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt index 1b08b7a5133..ab058d229b9 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt @@ -136,14 +136,6 @@ class ModuleDescriptorImpl @JvmOverloads constructor( return packageFragmentProviderForWholeModuleWithDependencies } - val packageFragmentProviderForContent: PackageFragmentProvider - get() { - assertValid() - return packageFragmentProviderForModuleContent.sure { - "Module $id was not initialized by the time packageFragmentProviderForContent was requested" - } - } - @Suppress("UNCHECKED_CAST") override fun getCapability(capability: ModuleDescriptor.Capability) = capabilities[capability] as? T } diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ImportInsertHelper.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ImportInsertHelper.kt index d69f2c2fff2..26ab2e57d07 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ImportInsertHelper.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ImportInsertHelper.kt @@ -27,6 +27,8 @@ abstract class ImportInsertHelper { /*TODO: implementation is not quite correct*/ abstract fun isImportedWithDefault(importPath: ImportPath, contextFile: KtFile): Boolean + abstract fun isImportedWithLowPriorityDefaultImport(importPath: ImportPath, contextFile: KtFile): Boolean + abstract fun mayImportOnShortenReferences(descriptor: DeclarationDescriptor): Boolean abstract val importSortComparator: Comparator diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt index ffd8b3fa587..dfd30955052 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt @@ -260,7 +260,7 @@ class PsiBasedClassResolver @TestOnly constructor(private val targetClassFqName: private fun KtFile.getDefaultImports(): List { val moduleInfo = getNullableModuleInfo() ?: return emptyList() val versionSettings = IDELanguageSettingsProvider.getLanguageVersionSettings(moduleInfo, project) - return TargetPlatformDetector.getPlatform(this).getDefaultImports( - versionSettings.supportsFeature(LanguageFeature.DefaultImportOfPackageKotlinComparisons) - ) + val platform = TargetPlatformDetector.getPlatform(this) + return platform.getDefaultImports(versionSettings.supportsFeature(LanguageFeature.DefaultImportOfPackageKotlinComparisons)) + + platform.defaultLowPriorityImports } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt index 97e1a20a355..ae20ac0966e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt @@ -139,7 +139,8 @@ object ReplaceWithAnnotationAnalyzer { } private fun buildDefaultImportsScopes(resolutionFacade: ResolutionFacade, module: ModuleDescriptor): List { - val (allUnderImports, aliasImports) = resolutionFacade.frontendService().defaultImports.partition { it.isAllUnder } + val (allUnderImports, aliasImports) = + resolutionFacade.frontendService().allDefaultImports.partition { it.isAllUnder } // this solution doesn't support aliased default imports with a different alias // TODO: Create import directives from ImportPath, create ImportResolver, create LazyResolverScope, see FileScopeProviderImpl diff --git a/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt b/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt index f3d59170d1a..4fc86021e92 100644 --- a/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.idea.core.targetDescriptors import org.jetbrains.kotlin.idea.imports.ImportPathComparator import org.jetbrains.kotlin.idea.imports.getImportableTargets import org.jetbrains.kotlin.idea.imports.importableFqName +import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.refactoring.fqName.isImported import org.jetbrains.kotlin.idea.resolve.frontendService import org.jetbrains.kotlin.idea.util.ImportDescriptorResult @@ -59,7 +60,13 @@ class ImportInsertHelperImpl(private val project: Project) : ImportInsertHelper( override fun isImportedWithDefault(importPath: ImportPath, contextFile: KtFile): Boolean { val defaultImportProvider = contextFile.getResolutionFacade().frontendService() - return importPath.isImported(defaultImportProvider.defaultImports, defaultImportProvider.excludedImports) + val platform = TargetPlatformDetector.getPlatform(contextFile) + return importPath.isImported(defaultImportProvider.allDefaultImports, platform.excludedImports) + } + + override fun isImportedWithLowPriorityDefaultImport(importPath: ImportPath, contextFile: KtFile): Boolean { + val platform = TargetPlatformDetector.getPlatform(contextFile) + return importPath.isImported(platform.defaultLowPriorityImports, platform.excludedImports) } override fun mayImportOnShortenReferences(descriptor: DeclarationDescriptor): Boolean { diff --git a/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt b/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt index 1bee5ed585c..3df74d6f9fd 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt @@ -162,8 +162,8 @@ private fun renderImportName(fqName: FqName, isOnDemand: Boolean) = if (isOnDemand) fqName.render() + ".*" else fqName.render() private val DEFAULT_IMPORTS_SET: Set = JvmPlatform.getDefaultImports( - // TODO: use the correct LanguageVersionSettings instance here - LanguageVersionSettingsImpl.DEFAULT.supportsFeature(LanguageFeature.DefaultImportOfPackageKotlinComparisons) -).filter { it.isAllUnder }.map { it.fqName }.toSet() + // TODO: use the correct LanguageVersionSettings instance here + LanguageVersionSettingsImpl.DEFAULT.supportsFeature(LanguageFeature.DefaultImportOfPackageKotlinComparisons) +).plus(JvmPlatform.defaultLowPriorityImports).filter { it.isAllUnder }.map { it.fqName }.toSet() private fun isImportedByDefault(c: KtLightClass) = c.qualifiedName?.let { FqName(it).parent() } in DEFAULT_IMPORTS_SET diff --git a/jps-plugin/testData/incremental/lookupTracker/jvm/SAM/usages.kt b/jps-plugin/testData/incremental/lookupTracker/jvm/SAM/usages.kt index 97be8052d48..7970e03edc6 100644 --- a/jps-plugin/testData/incremental/lookupTracker/jvm/SAM/usages.kt +++ b/jps-plugin/testData/incremental/lookupTracker/jvm/SAM/usages.kt @@ -3,12 +3,12 @@ package foo /*p:bar(SAMInterface)*/import bar.SAMInterface /*p:foo*/fun foo(c: /*p:bar*/C) /*p:bar(SAMInterface)*/{ - /*p:bar(C)*/c./*c:bar.C c:bar.SAMInterface() c:bar.C(getFoo) c:bar.C(getFOO) p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/foo() + /*p:bar(C)*/c./*c:bar.C c:bar.SAMInterface() c:bar.C(getFoo) c:bar.C(getFOO) p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/foo() /*p:bar(C)*/c./*c:bar.C c:bar.SAMInterface()*/foo /*p:kotlin(Function1) p:kotlin(String)*/{ } - /*p:bar p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/C./*c:bar.C c:bar.SAMInterface()*/bar() - /*p:bar p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/C./*c:bar.C c:bar.SAMInterface()*/bar /*p:kotlin(Function1) p:kotlin(String)*/{} + /*p:bar p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/C./*c:bar.C c:bar.SAMInterface()*/bar() + /*p:bar p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/C./*c:bar.C c:bar.SAMInterface()*/bar /*p:kotlin(Function1) p:kotlin(String)*/{} - /*p:bar c:bar.SAMInterface() p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/SAMInterface() + /*p:bar c:bar.SAMInterface() p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/SAMInterface() /*p:bar c:bar.SAMInterface()*/SAMInterface /*p:kotlin(Function1) p:kotlin(String)*/{} } diff --git a/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/foo.kt b/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/foo.kt index b932c75deba..ef998f02bc9 100644 --- a/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/foo.kt +++ b/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/foo.kt @@ -18,9 +18,9 @@ import bar.* /*c:foo.A*/foo() /*p:foo(A) p:kotlin(Int)*/this./*c:foo.A*/a /*p:foo(A)*/this./*c:foo.A*/foo() - /*c:foo.A c:foo.A(getBaz) c:foo.A(getBAZ) c:foo.A.Companion p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/baz() - /*c:foo.A c:foo.A.Companion p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(Int)*/Companion./*c:foo.A.Companion*/a - /*c:foo.A c:foo.A.Companion p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(String)*/O./*c:foo.A.O*/v = /*p:kotlin(String)*/"OK" + /*c:foo.A c:foo.A(getBaz) c:foo.A(getBAZ) c:foo.A.Companion p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/baz() + /*c:foo.A c:foo.A.Companion p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(Int)*/Companion./*c:foo.A.Companion*/a + /*c:foo.A c:foo.A.Companion p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(String)*/O./*c:foo.A.O*/v = /*p:kotlin(String)*/"OK" } class B { @@ -64,8 +64,8 @@ import bar.* val a = /*p:kotlin(Int)*/1 fun foo() { /*c:foo.E p:kotlin(Int)*/a - /*c:foo.E p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(Int)*/Y./*c:foo.E*/a + /*c:foo.E p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(Int)*/Y./*c:foo.E*/a /*c:foo.E*/foo() - /*c:foo.E p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/X./*c:foo.E*/foo() + /*c:foo.E p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/X./*c:foo.E*/foo() } } diff --git a/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt b/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt index 5b5db050b86..4f7ff1bfa4b 100644 --- a/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt +++ b/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt @@ -29,11 +29,11 @@ import bar.* val iii = /*p:foo p:foo(I)*/Obj./*c:foo.Obj*/bar() /*p:foo(I)*/iii./*c:foo.I*/foo() - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/E./*c:foo.E*/X - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(Int)*/E./*c:foo.E*/X./*c:foo.E*/a - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/E./*c:foo.E*/Y./*c:foo.E*/foo() - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(Array)*/E./*c:foo.E*/values() - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/E./*c:foo.E*/valueOf(/*p:kotlin(String)*/"") + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/E./*c:foo.E*/X + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(Int)*/E./*c:foo.E*/X./*c:foo.E*/a + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/E./*c:foo.E*/Y./*c:foo.E*/foo() + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(Array)*/E./*c:foo.E*/values() + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/E./*c:foo.E*/valueOf(/*p:kotlin(String)*/"") } /*p:foo*/fun classifiers( diff --git a/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt.new.2 b/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt.new.2 index d30c609ccb3..d10294b0001 100644 --- a/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt.new.2 +++ b/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt.new.2 @@ -18,8 +18,8 @@ import bar.* /*p:foo*/A./*c:foo.A*/Companion./*c:foo.A.Companion*/baz() /*p:foo c:foo.A(O)*/A./*c:foo.A.Companion c:foo.A*/O /*p:foo p:kotlin(String)*/A./*c:foo.A*/O./*c:foo.A.O*/v = /*p:kotlin(String)*/"OK" - /*p:foo*/A./*c:foo.A.Companion c:foo.A c:foo.A.Companion(getVala) c:foo.A.Companion(getVALA) p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/vala - /*p:foo*/A./*c:foo.A c:foo.A.Companion c:foo.A.Companion(getVara) c:foo.A.Companion(getVARA) p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/vara() + /*p:foo*/A./*c:foo.A.Companion c:foo.A c:foo.A.Companion(getVala) c:foo.A.Companion(getVALA) p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/vala + /*p:foo*/A./*c:foo.A c:foo.A.Companion c:foo.A.Companion(getVara) c:foo.A.Companion(getVARA) p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/vara() /*p:foo(I) p:kotlin(Int)*/i./*c:foo.I*/a = /*p:kotlin(Int)*/2 /*p:foo p:kotlin(Int)*/Obj./*c:foo.Obj*/a @@ -31,13 +31,13 @@ import bar.* val iii = /*p:foo p:foo(I)*/Obj./*c:foo.Obj*/bar() /*p:foo(I)*/iii./*c:foo.I*/foo() - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/E./*c:foo.E*/X - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(Int)*/E./*c:foo.E*/X./*c:foo.E*/a - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/E./*c:foo.E*/Y./*c:foo.E*/foo() - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(Array)*/E./*c:foo.E*/values() - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/E./*c:foo.E*/valueOf(/*p:kotlin(String)*/"") - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/E./*c:foo.E*/foo - /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/E./*c:foo.E*/bar() + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/E./*c:foo.E*/X + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(Int)*/E./*c:foo.E*/X./*c:foo.E*/a + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/E./*c:foo.E*/Y./*c:foo.E*/foo() + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(Array)*/E./*c:foo.E*/values() + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/E./*c:foo.E*/valueOf(/*p:kotlin(String)*/"") + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/E./*c:foo.E*/foo + /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/E./*c:foo.E*/bar() } /*p:foo*/fun classifiers( diff --git a/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/delegateProperty.kt b/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/delegateProperty.kt index 4402628b9dd..8e149d83fac 100644 --- a/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/delegateProperty.kt +++ b/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/delegateProperty.kt @@ -20,8 +20,8 @@ package foo.bar } -/*p:foo.bar*/val x1 by /*p:foo.bar c:foo.bar.D1(provideDelegate) c:foo.bar.D1(getProvideDelegate) c:foo.bar.D1(getPROVIDEDelegate) p:foo.bar(provideDelegate) p:kotlin(provideDelegate) p:kotlin.annotation(provideDelegate) p:kotlin.collections(provideDelegate) p:kotlin.ranges(provideDelegate) p:kotlin.sequences(provideDelegate) p:kotlin.text(provideDelegate) p:kotlin.io(provideDelegate) p:kotlin.comparisons(provideDelegate) p:java.lang(provideDelegate) p:kotlin.jvm(provideDelegate) c:foo.bar.D1(getValue)*/D1() -/*p:foo.bar*/var y1 by /*p:foo.bar c:foo.bar.D1(provideDelegate) c:foo.bar.D1(getProvideDelegate) c:foo.bar.D1(getPROVIDEDelegate) p:foo.bar(provideDelegate) p:kotlin(provideDelegate) p:kotlin.annotation(provideDelegate) p:kotlin.collections(provideDelegate) p:kotlin.ranges(provideDelegate) p:kotlin.sequences(provideDelegate) p:kotlin.text(provideDelegate) p:kotlin.io(provideDelegate) p:kotlin.comparisons(provideDelegate) p:java.lang(provideDelegate) p:kotlin.jvm(provideDelegate) c:foo.bar.D1(getValue) c:foo.bar.D1(setValue) c:foo.bar.D1(getSetValue) c:foo.bar.D1(getSETValue) p:foo.bar(setValue)*/D1() +/*p:foo.bar*/val x1 by /*p:foo.bar c:foo.bar.D1(provideDelegate) c:foo.bar.D1(getProvideDelegate) c:foo.bar.D1(getPROVIDEDelegate) p:foo.bar(provideDelegate) p:kotlin(provideDelegate) p:kotlin.annotation(provideDelegate) p:kotlin.collections(provideDelegate) p:kotlin.ranges(provideDelegate) p:kotlin.sequences(provideDelegate) p:kotlin.text(provideDelegate) p:kotlin.io(provideDelegate) p:kotlin.comparisons(provideDelegate) p:kotlin.jvm(provideDelegate) p:java.lang(provideDelegate) c:foo.bar.D1(getValue)*/D1() +/*p:foo.bar*/var y1 by /*p:foo.bar c:foo.bar.D1(provideDelegate) c:foo.bar.D1(getProvideDelegate) c:foo.bar.D1(getPROVIDEDelegate) p:foo.bar(provideDelegate) p:kotlin(provideDelegate) p:kotlin.annotation(provideDelegate) p:kotlin.collections(provideDelegate) p:kotlin.ranges(provideDelegate) p:kotlin.sequences(provideDelegate) p:kotlin.text(provideDelegate) p:kotlin.io(provideDelegate) p:kotlin.comparisons(provideDelegate) p:kotlin.jvm(provideDelegate) p:java.lang(provideDelegate) c:foo.bar.D1(getValue) c:foo.bar.D1(setValue) c:foo.bar.D1(getSetValue) c:foo.bar.D1(getSETValue) p:foo.bar(setValue)*/D1() /*p:foo.bar*/val x2 by /*p:foo.bar c:foo.bar.D2(provideDelegate) c:foo.bar.D2(getProvideDelegate) c:foo.bar.D2(getPROVIDEDelegate) p:foo.bar(provideDelegate) c:foo.bar.D2(getValue) c:foo.bar.D2(getGetValue) c:foo.bar.D2(getGETValue) p:foo.bar(getValue)*/D2() /*p:foo.bar*/var y2 by /*p:foo.bar c:foo.bar.D2(provideDelegate) c:foo.bar.D2(getProvideDelegate) c:foo.bar.D2(getPROVIDEDelegate) p:foo.bar(provideDelegate) c:foo.bar.D2(getValue) c:foo.bar.D2(getGetValue) c:foo.bar.D2(getGETValue) p:foo.bar(getValue) c:foo.bar.D2(setValue)*/D2() diff --git a/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/mathematicalLike.kt b/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/mathematicalLike.kt index 1cf542a2a67..29c0b2a3418 100644 --- a/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/mathematicalLike.kt +++ b/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/mathematicalLike.kt @@ -17,8 +17,8 @@ package foo.bar /*p:foo.bar(A)*/a /*c:foo.bar.A(divAssign) c:foo.bar.A(getDivAssign) c:foo.bar.A(getDIVAssign) p:foo.bar(divAssign)*//= /*p:kotlin(Int)*/b // for var - /*p:foo.bar(A)*/d /*c:foo.bar.A(plusAssign) c:foo.bar.A(getPlusAssign) c:foo.bar.A(getPLUSAssign) p:foo.bar(plusAssign) p:kotlin(plusAssign) p:kotlin.annotation(plusAssign) p:kotlin.collections(plusAssign) p:kotlin.ranges(plusAssign) p:kotlin.sequences(plusAssign) p:kotlin.text(plusAssign) p:kotlin.io(plusAssign) p:kotlin.comparisons(plusAssign) p:java.lang(plusAssign) p:kotlin.jvm(plusAssign) c:foo.bar.A(plus)*/+= /*p:kotlin(Int)*/b - /*p:foo.bar(A)*/d /*c:foo.bar.A(minusAssign) c:foo.bar.A(getMinusAssign) c:foo.bar.A(getMINUSAssign) p:foo.bar(minusAssign) p:kotlin(minusAssign) p:kotlin.annotation(minusAssign) p:kotlin.collections(minusAssign) p:kotlin.ranges(minusAssign) p:kotlin.sequences(minusAssign) p:kotlin.text(minusAssign) p:kotlin.io(minusAssign) p:kotlin.comparisons(minusAssign) p:java.lang(minusAssign) p:kotlin.jvm(minusAssign) c:foo.bar.A(minus) c:foo.bar.A(getMinus) c:foo.bar.A(getMINUS) p:foo.bar(minus)*/-= /*p:kotlin(Int)*/b - /*p:foo.bar(A)*/d /*c:foo.bar.A(timesAssign) c:foo.bar.A(times) c:foo.bar.A(getTimes) c:foo.bar.A(getTIMES) p:foo.bar(times) p:kotlin(times) p:kotlin.annotation(times) p:kotlin.collections(times) p:kotlin.ranges(times) p:kotlin.sequences(times) p:kotlin.text(times) p:kotlin.io(times) p:kotlin.comparisons(times) p:java.lang(times) p:kotlin.jvm(times)*/*= /*p:kotlin(Int)*/b - /*p:foo.bar(A)*/d /*c:foo.bar.A(divAssign) c:foo.bar.A(getDivAssign) c:foo.bar.A(getDIVAssign) p:foo.bar(divAssign) c:foo.bar.A(div) c:foo.bar.A(getDiv) c:foo.bar.A(getDIV) p:foo.bar(div) p:kotlin(div) p:kotlin.annotation(div) p:kotlin.collections(div) p:kotlin.ranges(div) p:kotlin.sequences(div) p:kotlin.text(div) p:kotlin.io(div) p:kotlin.comparisons(div) p:java.lang(div) p:kotlin.jvm(div)*//= /*p:kotlin(Int)*/b + /*p:foo.bar(A)*/d /*c:foo.bar.A(plusAssign) c:foo.bar.A(getPlusAssign) c:foo.bar.A(getPLUSAssign) p:foo.bar(plusAssign) p:kotlin(plusAssign) p:kotlin.annotation(plusAssign) p:kotlin.collections(plusAssign) p:kotlin.ranges(plusAssign) p:kotlin.sequences(plusAssign) p:kotlin.text(plusAssign) p:kotlin.io(plusAssign) p:kotlin.comparisons(plusAssign) p:kotlin.jvm(plusAssign) p:java.lang(plusAssign) c:foo.bar.A(plus)*/+= /*p:kotlin(Int)*/b + /*p:foo.bar(A)*/d /*c:foo.bar.A(minusAssign) c:foo.bar.A(getMinusAssign) c:foo.bar.A(getMINUSAssign) p:foo.bar(minusAssign) p:kotlin(minusAssign) p:kotlin.annotation(minusAssign) p:kotlin.collections(minusAssign) p:kotlin.ranges(minusAssign) p:kotlin.sequences(minusAssign) p:kotlin.text(minusAssign) p:kotlin.io(minusAssign) p:kotlin.comparisons(minusAssign) p:kotlin.jvm(minusAssign) p:java.lang(minusAssign) c:foo.bar.A(minus) c:foo.bar.A(getMinus) c:foo.bar.A(getMINUS) p:foo.bar(minus)*/-= /*p:kotlin(Int)*/b + /*p:foo.bar(A)*/d /*c:foo.bar.A(timesAssign) c:foo.bar.A(times) c:foo.bar.A(getTimes) c:foo.bar.A(getTIMES) p:foo.bar(times) p:kotlin(times) p:kotlin.annotation(times) p:kotlin.collections(times) p:kotlin.ranges(times) p:kotlin.sequences(times) p:kotlin.text(times) p:kotlin.io(times) p:kotlin.comparisons(times) p:kotlin.jvm(times) p:java.lang(times)*/*= /*p:kotlin(Int)*/b + /*p:foo.bar(A)*/d /*c:foo.bar.A(divAssign) c:foo.bar.A(getDivAssign) c:foo.bar.A(getDIVAssign) p:foo.bar(divAssign) c:foo.bar.A(div) c:foo.bar.A(getDiv) c:foo.bar.A(getDIV) p:foo.bar(div) p:kotlin(div) p:kotlin.annotation(div) p:kotlin.collections(div) p:kotlin.ranges(div) p:kotlin.sequences(div) p:kotlin.text(div) p:kotlin.io(div) p:kotlin.comparisons(div) p:kotlin.jvm(div) p:java.lang(div)*//= /*p:kotlin(Int)*/b } diff --git a/jps-plugin/testData/incremental/lookupTracker/jvm/expressionType/inferredType.kt b/jps-plugin/testData/incremental/lookupTracker/jvm/expressionType/inferredType.kt index 2d908d375e0..859fb943514 100644 --- a/jps-plugin/testData/incremental/lookupTracker/jvm/expressionType/inferredType.kt +++ b/jps-plugin/testData/incremental/lookupTracker/jvm/expressionType/inferredType.kt @@ -6,8 +6,8 @@ package foo /*p:foo*/fun getA() = /*p:foo*/A() /*p:foo*/fun getB() = /*p:foo*/B() -/*p:foo*/fun getListOfA() = /*p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:foo p:kotlin.collections(List) p:foo(A)*/listOf(/*p:foo*/A()) -/*p:foo*/fun getListOfB() = /*p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:foo p:kotlin.collections(List) p:foo(B)*/listOf(/*p:foo*/B()) +/*p:foo*/fun getListOfA() = /*p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:foo p:kotlin.collections(List) p:foo(A)*/listOf(/*p:foo*/A()) +/*p:foo*/fun getListOfB() = /*p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:foo p:kotlin.collections(List) p:foo(B)*/listOf(/*p:foo*/B()) /*p:foo*/fun useListOfA(a: /*p:foo p:kotlin.collections*/List) {} /*p:foo*/fun useListOfB(b: /*p:foo p:kotlin.collections*/List) {} diff --git a/jps-plugin/testData/incremental/lookupTracker/jvm/java/usages.kt b/jps-plugin/testData/incremental/lookupTracker/jvm/java/usages.kt index f147e9aec48..4cede651855 100644 --- a/jps-plugin/testData/incremental/lookupTracker/jvm/java/usages.kt +++ b/jps-plugin/testData/incremental/lookupTracker/jvm/java/usages.kt @@ -11,27 +11,27 @@ import baz.* /*p:bar(C)*/c./*c:bar.C*/func() /*p:bar(C) c:bar.C(B)*/c./*c:bar.C*/B() - /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(String)*/C./*c:bar.C*/sfield - /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(String)*/C./*c:bar.C*/sfield = /*p:kotlin(String)*/"new" - /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/C./*c:bar.C*/sfunc() - /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm c:bar.C(S)*/C./*c:bar.C*/S() + /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(String)*/C./*c:bar.C*/sfield + /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(String)*/C./*c:bar.C*/sfield = /*p:kotlin(String)*/"new" + /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/C./*c:bar.C*/sfunc() + /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang c:bar.C(S)*/C./*c:bar.C*/S() // inherited from I /*p:bar(C)*/c./*c:bar.C*/ifunc() - /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(String)*/C./*c:bar.C*/isfield + /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(String)*/C./*c:bar.C*/isfield // expected error: Unresolved reference: IS - /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/C./*c:bar.C*/IS() + /*p:bar p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/C./*c:bar.C*/IS() val i: /*p:foo*/I = /*p:bar(C)*/c /*p:foo(I)*/i./*c:foo.I*/ifunc() - /*p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(String)*/I./*c:foo.I*/isfield - /*p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm c:foo.I(IS)*/I./*c:foo.I*/IS() + /*p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(String)*/I./*c:foo.I*/isfield + /*p:foo p:baz p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang c:foo.I(IS)*/I./*c:foo.I*/IS() - /*p:baz p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/E./*c:baz.E*/F - /*p:baz p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:kotlin(Int)*/E./*c:baz.E*/F./*c:baz.E*/field - /*p:baz p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/E./*c:baz.E*/S./*c:baz.E*/func() + /*p:baz p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/E./*c:baz.E*/F + /*p:baz p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:kotlin(Int)*/E./*c:baz.E*/F./*c:baz.E*/field + /*p:baz p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/E./*c:baz.E*/S./*c:baz.E*/func() } /*p:foo*/fun classifiers( diff --git a/jps-plugin/testData/incremental/lookupTracker/jvm/packageDeclarations/foo1.kt b/jps-plugin/testData/incremental/lookupTracker/jvm/packageDeclarations/foo1.kt index 1ade1504d79..d9d2ba12161 100644 --- a/jps-plugin/testData/incremental/lookupTracker/jvm/packageDeclarations/foo1.kt +++ b/jps-plugin/testData/incremental/lookupTracker/jvm/packageDeclarations/foo1.kt @@ -4,7 +4,7 @@ import bar.* /*p:baz(C)*/import baz.C /*p:foo*/val a = /*p:bar p:foo*/A() -/*p:foo*/var b: /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/baz./*p:baz*/B = /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:baz(B)*/baz./*p:baz*/B() +/*p:foo*/var b: /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/baz./*p:baz*/B = /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:baz(B)*/baz./*p:baz*/B() /*p:foo*/fun function(p: /*p:foo p:bar*/B): /*p:foo p:bar*/B /*p:kotlin(Nothing)*/{ /*p:foo p:bar(A)*/a @@ -12,6 +12,6 @@ import bar.* } /*p:foo*/fun /*p:foo*/MyClass.extFunc(p: /**p:foo p:bar*//*p:foo p:kotlin*/Array, e: /*p:foo*/MyEnum, c: /**???*//*p:baz*/C): /*p:foo*/MyInterface /*p:kotlin(Nothing)*/{ - /*c:foo.MyClass c:foo.MyClass(getB) p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm p:baz(B)*/b - /*p:kotlin(Nothing)*/return /*c:foo.MyClass p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/MyClass() + /*c:foo.MyClass c:foo.MyClass(getB) p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang p:baz(B)*/b + /*p:kotlin(Nothing)*/return /*c:foo.MyClass p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/MyClass() } diff --git a/jps-plugin/testData/incremental/lookupTracker/jvm/syntheticProperties/usages.kt b/jps-plugin/testData/incremental/lookupTracker/jvm/syntheticProperties/usages.kt index 6e90f036e0a..d7fa1bf33b3 100644 --- a/jps-plugin/testData/incremental/lookupTracker/jvm/syntheticProperties/usages.kt +++ b/jps-plugin/testData/incremental/lookupTracker/jvm/syntheticProperties/usages.kt @@ -8,23 +8,23 @@ package foo.bar val k = /*p:foo*/KotlinClass() /*p:(JavaClass) p:kotlin(Int)*/j./*c:JavaClass*/getFoo() - /*p:(JavaClass)*/j./*c:JavaClass c:JavaClass(getSetFoo) c:JavaClass(getSETFoo) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/setFoo(2) + /*p:(JavaClass)*/j./*c:JavaClass c:JavaClass(getSetFoo) c:JavaClass(getSETFoo) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/setFoo(2) /*p:(JavaClass) p:kotlin(Int)*/j./*c:JavaClass c:JavaClass(getFoo) c:JavaClass(getFOO) c:JavaClass(setFoo)*/foo = /*p:kotlin(Int)*/2 /*p:(JavaClass) p:kotlin(Int)*/j./*c:JavaClass c:JavaClass(getFoo) c:JavaClass(getFOO) c:JavaClass(setFoo)*/foo /*p:(JavaClass) p:kotlin(String)*/j./*c:JavaClass c:JavaClass(getBar) c:JavaClass(getBAR) c:JavaClass(setBar)*/bar /*p:(JavaClass) p:kotlin(String)*/j./*c:JavaClass c:JavaClass(getBar) c:JavaClass(getBAR) c:JavaClass(setBar)*/bar = /*p:kotlin(String)*/"" - /*p:(JavaClass)*/j./*c:JavaClass c:JavaClass(getBazBaz) c:JavaClass(getBAZBaz) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/bazBaz - /*p:(JavaClass)*/j./*c:JavaClass c:JavaClass(getBazBaz) c:JavaClass(getBAZBaz) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/bazBaz = /*p:kotlin(String)*/"" + /*p:(JavaClass)*/j./*c:JavaClass c:JavaClass(getBazBaz) c:JavaClass(getBAZBaz) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/bazBaz + /*p:(JavaClass)*/j./*c:JavaClass c:JavaClass(getBazBaz) c:JavaClass(getBAZBaz) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/bazBaz = /*p:kotlin(String)*/"" /*p:(JavaClass)*/j./*c:JavaClass*/setBoo(2) - /*p:(JavaClass)*/j./*c:JavaClass c:JavaClass(getBoo) c:JavaClass(getBOO) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm*/boo = /*p:kotlin(Int)*/2 + /*p:(JavaClass)*/j./*c:JavaClass c:JavaClass(getBoo) c:JavaClass(getBOO) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang*/boo = /*p:kotlin(Int)*/2 /*p:foo(KotlinClass) p:kotlin(Int)*/k./*c:foo.KotlinClass c:JavaClass*/getFoo() // getFoo may be an inner class in JavaClass /*p:foo(KotlinClass)*/k./*c:foo.KotlinClass c:JavaClass*/setFoo(2) /*p:foo(KotlinClass) p:kotlin(Int)*/k./*c:foo.KotlinClass c:foo.KotlinClass(getFoo) c:foo.KotlinClass(getFOO) c:foo.KotlinClass(setFoo)*/foo = /*p:kotlin(Int)*/2 /*p:foo(KotlinClass) p:kotlin(Int)*/k./*c:foo.KotlinClass c:foo.KotlinClass(getFoo) c:foo.KotlinClass(getFOO) c:foo.KotlinClass(setFoo)*/foo /*p:foo(KotlinClass) p:kotlin(String)*/k./*c:foo.KotlinClass c:foo.KotlinClass(getBar) c:foo.KotlinClass(getBAR) c:foo.KotlinClass(setBar)*/bar /*p:foo(KotlinClass) p:kotlin(String)*/k./*c:foo.KotlinClass c:foo.KotlinClass(getBar) c:foo.KotlinClass(getBAR) c:foo.KotlinClass(setBar)*/bar = /*p:kotlin(String)*/"" - /*p:foo(KotlinClass)*/k./*c:foo.KotlinClass c:foo.KotlinClass(getBazBaz) c:foo.KotlinClass(getBAZBaz) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm c:JavaClass*/bazBaz - /*p:foo(KotlinClass)*/k./*c:foo.KotlinClass c:foo.KotlinClass(getBazBaz) c:foo.KotlinClass(getBAZBaz) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm c:JavaClass*/bazBaz = /*p:kotlin(String)*/"" + /*p:foo(KotlinClass)*/k./*c:foo.KotlinClass c:foo.KotlinClass(getBazBaz) c:foo.KotlinClass(getBAZBaz) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang c:JavaClass*/bazBaz + /*p:foo(KotlinClass)*/k./*c:foo.KotlinClass c:foo.KotlinClass(getBazBaz) c:foo.KotlinClass(getBAZBaz) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang c:JavaClass*/bazBaz = /*p:kotlin(String)*/"" /*p:foo(KotlinClass)*/k./*c:foo.KotlinClass c:JavaClass*/setBoo(2) - /*p:foo(KotlinClass)*/k./*c:foo.KotlinClass c:foo.KotlinClass(getBoo) c:foo.KotlinClass(getBOO) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:java.lang p:kotlin.jvm c:JavaClass*/boo = /*p:kotlin(Int)*/2 + /*p:foo(KotlinClass)*/k./*c:foo.KotlinClass c:foo.KotlinClass(getBoo) c:foo.KotlinClass(getBOO) p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.jvm p:java.lang c:JavaClass*/boo = /*p:kotlin(Int)*/2 }