From 1f0fb4823fd323d83f43e7597412385c9d9e7f46 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 4 Apr 2018 01:14:04 +0200 Subject: [PATCH] Simplify DefaultImportProvider, introduce "low priority imports" Previously, packages `java.lang` and `kotlin.jvm` were imported on JVM by default on the same rights, causing problems when the same classifier existed both in `java.lang` and `kotlin.jvm`. Since the only known case of such conflict were type aliases to JVM classes, the corresponding classes (expansions of those type aliases) were manually excluded from default imports. This made the code in DefaultImportProvider complicated and resulted in multiple problems, regarding both correctness and performance (see 82364ad3e5, a9f2f5c7d0, dd3dbda719). This change adds a new concept, a "low priority import", and treats `java.lang` as such. Since these imports are now separated from the rest of default imports in LazyImportScope via secondaryClassImportResolver, conflicts between classifiers are handled naturally: the one from `kotlin.jvm` always wins (unless the one from `java.lang` is imported explicitly, of course). This approach is simpler, safer and does not require any memory to cache anything. Skip ResolveToJava.kt test for javac-based resolve; it now fails because of a weird issue which I didn't have time to investigate (this is OK because it's a corner case of an experimental functionality) --- .../resolve/jvm/platform/JvmPlatform.kt | 3 +- .../kotlin/resolve/TargetPlatform.kt | 4 + .../resolve/lazy/DefaultImportProvider.kt | 53 +------------ .../kotlin/resolve/lazy/FileScopeFactory.kt | 61 ++++++++++----- .../kotlin/resolve/lazy/LazyImportScope.kt | 76 ++++++++++++++----- .../diagnostics/tests/ResolveToJava.kt | 1 + .../descriptors/impl/ModuleDescriptorImpl.kt | 8 -- .../kotlin/idea/util/ImportInsertHelper.kt | 2 + .../idea/search/PsiBasedClassResolver.kt | 6 +- .../ReplaceWithAnnotationAnalyzer.kt | 3 +- .../idea/util/ImportInsertHelperImpl.kt | 9 ++- .../jetbrains/kotlin/j2k/importConversion.kt | 6 +- .../lookupTracker/jvm/SAM/usages.kt | 8 +- .../jvm/classifierMembers/foo.kt | 10 +-- .../jvm/classifierMembers/usages.kt | 10 +-- .../jvm/classifierMembers/usages.kt.new.2 | 18 ++--- .../jvm/conventions/delegateProperty.kt | 4 +- .../jvm/conventions/mathematicalLike.kt | 8 +- .../jvm/expressionType/inferredType.kt | 4 +- .../lookupTracker/jvm/java/usages.kt | 22 +++--- .../jvm/packageDeclarations/foo1.kt | 6 +- .../jvm/syntheticProperties/usages.kt | 14 ++-- 22 files changed, 175 insertions(+), 161 deletions(-) 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 }