From 5bc5722051193abaea9f2015ce06f430abd7f84b Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 6 Apr 2016 16:35:50 +0300 Subject: [PATCH] Load additional JDK functions into built-ins member scope #KT-5990 Fixed #KT-7127 Fixed #KT-10370 Fixed --- .../jetbrains/kotlin/container/Components.kt | 3 +- .../jvm/TopDownAnalyzerFacadeForJVM.java | 7 +- .../synthetic/syntheticExtensionsUtils.kt | 3 +- .../kotlin/analyzer/AnalyzerFacade.kt | 13 +- .../org/jetbrains/kotlin/context/context.kt | 3 +- .../java6/kotlin-collections.txt | 234 ++++++ .../builtin-classes/java6/kotlin-ranges.txt | 181 +++++ .../testData/builtin-classes/java6/kotlin.txt | 699 +++++++++++++++++ .../java8/kotlin-collections.txt | 292 ++++++++ .../builtin-classes/java8/kotlin-ranges.txt | 196 +++++ .../testData/builtin-classes/java8/kotlin.txt | 705 ++++++++++++++++++ .../testData/codegen/java8/box/removeIf.kt | 33 + compiler/testData/codegen/java8/box/stream.kt | 61 ++ .../jdk8Against6.kt | 21 + .../targetedBuiltIns/removeIf.kt | 10 + .../targetedBuiltIns/removeIf.txt | 25 + .../testsWithJava8/targetedBuiltIns/stream.kt | 10 + .../targetedBuiltIns/stream.txt | 18 + .../DeserializedScopeValidationVisitor.kt | 6 +- .../resolve/lazy/lazyResolveTestUtils.kt | 4 +- compiler/tests-java8/compiler-tests-java8.iml | 1 + .../DiagnosticsWithJava8TestGenerated.java | 21 + ...BlackBoxWithJava8CodegenTestGenerated.java | 12 + ...mpileKotlinAgainstKotlinTestGenerated.java | 43 ++ .../Java8BuiltInsWithJDKMembersTest.kt | 23 + .../checkers/AbstractDiagnosticsTest.java | 6 +- .../MultiModuleJavaAnalysisCustomTest.kt | 8 +- .../AbstractBuiltInsWithJDKMembersTest.kt | 80 ++ .../Java6BuiltInsWithJDKMembersTest.kt | 23 + .../kotlin/load/java/lazy/context.kt | 13 +- .../descriptors/LazyJavaClassDescriptor.kt | 24 +- .../descriptors/LazyJavaClassMemberScope.kt | 10 +- .../BuiltInClassesAreSerializableOnJvm.kt | 130 +++- .../DeserializationComponentsForJava.kt | 2 +- .../jetbrains/kotlin/platform/JvmBuiltIns.kt | 24 +- .../jetbrains/kotlin/platform/mappingUtil.kt | 34 + .../load/kotlin/reflect/RuntimeModuleData.kt | 5 +- .../kotlin/builtins/DefaultBuiltIns.kt | 4 +- .../kotlin/builtins/KotlinBuiltIns.java | 26 +- .../descriptors/FunctionDescriptor.java | 7 + .../kotlin/descriptors/descriptorUtil.kt | 31 + .../impl/FunctionDescriptorImpl.java | 20 +- .../ErrorSimpleFunctionDescriptorImpl.java | 13 + .../AdditionalClassPartsProvider.kt | 6 + .../DeserializedClassDescriptor.kt | 4 +- .../org/jetbrains/kotlin/utils/SmartSet.kt | 2 +- .../kotlin/generators/tests/GenerateTests.kt | 9 +- .../caches/resolve/KotlinCacheServiceImpl.kt | 52 +- .../caches/resolve/ModuleDependencyMapper.kt | 5 +- .../testData/basic/java8/CollectionMethods.kt | 7 + .../testData/basic/java8/StreamMethods.kt | 7 + .../AbstractJava8BasicCompletionTest.java | 29 + .../Java8BasicCompletionTestGenerated.java | 49 ++ ...thJdkAndRuntimeLightProjectDescriptor.java | 7 + .../jdk8/overrideCollectionStream.kt | 3 + .../jdk8/overrideCollectionStream.kt.after | 7 + .../differentJdk/jdk8/main.kt | 13 + .../differentJdk/mockJdk/main.kt | 54 ++ .../AbstractMultiModuleHighlightingTest.kt | 81 ++ .../Java8MultiModuleHighlightingTest.kt | 28 + .../resolve/MultiModuleHighlightingTest.kt | 56 +- .../codeInsight/Java8OverrideImplementTest.kt | 37 + .../analyze/TopDownAnalyzerFacadeForJS.java | 2 +- 63 files changed, 3395 insertions(+), 147 deletions(-) create mode 100644 compiler/testData/builtin-classes/java6/kotlin-collections.txt create mode 100644 compiler/testData/builtin-classes/java6/kotlin-ranges.txt create mode 100644 compiler/testData/builtin-classes/java6/kotlin.txt create mode 100644 compiler/testData/builtin-classes/java8/kotlin-collections.txt create mode 100644 compiler/testData/builtin-classes/java8/kotlin-ranges.txt create mode 100644 compiler/testData/builtin-classes/java8/kotlin.txt create mode 100644 compiler/testData/codegen/java8/box/removeIf.kt create mode 100644 compiler/testData/codegen/java8/box/stream.kt create mode 100644 compiler/testData/compileKotlinAgainstKotlinJava8/jdk8Against6.kt create mode 100644 compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/removeIf.kt create mode 100644 compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/removeIf.txt create mode 100644 compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/stream.kt create mode 100644 compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/stream.txt create mode 100644 compiler/tests-java8/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java create mode 100644 compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/Java8BuiltInsWithJDKMembersTest.kt create mode 100644 compiler/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt create mode 100644 compiler/tests/org/jetbrains/kotlin/serialization/builtins/Java6BuiltInsWithJDKMembersTest.kt create mode 100644 core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/mappingUtil.kt create mode 100644 core/descriptors/src/org/jetbrains/kotlin/descriptors/descriptorUtil.kt create mode 100644 idea/idea-completion/testData/basic/java8/CollectionMethods.kt create mode 100644 idea/idea-completion/testData/basic/java8/StreamMethods.kt create mode 100644 idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJava8BasicCompletionTest.java create mode 100644 idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/Java8BasicCompletionTestGenerated.java create mode 100644 idea/testData/codeInsight/overrideImplement/jdk8/overrideCollectionStream.kt create mode 100644 idea/testData/codeInsight/overrideImplement/jdk8/overrideCollectionStream.kt.after create mode 100644 idea/testData/multiModuleHighlighting/differentJdk/jdk8/main.kt create mode 100644 idea/testData/multiModuleHighlighting/differentJdk/mockJdk/main.kt create mode 100644 idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt create mode 100644 idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt create mode 100644 idea/tests/org/jetbrains/kotlin/idea/codeInsight/Java8OverrideImplementTest.kt diff --git a/compiler/container/src/org/jetbrains/kotlin/container/Components.kt b/compiler/container/src/org/jetbrains/kotlin/container/Components.kt index 1a0f02d44fd..7957cec626d 100644 --- a/compiler/container/src/org/jetbrains/kotlin/container/Components.kt +++ b/compiler/container/src/org/jetbrains/kotlin/container/Components.kt @@ -28,5 +28,4 @@ class InstanceComponentDescriptor(val instance: Any) : ComponentDescriptor { override fun toString(): String { return "Instance: ${instance.javaClass.simpleName}" } -} - +} \ No newline at end of file diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java index a520a2202ff..220eee00014 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.analyzer.AnalysisResult; import org.jetbrains.kotlin.context.ContextKt; import org.jetbrains.kotlin.context.ModuleContext; import org.jetbrains.kotlin.context.MutableModuleContext; +import org.jetbrains.kotlin.context.ProjectContext; import org.jetbrains.kotlin.descriptors.ModuleDescriptor; import org.jetbrains.kotlin.descriptors.PackageFragmentProvider; import org.jetbrains.kotlin.descriptors.PackagePartProvider; @@ -161,9 +162,13 @@ public enum TopDownAnalyzerFacadeForJVM { @NotNull public static MutableModuleContext createContextWithSealedModule(@NotNull Project project, @NotNull String moduleName) { + ProjectContext projectContext = ContextKt.ProjectContext(project); + JvmBuiltIns builtIns = new JvmBuiltIns(projectContext.getStorageManager()); MutableModuleContext context = ContextKt.ContextForNewModule( - project, Name.special("<" + moduleName + ">"), JvmPlatform.INSTANCE, JvmBuiltIns.getInstance() + projectContext, Name.special("<" + moduleName + ">"), JvmPlatform.INSTANCE, + builtIns ); + builtIns.setOwnerModuleDescriptor(context.getModule()); context.setDependencies(context.getModule(), context.getBuiltIns().getBuiltInsModule()); return context; } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/syntheticExtensionsUtils.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/syntheticExtensionsUtils.kt index 874094c251b..5a0fd9672e4 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/syntheticExtensionsUtils.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/syntheticExtensionsUtils.kt @@ -17,12 +17,13 @@ package org.jetbrains.kotlin.synthetic import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue fun FunctionDescriptor.hasJavaOriginInHierarchy(): Boolean { return if (original.overriddenDescriptors.isEmpty()) - containingDeclaration is JavaClassDescriptor + this is JavaCallableMemberDescriptor || containingDeclaration is JavaClassDescriptor else original.overriddenDescriptors.any { it.hasJavaOriginInHierarchy() } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index 39aec4e8069..65768611305 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.TargetEnvironment import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.createModule +import org.jetbrains.kotlin.utils.singletonOrEmptyList import java.util.* class ResolverForModule( @@ -155,7 +156,8 @@ abstract class AnalyzerFacade { targetEnvironment: TargetEnvironment, builtIns: KotlinBuiltIns, delegateResolver: ResolverForProject = EmptyResolverForProject(), - packagePartProviderFactory: (M, ModuleContent) -> PackagePartProvider = { module, content -> PackagePartProvider.EMPTY } + packagePartProviderFactory: (M, ModuleContent) -> PackagePartProvider = { module, content -> PackagePartProvider.EMPTY }, + firstDependency: M? = null ): ResolverForProject { val storageManager = projectContext.storageManager fun createResolverForProject(): ResolverForProjectImpl { @@ -171,10 +173,11 @@ abstract class AnalyzerFacade { val resolverForProject = createResolverForProject() fun computeDependencyDescriptors(module: M): List { - val dependenciesDescriptors = module.dependencies().mapTo(ArrayList()) { - dependencyInfo -> - resolverForProject.descriptorForModule(dependencyInfo as M) - } + val orderedDependencies = firstDependency.singletonOrEmptyList() + module.dependencies() + val dependenciesDescriptors = orderedDependencies.mapTo(ArrayList()) { + dependencyInfo -> + resolverForProject.descriptorForModule(dependencyInfo as M) + } module.dependencyOnBuiltIns().adjustDependencies( resolverForProject.descriptorForModule(module).builtIns.builtInsModule, dependenciesDescriptors) return dependenciesDescriptors diff --git a/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt b/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt index fe4fe9762d4..d66ae17af5c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt @@ -116,12 +116,11 @@ fun ContextForNewModule( } fun ContextForNewModule( - project: Project, + projectContext: ProjectContext, moduleName: Name, targetPlatform: TargetPlatform, builtIns: KotlinBuiltIns ): MutableModuleContext { - val projectContext = ProjectContext(project) val module = targetPlatform.createModule(moduleName, projectContext.storageManager, builtIns) return MutableModuleContextImpl(module, projectContext) } diff --git a/compiler/testData/builtin-classes/java6/kotlin-collections.txt b/compiler/testData/builtin-classes/java6/kotlin-collections.txt new file mode 100644 index 00000000000..2a6c089b0b4 --- /dev/null +++ b/compiler/testData/builtin-classes/java6/kotlin-collections.txt @@ -0,0 +1,234 @@ +package-fragment kotlin.collections + +public abstract class BooleanIterator : kotlin.collections.Iterator { + /*primary*/ public constructor BooleanIterator() + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Boolean + public abstract fun nextBoolean(): kotlin.Boolean +} + +public abstract class ByteIterator : kotlin.collections.Iterator { + /*primary*/ public constructor ByteIterator() + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Byte + public abstract fun nextByte(): kotlin.Byte +} + +public abstract class CharIterator : kotlin.collections.Iterator { + /*primary*/ public constructor CharIterator() + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Char + public abstract fun nextChar(): kotlin.Char +} + +public interface Collection : kotlin.collections.Iterable { + public abstract val size: kotlin.Int + public abstract fun (): kotlin.Int + public abstract operator fun contains(/*0*/ element: @kotlin.UnsafeVariance() E): kotlin.Boolean + public abstract fun containsAll(/*0*/ elements: kotlin.collections.Collection<@kotlin.UnsafeVariance() E>): kotlin.Boolean + public abstract fun isEmpty(): kotlin.Boolean + public abstract override /*1*/ fun iterator(): kotlin.collections.Iterator +} + +public abstract class DoubleIterator : kotlin.collections.Iterator { + /*primary*/ public constructor DoubleIterator() + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Double + public abstract fun nextDouble(): kotlin.Double +} + +public abstract class FloatIterator : kotlin.collections.Iterator { + /*primary*/ public constructor FloatIterator() + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Float + public abstract fun nextFloat(): kotlin.Float +} + +public abstract class IntIterator : kotlin.collections.Iterator { + /*primary*/ public constructor IntIterator() + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Int + public abstract fun nextInt(): kotlin.Int +} + +public interface Iterable { + public abstract operator fun iterator(): kotlin.collections.Iterator +} + +public interface Iterator { + public abstract operator fun hasNext(): kotlin.Boolean + public abstract operator fun next(): T +} + +public interface List : kotlin.collections.Collection { + public abstract override /*1*/ val size: kotlin.Int + public abstract override /*1*/ fun (): kotlin.Int + public abstract override /*1*/ fun contains(/*0*/ element: @kotlin.UnsafeVariance() E): kotlin.Boolean + public abstract override /*1*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection<@kotlin.UnsafeVariance() E>): kotlin.Boolean + public abstract operator fun get(/*0*/ index: kotlin.Int): E + public abstract fun indexOf(/*0*/ element: @kotlin.UnsafeVariance() E): kotlin.Int + public abstract override /*1*/ fun isEmpty(): kotlin.Boolean + public abstract override /*1*/ fun iterator(): kotlin.collections.Iterator + public abstract fun lastIndexOf(/*0*/ element: @kotlin.UnsafeVariance() E): kotlin.Int + public abstract fun listIterator(): kotlin.collections.ListIterator + public abstract fun listIterator(/*0*/ index: kotlin.Int): kotlin.collections.ListIterator + public abstract fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.collections.List +} + +public interface ListIterator : kotlin.collections.Iterator { + public abstract override /*1*/ fun hasNext(): kotlin.Boolean + public abstract fun hasPrevious(): kotlin.Boolean + public abstract override /*1*/ fun next(): T + public abstract fun nextIndex(): kotlin.Int + public abstract fun previous(): T + public abstract fun previousIndex(): kotlin.Int +} + +public abstract class LongIterator : kotlin.collections.Iterator { + /*primary*/ public constructor LongIterator() + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Long + public abstract fun nextLong(): kotlin.Long +} + +public interface Map { + public abstract val entries: kotlin.collections.Set> + public abstract fun (): kotlin.collections.Set> + public abstract val keys: kotlin.collections.Set + public abstract fun (): kotlin.collections.Set + public abstract val size: kotlin.Int + public abstract fun (): kotlin.Int + public abstract val values: kotlin.collections.Collection + public abstract fun (): kotlin.collections.Collection + public abstract fun containsKey(/*0*/ key: K): kotlin.Boolean + public abstract fun containsValue(/*0*/ value: @kotlin.UnsafeVariance() V): kotlin.Boolean + public abstract operator fun get(/*0*/ key: K): V? + public abstract fun isEmpty(): kotlin.Boolean + + public interface Entry { + public abstract val key: K + public abstract fun (): K + public abstract val value: V + public abstract fun (): V + } +} + +public interface MutableCollection : kotlin.collections.Collection, kotlin.collections.MutableIterable { + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun (): kotlin.Int + public abstract fun add(/*0*/ element: E): kotlin.Boolean + public abstract fun addAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract fun clear(): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun contains(/*0*/ element: E): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract override /*2*/ fun iterator(): kotlin.collections.MutableIterator + public abstract fun remove(/*0*/ element: E): kotlin.Boolean + public abstract fun removeAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract fun retainAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean +} + +public interface MutableIterable : kotlin.collections.Iterable { + public abstract override /*1*/ fun iterator(): kotlin.collections.MutableIterator +} + +public interface MutableIterator : kotlin.collections.Iterator { + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun next(): T + public abstract fun remove(): kotlin.Unit +} + +public interface MutableList : kotlin.collections.List, kotlin.collections.MutableCollection { + public abstract override /*2*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*2*/ /*fake_override*/ fun (): kotlin.Int + public abstract override /*1*/ fun add(/*0*/ element: E): kotlin.Boolean + public abstract fun add(/*0*/ index: kotlin.Int, /*1*/ element: E): kotlin.Unit + public abstract fun addAll(/*0*/ index: kotlin.Int, /*1*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract override /*1*/ fun addAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract override /*1*/ fun clear(): kotlin.Unit + public abstract override /*2*/ /*fake_override*/ fun contains(/*0*/ element: E): kotlin.Boolean + public abstract override /*2*/ /*fake_override*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ index: kotlin.Int): E + public abstract override /*1*/ /*fake_override*/ fun indexOf(/*0*/ element: E): kotlin.Int + public abstract override /*2*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract override /*2*/ /*fake_override*/ fun iterator(): kotlin.collections.MutableIterator + public abstract override /*1*/ /*fake_override*/ fun lastIndexOf(/*0*/ element: E): kotlin.Int + public abstract override /*1*/ fun listIterator(): kotlin.collections.MutableListIterator + public abstract override /*1*/ fun listIterator(/*0*/ index: kotlin.Int): kotlin.collections.MutableListIterator + public abstract override /*1*/ fun remove(/*0*/ element: E): kotlin.Boolean + public abstract override /*1*/ fun removeAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract fun removeAt(/*0*/ index: kotlin.Int): E + public abstract override /*1*/ fun retainAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract operator fun set(/*0*/ index: kotlin.Int, /*1*/ element: E): E + public abstract override /*1*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.collections.MutableList +} + +public interface MutableListIterator : kotlin.collections.ListIterator, kotlin.collections.MutableIterator { + public abstract fun add(/*0*/ element: T): kotlin.Unit + public abstract override /*2*/ fun hasNext(): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun hasPrevious(): kotlin.Boolean + public abstract override /*2*/ fun next(): T + public abstract override /*1*/ /*fake_override*/ fun nextIndex(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun previous(): T + public abstract override /*1*/ /*fake_override*/ fun previousIndex(): kotlin.Int + public abstract override /*1*/ fun remove(): kotlin.Unit + public abstract fun set(/*0*/ element: T): kotlin.Unit +} + +public interface MutableMap : kotlin.collections.Map { + public abstract override /*1*/ val entries: kotlin.collections.MutableSet> + public abstract override /*1*/ fun (): kotlin.collections.MutableSet> + public abstract override /*1*/ val keys: kotlin.collections.MutableSet + public abstract override /*1*/ fun (): kotlin.collections.MutableSet + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun (): kotlin.Int + public abstract override /*1*/ val values: kotlin.collections.MutableCollection + public abstract override /*1*/ fun (): kotlin.collections.MutableCollection + public abstract fun clear(): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: K): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: V): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: K): V? + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract fun put(/*0*/ key: K, /*1*/ value: V): V? + public abstract fun putAll(/*0*/ from: kotlin.collections.Map): kotlin.Unit + public abstract fun remove(/*0*/ key: K): V? + + public interface MutableEntry : kotlin.collections.Map.Entry { + public abstract override /*1*/ /*fake_override*/ val key: K + public abstract override /*1*/ /*fake_override*/ fun (): K + public abstract override /*1*/ /*fake_override*/ val value: V + public abstract override /*1*/ /*fake_override*/ fun (): V + public abstract fun setValue(/*0*/ newValue: V): V + } +} + +public interface MutableSet : kotlin.collections.Set, kotlin.collections.MutableCollection { + public abstract override /*2*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*2*/ /*fake_override*/ fun (): kotlin.Int + public abstract override /*1*/ fun add(/*0*/ element: E): kotlin.Boolean + public abstract override /*1*/ fun addAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract override /*1*/ fun clear(): kotlin.Unit + public abstract override /*2*/ /*fake_override*/ fun contains(/*0*/ element: E): kotlin.Boolean + public abstract override /*2*/ /*fake_override*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract override /*2*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract override /*2*/ fun iterator(): kotlin.collections.MutableIterator + public abstract override /*1*/ fun remove(/*0*/ element: E): kotlin.Boolean + public abstract override /*1*/ fun removeAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract override /*1*/ fun retainAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean +} + +public interface Set : kotlin.collections.Collection { + public abstract override /*1*/ val size: kotlin.Int + public abstract override /*1*/ fun (): kotlin.Int + public abstract override /*1*/ fun contains(/*0*/ element: @kotlin.UnsafeVariance() E): kotlin.Boolean + public abstract override /*1*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection<@kotlin.UnsafeVariance() E>): kotlin.Boolean + public abstract override /*1*/ fun isEmpty(): kotlin.Boolean + public abstract override /*1*/ fun iterator(): kotlin.collections.Iterator +} + +public abstract class ShortIterator : kotlin.collections.Iterator { + /*primary*/ public constructor ShortIterator() + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Short + public abstract fun nextShort(): kotlin.Short +} diff --git a/compiler/testData/builtin-classes/java6/kotlin-ranges.txt b/compiler/testData/builtin-classes/java6/kotlin-ranges.txt new file mode 100644 index 00000000000..abf3adfd586 --- /dev/null +++ b/compiler/testData/builtin-classes/java6/kotlin-ranges.txt @@ -0,0 +1,181 @@ +package-fragment kotlin.ranges + +public open class CharProgression : kotlin.collections.Iterable { + /*primary*/ internal constructor CharProgression(/*0*/ start: kotlin.Char, /*1*/ endInclusive: kotlin.Char, /*2*/ step: kotlin.Int) + public final val first: kotlin.Char + public final fun (): kotlin.Char + public final val last: kotlin.Char + public final fun (): kotlin.Char + public final val step: kotlin.Int + public final fun (): kotlin.Int + public open fun isEmpty(): kotlin.Boolean + public open override /*1*/ fun iterator(): kotlin.collections.CharIterator + + public companion object Companion { + /*primary*/ private constructor Companion() + public final fun fromClosedRange(/*0*/ rangeStart: kotlin.Char, /*1*/ rangeEnd: kotlin.Char, /*2*/ step: kotlin.Int): kotlin.ranges.CharProgression + } +} + +internal final class CharProgressionIterator : kotlin.collections.CharIterator { + /*primary*/ public constructor CharProgressionIterator(/*0*/ first: kotlin.Char, /*1*/ last: kotlin.Char, /*2*/ step: kotlin.Int) + private final val finalElement: kotlin.Int + private final fun (): kotlin.Int + private final var hasNext: kotlin.Boolean + private final fun (): kotlin.Boolean + private final fun (/*0*/ : kotlin.Boolean): kotlin.Unit + private final var next: kotlin.Int + private final fun (): kotlin.Int + private final fun (/*0*/ : kotlin.Int): kotlin.Unit + public final val step: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ /*fake_override*/ fun next(): kotlin.Char + public open override /*1*/ fun nextChar(): kotlin.Char +} + +public final class CharRange : kotlin.ranges.CharProgression, kotlin.ranges.ClosedRange { + /*primary*/ public constructor CharRange(/*0*/ start: kotlin.Char, /*1*/ endInclusive: kotlin.Char) + public open override /*1*/ val endInclusive: kotlin.Char + public open override /*1*/ fun (): kotlin.Char + public final override /*1*/ /*fake_override*/ val first: kotlin.Char + public final override /*1*/ /*fake_override*/ fun (): kotlin.Char + public final override /*1*/ /*fake_override*/ val last: kotlin.Char + public final override /*1*/ /*fake_override*/ fun (): kotlin.Char + public open override /*1*/ val start: kotlin.Char + public open override /*1*/ fun (): kotlin.Char + public final override /*1*/ /*fake_override*/ val step: kotlin.Int + public final override /*1*/ /*fake_override*/ fun (): kotlin.Int + public open override /*1*/ fun contains(/*0*/ value: kotlin.Char): kotlin.Boolean + public open override /*2*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun iterator(): kotlin.collections.CharIterator + + public companion object Companion { + /*primary*/ private constructor Companion() + public final val EMPTY: kotlin.ranges.CharRange + public final fun (): kotlin.ranges.CharRange + } +} + +public interface ClosedRange> { + public abstract val endInclusive: T + public abstract fun (): T + public abstract val start: T + public abstract fun (): T + public open operator fun contains(/*0*/ value: T): kotlin.Boolean + public open fun isEmpty(): kotlin.Boolean +} + +public open class IntProgression : kotlin.collections.Iterable { + /*primary*/ internal constructor IntProgression(/*0*/ start: kotlin.Int, /*1*/ endInclusive: kotlin.Int, /*2*/ step: kotlin.Int) + public final val first: kotlin.Int + public final fun (): kotlin.Int + public final val last: kotlin.Int + public final fun (): kotlin.Int + public final val step: kotlin.Int + public final fun (): kotlin.Int + public open fun isEmpty(): kotlin.Boolean + public open override /*1*/ fun iterator(): kotlin.collections.IntIterator + + public companion object Companion { + /*primary*/ private constructor Companion() + public final fun fromClosedRange(/*0*/ rangeStart: kotlin.Int, /*1*/ rangeEnd: kotlin.Int, /*2*/ step: kotlin.Int): kotlin.ranges.IntProgression + } +} + +internal final class IntProgressionIterator : kotlin.collections.IntIterator { + /*primary*/ public constructor IntProgressionIterator(/*0*/ first: kotlin.Int, /*1*/ last: kotlin.Int, /*2*/ step: kotlin.Int) + private final val finalElement: kotlin.Int + private final fun (): kotlin.Int + private final var hasNext: kotlin.Boolean + private final fun (): kotlin.Boolean + private final fun (/*0*/ : kotlin.Boolean): kotlin.Unit + private final var next: kotlin.Int + private final fun (): kotlin.Int + private final fun (/*0*/ : kotlin.Int): kotlin.Unit + public final val step: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ /*fake_override*/ fun next(): kotlin.Int + public open override /*1*/ fun nextInt(): kotlin.Int +} + +public final class IntRange : kotlin.ranges.IntProgression, kotlin.ranges.ClosedRange { + /*primary*/ public constructor IntRange(/*0*/ start: kotlin.Int, /*1*/ endInclusive: kotlin.Int) + public open override /*1*/ val endInclusive: kotlin.Int + public open override /*1*/ fun (): kotlin.Int + public final override /*1*/ /*fake_override*/ val first: kotlin.Int + public final override /*1*/ /*fake_override*/ fun (): kotlin.Int + public final override /*1*/ /*fake_override*/ val last: kotlin.Int + public final override /*1*/ /*fake_override*/ fun (): kotlin.Int + public open override /*1*/ val start: kotlin.Int + public open override /*1*/ fun (): kotlin.Int + public final override /*1*/ /*fake_override*/ val step: kotlin.Int + public final override /*1*/ /*fake_override*/ fun (): kotlin.Int + public open override /*1*/ fun contains(/*0*/ value: kotlin.Int): kotlin.Boolean + public open override /*2*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun iterator(): kotlin.collections.IntIterator + + public companion object Companion { + /*primary*/ private constructor Companion() + public final val EMPTY: kotlin.ranges.IntRange + public final fun (): kotlin.ranges.IntRange + } +} + +public open class LongProgression : kotlin.collections.Iterable { + /*primary*/ internal constructor LongProgression(/*0*/ start: kotlin.Long, /*1*/ endInclusive: kotlin.Long, /*2*/ step: kotlin.Long) + public final val first: kotlin.Long + public final fun (): kotlin.Long + public final val last: kotlin.Long + public final fun (): kotlin.Long + public final val step: kotlin.Long + public final fun (): kotlin.Long + public open fun isEmpty(): kotlin.Boolean + public open override /*1*/ fun iterator(): kotlin.collections.LongIterator + + public companion object Companion { + /*primary*/ private constructor Companion() + public final fun fromClosedRange(/*0*/ rangeStart: kotlin.Long, /*1*/ rangeEnd: kotlin.Long, /*2*/ step: kotlin.Long): kotlin.ranges.LongProgression + } +} + +internal final class LongProgressionIterator : kotlin.collections.LongIterator { + /*primary*/ public constructor LongProgressionIterator(/*0*/ first: kotlin.Long, /*1*/ last: kotlin.Long, /*2*/ step: kotlin.Long) + private final val finalElement: kotlin.Long + private final fun (): kotlin.Long + private final var hasNext: kotlin.Boolean + private final fun (): kotlin.Boolean + private final fun (/*0*/ : kotlin.Boolean): kotlin.Unit + private final var next: kotlin.Long + private final fun (): kotlin.Long + private final fun (/*0*/ : kotlin.Long): kotlin.Unit + public final val step: kotlin.Long + public final fun (): kotlin.Long + public open override /*1*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ /*fake_override*/ fun next(): kotlin.Long + public open override /*1*/ fun nextLong(): kotlin.Long +} + +public final class LongRange : kotlin.ranges.LongProgression, kotlin.ranges.ClosedRange { + /*primary*/ public constructor LongRange(/*0*/ start: kotlin.Long, /*1*/ endInclusive: kotlin.Long) + public open override /*1*/ val endInclusive: kotlin.Long + public open override /*1*/ fun (): kotlin.Long + public final override /*1*/ /*fake_override*/ val first: kotlin.Long + public final override /*1*/ /*fake_override*/ fun (): kotlin.Long + public final override /*1*/ /*fake_override*/ val last: kotlin.Long + public final override /*1*/ /*fake_override*/ fun (): kotlin.Long + public open override /*1*/ val start: kotlin.Long + public open override /*1*/ fun (): kotlin.Long + public final override /*1*/ /*fake_override*/ val step: kotlin.Long + public final override /*1*/ /*fake_override*/ fun (): kotlin.Long + public open override /*1*/ fun contains(/*0*/ value: kotlin.Long): kotlin.Boolean + public open override /*2*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun iterator(): kotlin.collections.LongIterator + + public companion object Companion { + /*primary*/ private constructor Companion() + public final val EMPTY: kotlin.ranges.LongRange + public final fun (): kotlin.ranges.LongRange + } +} diff --git a/compiler/testData/builtin-classes/java6/kotlin.txt b/compiler/testData/builtin-classes/java6/kotlin.txt new file mode 100644 index 00000000000..957a9d5fe3b --- /dev/null +++ b/compiler/testData/builtin-classes/java6/kotlin.txt @@ -0,0 +1,699 @@ +package-fragment kotlin + +public inline fun arrayOf(/*0*/ vararg elements: T /*kotlin.Array*/): kotlin.Array +public fun arrayOfNulls(/*0*/ size: kotlin.Int): kotlin.Array +public fun booleanArrayOf(/*0*/ vararg elements: kotlin.Boolean /*kotlin.BooleanArray*/): kotlin.BooleanArray +public fun byteArrayOf(/*0*/ vararg elements: kotlin.Byte /*kotlin.ByteArray*/): kotlin.ByteArray +public fun charArrayOf(/*0*/ vararg elements: kotlin.Char /*kotlin.CharArray*/): kotlin.CharArray +public fun doubleArrayOf(/*0*/ vararg elements: kotlin.Double /*kotlin.DoubleArray*/): kotlin.DoubleArray +public inline fun emptyArray(): kotlin.Array +public fun floatArrayOf(/*0*/ vararg elements: kotlin.Float /*kotlin.FloatArray*/): kotlin.FloatArray +public fun intArrayOf(/*0*/ vararg elements: kotlin.Int /*kotlin.IntArray*/): kotlin.IntArray +public fun longArrayOf(/*0*/ vararg elements: kotlin.Long /*kotlin.LongArray*/): kotlin.LongArray +public fun shortArrayOf(/*0*/ vararg elements: kotlin.Short /*kotlin.ShortArray*/): kotlin.ShortArray +public operator fun kotlin.String?.plus(/*0*/ other: kotlin.Any?): kotlin.String +public fun kotlin.Any?.toString(): kotlin.String + +public interface Annotation { +} + +public open class Any { + /*primary*/ public constructor Any() +} + +public final class Array : kotlin.Cloneable, java.io.Serializable { + public constructor Array(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> T) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.Array + public final operator fun get(/*0*/ index: kotlin.Int): T + public final operator fun iterator(): kotlin.collections.Iterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: T): kotlin.Unit +} + +public final class Boolean : kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Boolean() + public final infix fun and(/*0*/ other: kotlin.Boolean): kotlin.Boolean + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Boolean): kotlin.Int + public final operator fun not(): kotlin.Boolean + public final infix fun or(/*0*/ other: kotlin.Boolean): kotlin.Boolean + public final infix fun xor(/*0*/ other: kotlin.Boolean): kotlin.Boolean +} + +public final class BooleanArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor BooleanArray(/*0*/ size: kotlin.Int) + public constructor BooleanArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Boolean) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.BooleanArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Boolean + public final operator fun iterator(): kotlin.collections.BooleanIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Boolean): kotlin.Unit +} + +public final class Byte : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Byte() + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Byte + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun inc(): kotlin.Byte + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun rangeTo(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Int + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Int + public final operator fun unaryPlus(): kotlin.Int + + public companion object Companion { + /*primary*/ private constructor Companion() + public const final val MAX_VALUE: kotlin.Byte + public final fun (): kotlin.Byte + public const final val MIN_VALUE: kotlin.Byte + public final fun (): kotlin.Byte + } +} + +public final class ByteArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor ByteArray(/*0*/ size: kotlin.Int) + public constructor ByteArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Byte) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.ByteArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Byte + public final operator fun iterator(): kotlin.collections.ByteIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Byte): kotlin.Unit +} + +public final class Char : kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Char() + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Char): kotlin.Int + public final operator fun dec(): kotlin.Char + public final operator fun inc(): kotlin.Char + public final operator fun minus(/*0*/ other: kotlin.Char): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Char + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Char + public final operator fun rangeTo(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange + public open fun toByte(): kotlin.Byte + public open fun toChar(): kotlin.Char + public open fun toDouble(): kotlin.Double + public open fun toFloat(): kotlin.Float + public open fun toInt(): kotlin.Int + public open fun toLong(): kotlin.Long + public open fun toShort(): kotlin.Short + + public companion object Companion { + /*primary*/ private constructor Companion() + public const final val MAX_HIGH_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + public const final val MAX_LOW_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + public const final val MAX_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + public const final val MIN_HIGH_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + public const final val MIN_LOW_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + public const final val MIN_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + } +} + +public final class CharArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor CharArray(/*0*/ size: kotlin.Int) + public constructor CharArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Char) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.CharArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Char + public final operator fun iterator(): kotlin.collections.CharIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Char): kotlin.Unit +} + +public interface CharSequence { + public abstract val length: kotlin.Int + public abstract fun (): kotlin.Int + public abstract operator fun get(/*0*/ index: kotlin.Int): kotlin.Char + public abstract fun subSequence(/*0*/ startIndex: kotlin.Int, /*1*/ endIndex: kotlin.Int): kotlin.CharSequence +} + +public interface Cloneable { + protected open fun clone(): kotlin.Any +} + +public interface Comparable { + public abstract operator fun compareTo(/*0*/ other: T): kotlin.Int +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER}) @kotlin.annotation.MustBeDocumented() public final annotation class Deprecated : kotlin.Annotation { + /*primary*/ public constructor Deprecated(/*0*/ message: kotlin.String, /*1*/ replaceWith: kotlin.ReplaceWith = ..., /*2*/ level: kotlin.DeprecationLevel = ...) + public final val level: kotlin.DeprecationLevel + public final fun (): kotlin.DeprecationLevel + public final val message: kotlin.String + public final fun (): kotlin.String + public final val replaceWith: kotlin.ReplaceWith + public final fun (): kotlin.ReplaceWith +} + +public final enum class DeprecationLevel : kotlin.Enum { + enum entry WARNING + + enum entry ERROR + + enum entry HIDDEN + + /*primary*/ private constructor DeprecationLevel() + public final override /*1*/ /*fake_override*/ val name: kotlin.String + public final override /*1*/ /*fake_override*/ fun (): kotlin.String + public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int + public final override /*1*/ /*fake_override*/ fun (): kotlin.Int + protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: kotlin.DeprecationLevel): kotlin.Int + protected/*protected and package*/ final override /*1*/ /*fake_override*/ fun finalize(): kotlin.Unit + public final override /*1*/ /*fake_override*/ fun getDeclaringClass(): java.lang.Class! + + // Static members + public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): kotlin.DeprecationLevel + public final /*synthesized*/ fun values(): kotlin.Array +} + +public final class Double : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Double() + public final operator fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Double + public final operator fun inc(): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Double + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Double + public final operator fun unaryPlus(): kotlin.Double + + public companion object Companion { + /*primary*/ private constructor Companion() + public final val MAX_VALUE: kotlin.Double + public final fun (): kotlin.Double + public final val MIN_VALUE: kotlin.Double + public final fun (): kotlin.Double + public final val NEGATIVE_INFINITY: kotlin.Double + public final fun (): kotlin.Double + public final val NaN: kotlin.Double + public final fun (): kotlin.Double + public final val POSITIVE_INFINITY: kotlin.Double + public final fun (): kotlin.Double + } +} + +public final class DoubleArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor DoubleArray(/*0*/ size: kotlin.Int) + public constructor DoubleArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Double) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.DoubleArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Double + public final operator fun iterator(): kotlin.collections.DoubleIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Double): kotlin.Unit +} + +public abstract class Enum> : kotlin.Comparable, java.io.Serializable { + /*primary*/ public constructor Enum>(/*0*/ name: kotlin.String, /*1*/ ordinal: kotlin.Int) + public final val name: kotlin.String + public final fun (): kotlin.String + public final val ordinal: kotlin.Int + public final fun (): kotlin.Int + protected final fun clone(): kotlin.Any + public final override /*1*/ fun compareTo(/*0*/ other: E): kotlin.Int + protected/*protected and package*/ final fun finalize(): kotlin.Unit + public final fun getDeclaringClass(): java.lang.Class! + + public companion object Companion { + /*primary*/ private constructor Companion() + } +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented() public final annotation class ExtensionFunctionType : kotlin.Annotation { + /*primary*/ public constructor ExtensionFunctionType() +} + +public final class Float : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Float() + public final operator fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Float + public final operator fun inc(): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Float + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Float + public final operator fun unaryPlus(): kotlin.Float + + public companion object Companion { + /*primary*/ private constructor Companion() + public final val MAX_VALUE: kotlin.Float + public final fun (): kotlin.Float + public final val MIN_VALUE: kotlin.Float + public final fun (): kotlin.Float + public final val NEGATIVE_INFINITY: kotlin.Float + public final fun (): kotlin.Float + public final val NaN: kotlin.Float + public final fun (): kotlin.Float + public final val POSITIVE_INFINITY: kotlin.Float + public final fun (): kotlin.Float + } +} + +public final class FloatArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor FloatArray(/*0*/ size: kotlin.Int) + public constructor FloatArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Float) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.FloatArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Float + public final operator fun iterator(): kotlin.collections.FloatIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Float): kotlin.Unit +} + +public interface Function { +} + +public final class Int : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Int() + public final infix fun and(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun inc(): kotlin.Int + public final fun inv(): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Int + public final infix fun or(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun rangeTo(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + public final infix fun shl(/*0*/ bitCount: kotlin.Int): kotlin.Int + public final infix fun shr(/*0*/ bitCount: kotlin.Int): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Int + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Int + public final operator fun unaryPlus(): kotlin.Int + public final infix fun ushr(/*0*/ bitCount: kotlin.Int): kotlin.Int + public final infix fun xor(/*0*/ other: kotlin.Int): kotlin.Int + + public companion object Companion { + /*primary*/ private constructor Companion() + public const final val MAX_VALUE: kotlin.Int + public final fun (): kotlin.Int + public const final val MIN_VALUE: kotlin.Int + public final fun (): kotlin.Int + } +} + +public final class IntArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor IntArray(/*0*/ size: kotlin.Int) + public constructor IntArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Int) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.IntArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Int + public final operator fun iterator(): kotlin.collections.IntIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Int): kotlin.Unit +} + +public final class Long : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Long() + public final infix fun and(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Long + public final operator fun inc(): kotlin.Long + public final fun inv(): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Long + public final infix fun or(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Long + public final operator fun rangeTo(/*0*/ other: kotlin.Byte): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange + public final infix fun shl(/*0*/ bitCount: kotlin.Int): kotlin.Long + public final infix fun shr(/*0*/ bitCount: kotlin.Int): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Long + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Long + public final operator fun unaryPlus(): kotlin.Long + public final infix fun ushr(/*0*/ bitCount: kotlin.Int): kotlin.Long + public final infix fun xor(/*0*/ other: kotlin.Long): kotlin.Long + + public companion object Companion { + /*primary*/ private constructor Companion() + public const final val MAX_VALUE: kotlin.Long + public final fun (): kotlin.Long + public const final val MIN_VALUE: kotlin.Long + public final fun (): kotlin.Long + } +} + +public final class LongArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor LongArray(/*0*/ size: kotlin.Int) + public constructor LongArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Long) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.LongArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Long + public final operator fun iterator(): kotlin.collections.LongIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Long): kotlin.Unit +} + +public final class Nothing { + /*primary*/ private constructor Nothing() +} + +public abstract class Number : kotlin.Any, java.io.Serializable { + /*primary*/ public constructor Number() + public abstract fun toByte(): kotlin.Byte + public abstract fun toChar(): kotlin.Char + public abstract fun toDouble(): kotlin.Double + public abstract fun toFloat(): kotlin.Float + public abstract fun toInt(): kotlin.Int + public abstract fun toLong(): kotlin.Long + public abstract fun toShort(): kotlin.Short +} + +@kotlin.annotation.Target(allowedTargets = {}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.annotation.MustBeDocumented() public final annotation class ReplaceWith : kotlin.Annotation { + /*primary*/ public constructor ReplaceWith(/*0*/ expression: kotlin.String, /*1*/ vararg imports: kotlin.String /*kotlin.Array*/) + public final val expression: kotlin.String + public final fun (): kotlin.String + public final val imports: kotlin.Array + public final fun (): kotlin.Array +} + +public final class Short : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Short() + public final operator fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Short + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun inc(): kotlin.Short + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun rangeTo(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Int + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Int + public final operator fun unaryPlus(): kotlin.Int + + public companion object Companion { + /*primary*/ private constructor Companion() + public const final val MAX_VALUE: kotlin.Short + public final fun (): kotlin.Short + public const final val MIN_VALUE: kotlin.Short + public final fun (): kotlin.Short + } +} + +public final class ShortArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor ShortArray(/*0*/ size: kotlin.Int) + public constructor ShortArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Short) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.ShortArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Short + public final operator fun iterator(): kotlin.collections.ShortIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Short): kotlin.Unit +} + +public final class String : kotlin.Comparable, kotlin.CharSequence, java.io.Serializable { + /*primary*/ public constructor String() + public open override /*1*/ val length: kotlin.Int + public open override /*1*/ fun (): kotlin.Int + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.String): kotlin.Int + public open override /*1*/ fun get(/*0*/ index: kotlin.Int): kotlin.Char + public final operator fun plus(/*0*/ other: kotlin.Any?): kotlin.String + public open override /*1*/ fun subSequence(/*0*/ startIndex: kotlin.Int, /*1*/ endIndex: kotlin.Int): kotlin.CharSequence + + public companion object Companion { + /*primary*/ private constructor Companion() + } +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Suppress : kotlin.Annotation { + /*primary*/ public constructor Suppress(/*0*/ vararg names: kotlin.String /*kotlin.Array*/) + public final val names: kotlin.Array + public final fun (): kotlin.Array +} + +public open class Throwable : kotlin.Any, java.io.Serializable { + public constructor Throwable() + public constructor Throwable(/*0*/ message: kotlin.String?) + /*primary*/ public constructor Throwable(/*0*/ message: kotlin.String?, /*1*/ cause: kotlin.Throwable?) + public constructor Throwable(/*0*/ cause: kotlin.Throwable?) + public open val cause: kotlin.Throwable? + public open fun (): kotlin.Throwable? + public open val message: kotlin.String? + public open fun (): kotlin.String? + public open fun fillInStackTrace(): kotlin.Throwable! + public open fun getLocalizedMessage(): kotlin.String! + public open fun getStackTrace(): kotlin.Array<(out) java.lang.StackTraceElement!>! + public open fun initCause(/*0*/ p0: kotlin.Throwable!): kotlin.Throwable! + public open fun printStackTrace(): kotlin.Unit + public open fun printStackTrace(/*0*/ p0: java.io.PrintStream!): kotlin.Unit + public open fun printStackTrace(/*0*/ p0: java.io.PrintWriter!): kotlin.Unit + public open fun setStackTrace(/*0*/ p0: kotlin.Array<(out) java.lang.StackTraceElement!>!): kotlin.Unit +} + +public object Unit { + /*primary*/ private constructor Unit() +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) @kotlin.annotation.MustBeDocumented() public final annotation class UnsafeVariance : kotlin.Annotation { + /*primary*/ public constructor UnsafeVariance() +} diff --git a/compiler/testData/builtin-classes/java8/kotlin-collections.txt b/compiler/testData/builtin-classes/java8/kotlin-collections.txt new file mode 100644 index 00000000000..52b3bada663 --- /dev/null +++ b/compiler/testData/builtin-classes/java8/kotlin-collections.txt @@ -0,0 +1,292 @@ +package-fragment kotlin.collections + +public abstract class BooleanIterator : kotlin.collections.Iterator { + /*primary*/ public constructor BooleanIterator() + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Boolean + public abstract fun nextBoolean(): kotlin.Boolean +} + +public abstract class ByteIterator : kotlin.collections.Iterator { + /*primary*/ public constructor ByteIterator() + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Byte + public abstract fun nextByte(): kotlin.Byte +} + +public abstract class CharIterator : kotlin.collections.Iterator { + /*primary*/ public constructor CharIterator() + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Char + public abstract fun nextChar(): kotlin.Char +} + +public interface Collection : kotlin.collections.Iterable { + public abstract val size: kotlin.Int + public abstract fun (): kotlin.Int + public abstract operator fun contains(/*0*/ element: @kotlin.UnsafeVariance() E): kotlin.Boolean + public abstract fun containsAll(/*0*/ elements: kotlin.collections.Collection<@kotlin.UnsafeVariance() E>): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract fun isEmpty(): kotlin.Boolean + public abstract override /*1*/ fun iterator(): kotlin.collections.Iterator + public open fun parallelStream(): java.util.stream.Stream! + public open override /*1*/ fun spliterator(): java.util.Spliterator! + public open fun stream(): java.util.stream.Stream! +} + +public abstract class DoubleIterator : kotlin.collections.Iterator { + /*primary*/ public constructor DoubleIterator() + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Double + public abstract fun nextDouble(): kotlin.Double +} + +public abstract class FloatIterator : kotlin.collections.Iterator { + /*primary*/ public constructor FloatIterator() + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Float + public abstract fun nextFloat(): kotlin.Float +} + +public abstract class IntIterator : kotlin.collections.Iterator { + /*primary*/ public constructor IntIterator() + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Int + public abstract fun nextInt(): kotlin.Int +} + +public interface Iterable { + public open fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract operator fun iterator(): kotlin.collections.Iterator + public open fun spliterator(): java.util.Spliterator! +} + +public interface Iterator { + public open fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract operator fun hasNext(): kotlin.Boolean + public abstract operator fun next(): T +} + +public interface List : kotlin.collections.Collection { + public abstract override /*1*/ val size: kotlin.Int + public abstract override /*1*/ fun (): kotlin.Int + public abstract override /*1*/ fun contains(/*0*/ element: @kotlin.UnsafeVariance() E): kotlin.Boolean + public abstract override /*1*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection<@kotlin.UnsafeVariance() E>): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract operator fun get(/*0*/ index: kotlin.Int): E + public abstract fun indexOf(/*0*/ element: @kotlin.UnsafeVariance() E): kotlin.Int + public abstract override /*1*/ fun isEmpty(): kotlin.Boolean + public abstract override /*1*/ fun iterator(): kotlin.collections.Iterator + public abstract fun lastIndexOf(/*0*/ element: @kotlin.UnsafeVariance() E): kotlin.Int + public abstract fun listIterator(): kotlin.collections.ListIterator + public abstract fun listIterator(/*0*/ index: kotlin.Int): kotlin.collections.ListIterator + public open override /*1*/ /*fake_override*/ fun parallelStream(): java.util.stream.Stream! + public open override /*1*/ fun spliterator(): java.util.Spliterator! + public open override /*1*/ /*fake_override*/ fun stream(): java.util.stream.Stream! + public abstract fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.collections.List +} + +public interface ListIterator : kotlin.collections.Iterator { + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ fun hasNext(): kotlin.Boolean + public abstract fun hasPrevious(): kotlin.Boolean + public abstract override /*1*/ fun next(): T + public abstract fun nextIndex(): kotlin.Int + public abstract fun previous(): T + public abstract fun previousIndex(): kotlin.Int +} + +public abstract class LongIterator : kotlin.collections.Iterator { + /*primary*/ public constructor LongIterator() + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Long + public abstract fun nextLong(): kotlin.Long +} + +public interface Map { + public abstract val entries: kotlin.collections.Set> + public abstract fun (): kotlin.collections.Set> + public abstract val keys: kotlin.collections.Set + public abstract fun (): kotlin.collections.Set + public abstract val size: kotlin.Int + public abstract fun (): kotlin.Int + public abstract val values: kotlin.collections.Collection + public abstract fun (): kotlin.collections.Collection + public abstract fun containsKey(/*0*/ key: K): kotlin.Boolean + public abstract fun containsValue(/*0*/ value: @kotlin.UnsafeVariance() V): kotlin.Boolean + public open fun forEach(/*0*/ p0: java.util.function.BiConsumer!): kotlin.Unit + public abstract operator fun get(/*0*/ key: K): V? + public open fun getOrDefault(/*0*/ p0: kotlin.Any!, /*1*/ p1: V!): V! + public abstract fun isEmpty(): kotlin.Boolean + + public interface Entry { + public abstract val key: K + public abstract fun (): K + public abstract val value: V + public abstract fun (): V + } +} + +public interface MutableCollection : kotlin.collections.Collection, kotlin.collections.MutableIterable { + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun (): kotlin.Int + public abstract fun add(/*0*/ element: E): kotlin.Boolean + public abstract fun addAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract fun clear(): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun contains(/*0*/ element: E): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract override /*2*/ fun iterator(): kotlin.collections.MutableIterator + public open override /*1*/ /*fake_override*/ fun parallelStream(): java.util.stream.Stream! + public abstract fun remove(/*0*/ element: E): kotlin.Boolean + public abstract fun removeAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public open fun removeIf(/*0*/ p0: java.util.function.Predicate!): kotlin.Boolean + public abstract fun retainAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! + public open override /*1*/ /*fake_override*/ fun stream(): java.util.stream.Stream! +} + +public interface MutableIterable : kotlin.collections.Iterable { + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ fun iterator(): kotlin.collections.MutableIterator + public open override /*1*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! +} + +public interface MutableIterator : kotlin.collections.Iterator { + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun next(): T + public abstract fun remove(): kotlin.Unit +} + +public interface MutableList : kotlin.collections.List, kotlin.collections.MutableCollection { + public abstract override /*2*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*2*/ /*fake_override*/ fun (): kotlin.Int + public abstract override /*1*/ fun add(/*0*/ element: E): kotlin.Boolean + public abstract fun add(/*0*/ index: kotlin.Int, /*1*/ element: E): kotlin.Unit + public abstract fun addAll(/*0*/ index: kotlin.Int, /*1*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract override /*1*/ fun addAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract override /*1*/ fun clear(): kotlin.Unit + public abstract override /*2*/ /*fake_override*/ fun contains(/*0*/ element: E): kotlin.Boolean + public abstract override /*2*/ /*fake_override*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ index: kotlin.Int): E + public abstract override /*1*/ /*fake_override*/ fun indexOf(/*0*/ element: E): kotlin.Int + public abstract override /*2*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract override /*2*/ /*fake_override*/ fun iterator(): kotlin.collections.MutableIterator + public abstract override /*1*/ /*fake_override*/ fun lastIndexOf(/*0*/ element: E): kotlin.Int + public abstract override /*1*/ fun listIterator(): kotlin.collections.MutableListIterator + public abstract override /*1*/ fun listIterator(/*0*/ index: kotlin.Int): kotlin.collections.MutableListIterator + public open override /*2*/ /*fake_override*/ fun parallelStream(): java.util.stream.Stream! + public abstract override /*1*/ fun remove(/*0*/ element: E): kotlin.Boolean + public abstract override /*1*/ fun removeAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract fun removeAt(/*0*/ index: kotlin.Int): E + public open override /*1*/ /*fake_override*/ fun removeIf(/*0*/ p0: java.util.function.Predicate!): kotlin.Boolean + public open fun replaceAll(/*0*/ p0: java.util.function.UnaryOperator!): kotlin.Unit + public abstract override /*1*/ fun retainAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract operator fun set(/*0*/ index: kotlin.Int, /*1*/ element: E): E + public open fun sort(/*0*/ p0: java.util.Comparator!): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! + public open override /*2*/ /*fake_override*/ fun stream(): java.util.stream.Stream! + public abstract override /*1*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.collections.MutableList +} + +public interface MutableListIterator : kotlin.collections.ListIterator, kotlin.collections.MutableIterator { + public abstract fun add(/*0*/ element: T): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*2*/ fun hasNext(): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun hasPrevious(): kotlin.Boolean + public abstract override /*2*/ fun next(): T + public abstract override /*1*/ /*fake_override*/ fun nextIndex(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun previous(): T + public abstract override /*1*/ /*fake_override*/ fun previousIndex(): kotlin.Int + public abstract override /*1*/ fun remove(): kotlin.Unit + public abstract fun set(/*0*/ element: T): kotlin.Unit +} + +public interface MutableMap : kotlin.collections.Map { + public abstract override /*1*/ val entries: kotlin.collections.MutableSet> + public abstract override /*1*/ fun (): kotlin.collections.MutableSet> + public abstract override /*1*/ val keys: kotlin.collections.MutableSet + public abstract override /*1*/ fun (): kotlin.collections.MutableSet + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun (): kotlin.Int + public abstract override /*1*/ val values: kotlin.collections.MutableCollection + public abstract override /*1*/ fun (): kotlin.collections.MutableCollection + public abstract fun clear(): kotlin.Unit + public open fun compute(/*0*/ p0: K!, /*1*/ p1: java.util.function.BiFunction!): V! + public open fun computeIfAbsent(/*0*/ p0: K!, /*1*/ p1: java.util.function.Function!): V! + public open fun computeIfPresent(/*0*/ p0: K!, /*1*/ p1: java.util.function.BiFunction!): V! + public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: K): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: V): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: K): V? + public open override /*1*/ /*fake_override*/ fun getOrDefault(/*0*/ p0: kotlin.Any!, /*1*/ p1: V!): V! + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public open fun merge(/*0*/ p0: K!, /*1*/ p1: V!, /*2*/ p2: java.util.function.BiFunction!): V! + public abstract fun put(/*0*/ key: K, /*1*/ value: V): V? + public abstract fun putAll(/*0*/ from: kotlin.collections.Map): kotlin.Unit + public open fun putIfAbsent(/*0*/ p0: K!, /*1*/ p1: V!): V! + public abstract fun remove(/*0*/ key: K): V? + public open fun remove(/*0*/ p0: kotlin.Any!, /*1*/ p1: kotlin.Any!): kotlin.Boolean + public open fun replace(/*0*/ p0: K!, /*1*/ p1: V!): V! + public open fun replace(/*0*/ p0: K!, /*1*/ p1: V!, /*2*/ p2: V!): kotlin.Boolean + public open fun replaceAll(/*0*/ p0: java.util.function.BiFunction!): kotlin.Unit + + public interface MutableEntry : kotlin.collections.Map.Entry { + public abstract override /*1*/ /*fake_override*/ val key: K + public abstract override /*1*/ /*fake_override*/ fun (): K + public abstract override /*1*/ /*fake_override*/ val value: V + public abstract override /*1*/ /*fake_override*/ fun (): V + public abstract fun setValue(/*0*/ newValue: V): V + } +} + +public interface MutableSet : kotlin.collections.Set, kotlin.collections.MutableCollection { + public abstract override /*2*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*2*/ /*fake_override*/ fun (): kotlin.Int + public abstract override /*1*/ fun add(/*0*/ element: E): kotlin.Boolean + public abstract override /*1*/ fun addAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract override /*1*/ fun clear(): kotlin.Unit + public abstract override /*2*/ /*fake_override*/ fun contains(/*0*/ element: E): kotlin.Boolean + public abstract override /*2*/ /*fake_override*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*2*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract override /*2*/ fun iterator(): kotlin.collections.MutableIterator + public open override /*2*/ /*fake_override*/ fun parallelStream(): java.util.stream.Stream! + public abstract override /*1*/ fun remove(/*0*/ element: E): kotlin.Boolean + public abstract override /*1*/ fun removeAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun removeIf(/*0*/ p0: java.util.function.Predicate!): kotlin.Boolean + public abstract override /*1*/ fun retainAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! + public open override /*2*/ /*fake_override*/ fun stream(): java.util.stream.Stream! +} + +public interface Set : kotlin.collections.Collection { + public abstract override /*1*/ val size: kotlin.Int + public abstract override /*1*/ fun (): kotlin.Int + public abstract override /*1*/ fun contains(/*0*/ element: @kotlin.UnsafeVariance() E): kotlin.Boolean + public abstract override /*1*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection<@kotlin.UnsafeVariance() E>): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ fun isEmpty(): kotlin.Boolean + public abstract override /*1*/ fun iterator(): kotlin.collections.Iterator + public open override /*1*/ /*fake_override*/ fun parallelStream(): java.util.stream.Stream! + public open override /*1*/ fun spliterator(): java.util.Spliterator! + public open override /*1*/ /*fake_override*/ fun stream(): java.util.stream.Stream! +} + +public abstract class ShortIterator : kotlin.collections.Iterator { + /*primary*/ public constructor ShortIterator() + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ fun next(): kotlin.Short + public abstract fun nextShort(): kotlin.Short +} diff --git a/compiler/testData/builtin-classes/java8/kotlin-ranges.txt b/compiler/testData/builtin-classes/java8/kotlin-ranges.txt new file mode 100644 index 00000000000..bdf77ec551f --- /dev/null +++ b/compiler/testData/builtin-classes/java8/kotlin-ranges.txt @@ -0,0 +1,196 @@ +package-fragment kotlin.ranges + +public open class CharProgression : kotlin.collections.Iterable { + /*primary*/ internal constructor CharProgression(/*0*/ start: kotlin.Char, /*1*/ endInclusive: kotlin.Char, /*2*/ step: kotlin.Int) + public final val first: kotlin.Char + public final fun (): kotlin.Char + public final val last: kotlin.Char + public final fun (): kotlin.Char + public final val step: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public open fun isEmpty(): kotlin.Boolean + public open override /*1*/ fun iterator(): kotlin.collections.CharIterator + public open override /*1*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! + + public companion object Companion { + /*primary*/ private constructor Companion() + public final fun fromClosedRange(/*0*/ rangeStart: kotlin.Char, /*1*/ rangeEnd: kotlin.Char, /*2*/ step: kotlin.Int): kotlin.ranges.CharProgression + } +} + +internal final class CharProgressionIterator : kotlin.collections.CharIterator { + /*primary*/ public constructor CharProgressionIterator(/*0*/ first: kotlin.Char, /*1*/ last: kotlin.Char, /*2*/ step: kotlin.Int) + private final val finalElement: kotlin.Int + private final fun (): kotlin.Int + private final var hasNext: kotlin.Boolean + private final fun (): kotlin.Boolean + private final fun (/*0*/ : kotlin.Boolean): kotlin.Unit + private final var next: kotlin.Int + private final fun (): kotlin.Int + private final fun (/*0*/ : kotlin.Int): kotlin.Unit + public final val step: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public open override /*1*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ /*fake_override*/ fun next(): kotlin.Char + public open override /*1*/ fun nextChar(): kotlin.Char +} + +public final class CharRange : kotlin.ranges.CharProgression, kotlin.ranges.ClosedRange { + /*primary*/ public constructor CharRange(/*0*/ start: kotlin.Char, /*1*/ endInclusive: kotlin.Char) + public open override /*1*/ val endInclusive: kotlin.Char + public open override /*1*/ fun (): kotlin.Char + public final override /*1*/ /*fake_override*/ val first: kotlin.Char + public final override /*1*/ /*fake_override*/ fun (): kotlin.Char + public final override /*1*/ /*fake_override*/ val last: kotlin.Char + public final override /*1*/ /*fake_override*/ fun (): kotlin.Char + public open override /*1*/ val start: kotlin.Char + public open override /*1*/ fun (): kotlin.Char + public final override /*1*/ /*fake_override*/ val step: kotlin.Int + public final override /*1*/ /*fake_override*/ fun (): kotlin.Int + public open override /*1*/ fun contains(/*0*/ value: kotlin.Char): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public open override /*2*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun iterator(): kotlin.collections.CharIterator + public open override /*1*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! + + public companion object Companion { + /*primary*/ private constructor Companion() + public final val EMPTY: kotlin.ranges.CharRange + public final fun (): kotlin.ranges.CharRange + } +} + +public interface ClosedRange> { + public abstract val endInclusive: T + public abstract fun (): T + public abstract val start: T + public abstract fun (): T + public open operator fun contains(/*0*/ value: T): kotlin.Boolean + public open fun isEmpty(): kotlin.Boolean +} + +public open class IntProgression : kotlin.collections.Iterable { + /*primary*/ internal constructor IntProgression(/*0*/ start: kotlin.Int, /*1*/ endInclusive: kotlin.Int, /*2*/ step: kotlin.Int) + public final val first: kotlin.Int + public final fun (): kotlin.Int + public final val last: kotlin.Int + public final fun (): kotlin.Int + public final val step: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public open fun isEmpty(): kotlin.Boolean + public open override /*1*/ fun iterator(): kotlin.collections.IntIterator + public open override /*1*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! + + public companion object Companion { + /*primary*/ private constructor Companion() + public final fun fromClosedRange(/*0*/ rangeStart: kotlin.Int, /*1*/ rangeEnd: kotlin.Int, /*2*/ step: kotlin.Int): kotlin.ranges.IntProgression + } +} + +internal final class IntProgressionIterator : kotlin.collections.IntIterator { + /*primary*/ public constructor IntProgressionIterator(/*0*/ first: kotlin.Int, /*1*/ last: kotlin.Int, /*2*/ step: kotlin.Int) + private final val finalElement: kotlin.Int + private final fun (): kotlin.Int + private final var hasNext: kotlin.Boolean + private final fun (): kotlin.Boolean + private final fun (/*0*/ : kotlin.Boolean): kotlin.Unit + private final var next: kotlin.Int + private final fun (): kotlin.Int + private final fun (/*0*/ : kotlin.Int): kotlin.Unit + public final val step: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public open override /*1*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ /*fake_override*/ fun next(): kotlin.Int + public open override /*1*/ fun nextInt(): kotlin.Int +} + +public final class IntRange : kotlin.ranges.IntProgression, kotlin.ranges.ClosedRange { + /*primary*/ public constructor IntRange(/*0*/ start: kotlin.Int, /*1*/ endInclusive: kotlin.Int) + public open override /*1*/ val endInclusive: kotlin.Int + public open override /*1*/ fun (): kotlin.Int + public final override /*1*/ /*fake_override*/ val first: kotlin.Int + public final override /*1*/ /*fake_override*/ fun (): kotlin.Int + public final override /*1*/ /*fake_override*/ val last: kotlin.Int + public final override /*1*/ /*fake_override*/ fun (): kotlin.Int + public open override /*1*/ val start: kotlin.Int + public open override /*1*/ fun (): kotlin.Int + public final override /*1*/ /*fake_override*/ val step: kotlin.Int + public final override /*1*/ /*fake_override*/ fun (): kotlin.Int + public open override /*1*/ fun contains(/*0*/ value: kotlin.Int): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public open override /*2*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun iterator(): kotlin.collections.IntIterator + public open override /*1*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! + + public companion object Companion { + /*primary*/ private constructor Companion() + public final val EMPTY: kotlin.ranges.IntRange + public final fun (): kotlin.ranges.IntRange + } +} + +public open class LongProgression : kotlin.collections.Iterable { + /*primary*/ internal constructor LongProgression(/*0*/ start: kotlin.Long, /*1*/ endInclusive: kotlin.Long, /*2*/ step: kotlin.Long) + public final val first: kotlin.Long + public final fun (): kotlin.Long + public final val last: kotlin.Long + public final fun (): kotlin.Long + public final val step: kotlin.Long + public final fun (): kotlin.Long + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public open fun isEmpty(): kotlin.Boolean + public open override /*1*/ fun iterator(): kotlin.collections.LongIterator + public open override /*1*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! + + public companion object Companion { + /*primary*/ private constructor Companion() + public final fun fromClosedRange(/*0*/ rangeStart: kotlin.Long, /*1*/ rangeEnd: kotlin.Long, /*2*/ step: kotlin.Long): kotlin.ranges.LongProgression + } +} + +internal final class LongProgressionIterator : kotlin.collections.LongIterator { + /*primary*/ public constructor LongProgressionIterator(/*0*/ first: kotlin.Long, /*1*/ last: kotlin.Long, /*2*/ step: kotlin.Long) + private final val finalElement: kotlin.Long + private final fun (): kotlin.Long + private final var hasNext: kotlin.Boolean + private final fun (): kotlin.Boolean + private final fun (/*0*/ : kotlin.Boolean): kotlin.Unit + private final var next: kotlin.Long + private final fun (): kotlin.Long + private final fun (/*0*/ : kotlin.Long): kotlin.Unit + public final val step: kotlin.Long + public final fun (): kotlin.Long + public open override /*1*/ /*fake_override*/ fun forEachRemaining(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public open override /*1*/ fun hasNext(): kotlin.Boolean + public final override /*1*/ /*fake_override*/ fun next(): kotlin.Long + public open override /*1*/ fun nextLong(): kotlin.Long +} + +public final class LongRange : kotlin.ranges.LongProgression, kotlin.ranges.ClosedRange { + /*primary*/ public constructor LongRange(/*0*/ start: kotlin.Long, /*1*/ endInclusive: kotlin.Long) + public open override /*1*/ val endInclusive: kotlin.Long + public open override /*1*/ fun (): kotlin.Long + public final override /*1*/ /*fake_override*/ val first: kotlin.Long + public final override /*1*/ /*fake_override*/ fun (): kotlin.Long + public final override /*1*/ /*fake_override*/ val last: kotlin.Long + public final override /*1*/ /*fake_override*/ fun (): kotlin.Long + public open override /*1*/ val start: kotlin.Long + public open override /*1*/ fun (): kotlin.Long + public final override /*1*/ /*fake_override*/ val step: kotlin.Long + public final override /*1*/ /*fake_override*/ fun (): kotlin.Long + public open override /*1*/ fun contains(/*0*/ value: kotlin.Long): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public open override /*2*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun iterator(): kotlin.collections.LongIterator + public open override /*1*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! + + public companion object Companion { + /*primary*/ private constructor Companion() + public final val EMPTY: kotlin.ranges.LongRange + public final fun (): kotlin.ranges.LongRange + } +} diff --git a/compiler/testData/builtin-classes/java8/kotlin.txt b/compiler/testData/builtin-classes/java8/kotlin.txt new file mode 100644 index 00000000000..41da529a741 --- /dev/null +++ b/compiler/testData/builtin-classes/java8/kotlin.txt @@ -0,0 +1,705 @@ +package-fragment kotlin + +public inline fun arrayOf(/*0*/ vararg elements: T /*kotlin.Array*/): kotlin.Array +public fun arrayOfNulls(/*0*/ size: kotlin.Int): kotlin.Array +public fun booleanArrayOf(/*0*/ vararg elements: kotlin.Boolean /*kotlin.BooleanArray*/): kotlin.BooleanArray +public fun byteArrayOf(/*0*/ vararg elements: kotlin.Byte /*kotlin.ByteArray*/): kotlin.ByteArray +public fun charArrayOf(/*0*/ vararg elements: kotlin.Char /*kotlin.CharArray*/): kotlin.CharArray +public fun doubleArrayOf(/*0*/ vararg elements: kotlin.Double /*kotlin.DoubleArray*/): kotlin.DoubleArray +public inline fun emptyArray(): kotlin.Array +public fun floatArrayOf(/*0*/ vararg elements: kotlin.Float /*kotlin.FloatArray*/): kotlin.FloatArray +public fun intArrayOf(/*0*/ vararg elements: kotlin.Int /*kotlin.IntArray*/): kotlin.IntArray +public fun longArrayOf(/*0*/ vararg elements: kotlin.Long /*kotlin.LongArray*/): kotlin.LongArray +public fun shortArrayOf(/*0*/ vararg elements: kotlin.Short /*kotlin.ShortArray*/): kotlin.ShortArray +public operator fun kotlin.String?.plus(/*0*/ other: kotlin.Any?): kotlin.String +public fun kotlin.Any?.toString(): kotlin.String + +public interface Annotation { +} + +public open class Any { + /*primary*/ public constructor Any() +} + +public final class Array : kotlin.Cloneable, java.io.Serializable { + public constructor Array(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> T) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.Array + public final operator fun get(/*0*/ index: kotlin.Int): T + public final operator fun iterator(): kotlin.collections.Iterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: T): kotlin.Unit +} + +public final class Boolean : kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Boolean() + public final infix fun and(/*0*/ other: kotlin.Boolean): kotlin.Boolean + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Boolean): kotlin.Int + public final operator fun not(): kotlin.Boolean + public final infix fun or(/*0*/ other: kotlin.Boolean): kotlin.Boolean + public final infix fun xor(/*0*/ other: kotlin.Boolean): kotlin.Boolean +} + +public final class BooleanArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor BooleanArray(/*0*/ size: kotlin.Int) + public constructor BooleanArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Boolean) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.BooleanArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Boolean + public final operator fun iterator(): kotlin.collections.BooleanIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Boolean): kotlin.Unit +} + +public final class Byte : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Byte() + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Byte + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun inc(): kotlin.Byte + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun rangeTo(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Int + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Int + public final operator fun unaryPlus(): kotlin.Int + + public companion object Companion { + /*primary*/ private constructor Companion() + public const final val MAX_VALUE: kotlin.Byte + public final fun (): kotlin.Byte + public const final val MIN_VALUE: kotlin.Byte + public final fun (): kotlin.Byte + } +} + +public final class ByteArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor ByteArray(/*0*/ size: kotlin.Int) + public constructor ByteArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Byte) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.ByteArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Byte + public final operator fun iterator(): kotlin.collections.ByteIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Byte): kotlin.Unit +} + +public final class Char : kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Char() + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Char): kotlin.Int + public final operator fun dec(): kotlin.Char + public final operator fun inc(): kotlin.Char + public final operator fun minus(/*0*/ other: kotlin.Char): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Char + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Char + public final operator fun rangeTo(/*0*/ other: kotlin.Char): kotlin.ranges.CharRange + public open fun toByte(): kotlin.Byte + public open fun toChar(): kotlin.Char + public open fun toDouble(): kotlin.Double + public open fun toFloat(): kotlin.Float + public open fun toInt(): kotlin.Int + public open fun toLong(): kotlin.Long + public open fun toShort(): kotlin.Short + + public companion object Companion { + /*primary*/ private constructor Companion() + public const final val MAX_HIGH_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + public const final val MAX_LOW_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + public const final val MAX_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + public const final val MIN_HIGH_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + public const final val MIN_LOW_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + public const final val MIN_SURROGATE: kotlin.Char + public final fun (): kotlin.Char + } +} + +public final class CharArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor CharArray(/*0*/ size: kotlin.Int) + public constructor CharArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Char) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.CharArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Char + public final operator fun iterator(): kotlin.collections.CharIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Char): kotlin.Unit +} + +public interface CharSequence { + public abstract val length: kotlin.Int + public abstract fun (): kotlin.Int + public open fun chars(): java.util.stream.IntStream! + public open fun codePoints(): java.util.stream.IntStream! + public abstract operator fun get(/*0*/ index: kotlin.Int): kotlin.Char + public abstract fun subSequence(/*0*/ startIndex: kotlin.Int, /*1*/ endIndex: kotlin.Int): kotlin.CharSequence +} + +public interface Cloneable { + protected open fun clone(): kotlin.Any +} + +public interface Comparable { + public abstract operator fun compareTo(/*0*/ other: T): kotlin.Int +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER}) @kotlin.annotation.MustBeDocumented() public final annotation class Deprecated : kotlin.Annotation { + /*primary*/ public constructor Deprecated(/*0*/ message: kotlin.String, /*1*/ replaceWith: kotlin.ReplaceWith = ..., /*2*/ level: kotlin.DeprecationLevel = ...) + public final val level: kotlin.DeprecationLevel + public final fun (): kotlin.DeprecationLevel + public final val message: kotlin.String + public final fun (): kotlin.String + public final val replaceWith: kotlin.ReplaceWith + public final fun (): kotlin.ReplaceWith +} + +public final enum class DeprecationLevel : kotlin.Enum { + enum entry WARNING + + enum entry ERROR + + enum entry HIDDEN + + /*primary*/ private constructor DeprecationLevel() + public final override /*1*/ /*fake_override*/ val name: kotlin.String + public final override /*1*/ /*fake_override*/ fun (): kotlin.String + public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int + public final override /*1*/ /*fake_override*/ fun (): kotlin.Int + protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: kotlin.DeprecationLevel): kotlin.Int + protected/*protected and package*/ final override /*1*/ /*fake_override*/ fun finalize(): kotlin.Unit + public final override /*1*/ /*fake_override*/ fun getDeclaringClass(): java.lang.Class! + + // Static members + public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): kotlin.DeprecationLevel + public final /*synthesized*/ fun values(): kotlin.Array +} + +public final class Double : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Double() + public final operator fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Double + public final operator fun inc(): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Double + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Double + public final operator fun unaryPlus(): kotlin.Double + + public companion object Companion { + /*primary*/ private constructor Companion() + public final val MAX_VALUE: kotlin.Double + public final fun (): kotlin.Double + public final val MIN_VALUE: kotlin.Double + public final fun (): kotlin.Double + public final val NEGATIVE_INFINITY: kotlin.Double + public final fun (): kotlin.Double + public final val NaN: kotlin.Double + public final fun (): kotlin.Double + public final val POSITIVE_INFINITY: kotlin.Double + public final fun (): kotlin.Double + } +} + +public final class DoubleArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor DoubleArray(/*0*/ size: kotlin.Int) + public constructor DoubleArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Double) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.DoubleArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Double + public final operator fun iterator(): kotlin.collections.DoubleIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Double): kotlin.Unit +} + +public abstract class Enum> : kotlin.Comparable, java.io.Serializable { + /*primary*/ public constructor Enum>(/*0*/ name: kotlin.String, /*1*/ ordinal: kotlin.Int) + public final val name: kotlin.String + public final fun (): kotlin.String + public final val ordinal: kotlin.Int + public final fun (): kotlin.Int + protected final fun clone(): kotlin.Any + public final override /*1*/ fun compareTo(/*0*/ other: E): kotlin.Int + protected/*protected and package*/ final fun finalize(): kotlin.Unit + public final fun getDeclaringClass(): java.lang.Class! + + public companion object Companion { + /*primary*/ private constructor Companion() + } +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented() public final annotation class ExtensionFunctionType : kotlin.Annotation { + /*primary*/ public constructor ExtensionFunctionType() +} + +public final class Float : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Float() + public final operator fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Float + public final operator fun inc(): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Float + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Float + public final operator fun unaryPlus(): kotlin.Float + + public companion object Companion { + /*primary*/ private constructor Companion() + public final val MAX_VALUE: kotlin.Float + public final fun (): kotlin.Float + public final val MIN_VALUE: kotlin.Float + public final fun (): kotlin.Float + public final val NEGATIVE_INFINITY: kotlin.Float + public final fun (): kotlin.Float + public final val NaN: kotlin.Float + public final fun (): kotlin.Float + public final val POSITIVE_INFINITY: kotlin.Float + public final fun (): kotlin.Float + } +} + +public final class FloatArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor FloatArray(/*0*/ size: kotlin.Int) + public constructor FloatArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Float) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.FloatArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Float + public final operator fun iterator(): kotlin.collections.FloatIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Float): kotlin.Unit +} + +public interface Function { +} + +public final class Int : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Int() + public final infix fun and(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun inc(): kotlin.Int + public final fun inv(): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Int + public final infix fun or(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun rangeTo(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + public final infix fun shl(/*0*/ bitCount: kotlin.Int): kotlin.Int + public final infix fun shr(/*0*/ bitCount: kotlin.Int): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Int + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Int + public final operator fun unaryPlus(): kotlin.Int + public final infix fun ushr(/*0*/ bitCount: kotlin.Int): kotlin.Int + public final infix fun xor(/*0*/ other: kotlin.Int): kotlin.Int + + public companion object Companion { + /*primary*/ private constructor Companion() + public const final val MAX_VALUE: kotlin.Int + public final fun (): kotlin.Int + public const final val MIN_VALUE: kotlin.Int + public final fun (): kotlin.Int + } +} + +public final class IntArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor IntArray(/*0*/ size: kotlin.Int) + public constructor IntArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Int) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.IntArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Int + public final operator fun iterator(): kotlin.collections.IntIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Int): kotlin.Unit +} + +public final class Long : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Long() + public final infix fun and(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Long + public final operator fun inc(): kotlin.Long + public final fun inv(): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Long + public final infix fun or(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Long + public final operator fun rangeTo(/*0*/ other: kotlin.Byte): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.LongRange + public final infix fun shl(/*0*/ bitCount: kotlin.Int): kotlin.Long + public final infix fun shr(/*0*/ bitCount: kotlin.Int): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Long + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Long + public final operator fun unaryPlus(): kotlin.Long + public final infix fun ushr(/*0*/ bitCount: kotlin.Int): kotlin.Long + public final infix fun xor(/*0*/ other: kotlin.Long): kotlin.Long + + public companion object Companion { + /*primary*/ private constructor Companion() + public const final val MAX_VALUE: kotlin.Long + public final fun (): kotlin.Long + public const final val MIN_VALUE: kotlin.Long + public final fun (): kotlin.Long + } +} + +public final class LongArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor LongArray(/*0*/ size: kotlin.Int) + public constructor LongArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Long) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.LongArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Long + public final operator fun iterator(): kotlin.collections.LongIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Long): kotlin.Unit +} + +public final class Nothing { + /*primary*/ private constructor Nothing() +} + +public abstract class Number : kotlin.Any, java.io.Serializable { + /*primary*/ public constructor Number() + public abstract fun toByte(): kotlin.Byte + public abstract fun toChar(): kotlin.Char + public abstract fun toDouble(): kotlin.Double + public abstract fun toFloat(): kotlin.Float + public abstract fun toInt(): kotlin.Int + public abstract fun toLong(): kotlin.Long + public abstract fun toShort(): kotlin.Short +} + +@kotlin.annotation.Target(allowedTargets = {}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.annotation.MustBeDocumented() public final annotation class ReplaceWith : kotlin.Annotation { + /*primary*/ public constructor ReplaceWith(/*0*/ expression: kotlin.String, /*1*/ vararg imports: kotlin.String /*kotlin.Array*/) + public final val expression: kotlin.String + public final fun (): kotlin.String + public final val imports: kotlin.Array + public final fun (): kotlin.Array +} + +public final class Short : kotlin.Number, kotlin.Comparable, java.io.Serializable { + /*primary*/ private constructor Short() + public final operator fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Double): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Float): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun compareTo(/*0*/ other: kotlin.Long): kotlin.Int + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun dec(): kotlin.Short + public final operator fun div(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun div(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun div(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun div(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun div(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun inc(): kotlin.Short + public final operator fun minus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun minus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun minus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun minus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun minus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun mod(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun mod(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun mod(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun mod(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun plus(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun plus(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun plus(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun plus(/*0*/ other: kotlin.Short): kotlin.Int + public final operator fun rangeTo(/*0*/ other: kotlin.Byte): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Int): kotlin.ranges.IntRange + public final operator fun rangeTo(/*0*/ other: kotlin.Long): kotlin.ranges.LongRange + public final operator fun rangeTo(/*0*/ other: kotlin.Short): kotlin.ranges.IntRange + public final operator fun times(/*0*/ other: kotlin.Byte): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Double): kotlin.Double + public final operator fun times(/*0*/ other: kotlin.Float): kotlin.Float + public final operator fun times(/*0*/ other: kotlin.Int): kotlin.Int + public final operator fun times(/*0*/ other: kotlin.Long): kotlin.Long + public final operator fun times(/*0*/ other: kotlin.Short): kotlin.Int + public open override /*1*/ fun toByte(): kotlin.Byte + public open override /*1*/ fun toChar(): kotlin.Char + public open override /*1*/ fun toDouble(): kotlin.Double + public open override /*1*/ fun toFloat(): kotlin.Float + public open override /*1*/ fun toInt(): kotlin.Int + public open override /*1*/ fun toLong(): kotlin.Long + public open override /*1*/ fun toShort(): kotlin.Short + public final operator fun unaryMinus(): kotlin.Int + public final operator fun unaryPlus(): kotlin.Int + + public companion object Companion { + /*primary*/ private constructor Companion() + public const final val MAX_VALUE: kotlin.Short + public final fun (): kotlin.Short + public const final val MIN_VALUE: kotlin.Short + public final fun (): kotlin.Short + } +} + +public final class ShortArray : kotlin.Cloneable, java.io.Serializable { + /*primary*/ public constructor ShortArray(/*0*/ size: kotlin.Int) + public constructor ShortArray(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> kotlin.Short) + public final val size: kotlin.Int + public final fun (): kotlin.Int + public open override /*1*/ fun clone(): kotlin.ShortArray + public final operator fun get(/*0*/ index: kotlin.Int): kotlin.Short + public final operator fun iterator(): kotlin.collections.ShortIterator + public final operator fun set(/*0*/ index: kotlin.Int, /*1*/ value: kotlin.Short): kotlin.Unit +} + +public final class String : kotlin.Comparable, kotlin.CharSequence, java.io.Serializable { + /*primary*/ public constructor String() + public open override /*1*/ val length: kotlin.Int + public open override /*1*/ fun (): kotlin.Int + public open override /*1*/ /*fake_override*/ fun chars(): java.util.stream.IntStream! + public open override /*1*/ /*fake_override*/ fun codePoints(): java.util.stream.IntStream! + public open override /*1*/ fun compareTo(/*0*/ other: kotlin.String): kotlin.Int + public open override /*1*/ fun get(/*0*/ index: kotlin.Int): kotlin.Char + public final operator fun plus(/*0*/ other: kotlin.Any?): kotlin.String + public open override /*1*/ fun subSequence(/*0*/ startIndex: kotlin.Int, /*1*/ endIndex: kotlin.Int): kotlin.CharSequence + + public companion object Companion { + /*primary*/ private constructor Companion() + } +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Suppress : kotlin.Annotation { + /*primary*/ public constructor Suppress(/*0*/ vararg names: kotlin.String /*kotlin.Array*/) + public final val names: kotlin.Array + public final fun (): kotlin.Array +} + +public open class Throwable : kotlin.Any, java.io.Serializable { + public constructor Throwable() + public constructor Throwable(/*0*/ message: kotlin.String?) + /*primary*/ public constructor Throwable(/*0*/ message: kotlin.String?, /*1*/ cause: kotlin.Throwable?) + public constructor Throwable(/*0*/ cause: kotlin.Throwable?) + public open val cause: kotlin.Throwable? + public open fun (): kotlin.Throwable? + public open val message: kotlin.String? + public open fun (): kotlin.String? + public final fun addSuppressed(/*0*/ p0: kotlin.Throwable!): kotlin.Unit + public open fun fillInStackTrace(): kotlin.Throwable! + public open fun getLocalizedMessage(): kotlin.String! + public open fun getStackTrace(): kotlin.Array<(out) java.lang.StackTraceElement!>! + public final fun getSuppressed(): kotlin.Array<(out) kotlin.Throwable!>! + public open fun initCause(/*0*/ p0: kotlin.Throwable!): kotlin.Throwable! + public open fun printStackTrace(): kotlin.Unit + public open fun printStackTrace(/*0*/ p0: java.io.PrintStream!): kotlin.Unit + public open fun printStackTrace(/*0*/ p0: java.io.PrintWriter!): kotlin.Unit + public open fun setStackTrace(/*0*/ p0: kotlin.Array<(out) java.lang.StackTraceElement!>!): kotlin.Unit +} + +public object Unit { + /*primary*/ private constructor Unit() +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) @kotlin.annotation.MustBeDocumented() public final annotation class UnsafeVariance : kotlin.Annotation { + /*primary*/ public constructor UnsafeVariance() +} diff --git a/compiler/testData/codegen/java8/box/removeIf.kt b/compiler/testData/codegen/java8/box/removeIf.kt new file mode 100644 index 00000000000..19feaccf4be --- /dev/null +++ b/compiler/testData/codegen/java8/box/removeIf.kt @@ -0,0 +1,33 @@ +// FULL_JDK +// WITH_RUNTIME + +import java.util.* +import java.util.function.Predicate + +class MyList : AbstractCollection(), MutableCollection { + override fun iterator(): MutableIterator { + throw UnsupportedOperationException() + } + + override val size: Int + get() = throw UnsupportedOperationException() + + override fun removeIf(predicate: Predicate) = + predicate.test("abc") +} + +fun box(): String { + val ml = mutableListOf("xyz", "abc") + + if (!ml.removeIf { x -> x == "abc" }) return "fail 1" + if (ml.removeIf { x -> x == "abc" }) return "fail 2" + + if (ml != listOf("xyz")) return "fail 3" + + val myList = MyList() + + if (!myList.removeIf { x -> x == "abc" }) return "fail 4" + if (myList.removeIf { x -> x == "xyz" }) return "fail 5" + + return "OK" +} diff --git a/compiler/testData/codegen/java8/box/stream.kt b/compiler/testData/codegen/java8/box/stream.kt new file mode 100644 index 00000000000..4c5b064cc9b --- /dev/null +++ b/compiler/testData/codegen/java8/box/stream.kt @@ -0,0 +1,61 @@ +// FULL_JDK +// WITH_RUNTIME +import java.util.stream.* + +class B : List { + override val size: Int + get() = throw UnsupportedOperationException() + + override fun contains(element: F): Boolean { + throw UnsupportedOperationException() + } + + override fun containsAll(elements: Collection): Boolean { + throw UnsupportedOperationException() + } + + override fun get(index: Int): F { + throw UnsupportedOperationException() + } + + override fun indexOf(element: F): Int { + throw UnsupportedOperationException() + } + + override fun isEmpty(): Boolean { + throw UnsupportedOperationException() + } + + override fun iterator(): Iterator { + throw UnsupportedOperationException() + } + + override fun lastIndexOf(element: F): Int { + throw UnsupportedOperationException() + } + + override fun listIterator(): ListIterator { + throw UnsupportedOperationException() + } + + override fun listIterator(index: Int): ListIterator { + throw UnsupportedOperationException() + } + + override fun subList(fromIndex: Int, toIndex: Int): List { + throw UnsupportedOperationException() + } + + override fun stream() = Stream.of("abc", "ab") as Stream +} + +fun box(): String { + val a: List = listOf("abc", "a", "ab") + val b = a.stream().filter { it.length > 1 }.collect(Collectors.toList()) + if (b != listOf("abc", "ab")) return "fail 1" + + val c = B().stream().collect(Collectors.toList()) + if (c != listOf("abc", "ab")) return "fail 2" + + return "OK" +} diff --git a/compiler/testData/compileKotlinAgainstKotlinJava8/jdk8Against6.kt b/compiler/testData/compileKotlinAgainstKotlinJava8/jdk8Against6.kt new file mode 100644 index 00000000000..70cd6a1964c --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlinJava8/jdk8Against6.kt @@ -0,0 +1,21 @@ +// FILE: A.kt +import java.util.* +class Jdk6List : AbstractList() { + override fun get(index: Int): F { + return "OK" as F + } + + override val size: Int + get() = 2 + +} + +// FILE: B.kt +// FULL_JDK + +fun box(): String { + val result = Jdk6List().stream().filter { it == "OK" }.count() + if (result != 2L) return "fai1: $result" + + return "OK" +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/removeIf.kt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/removeIf.kt new file mode 100644 index 00000000000..4db077c6b7b --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/removeIf.kt @@ -0,0 +1,10 @@ +import java.util.stream.* + +interface A : MutableCollection { + override fun removeIf(x: java.util.function.Predicate) = false +} + +fun foo(x: MutableList, y: A) { + x.removeIf { it.length > 0 } + y.removeIf { it.length > 0 } +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/removeIf.txt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/removeIf.txt new file mode 100644 index 00000000000..711a2fdc1f2 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/removeIf.txt @@ -0,0 +1,25 @@ +package + +public fun foo(/*0*/ x: kotlin.collections.MutableList, /*1*/ y: A): kotlin.Unit + +public interface A : kotlin.collections.MutableCollection { + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun add(/*0*/ element: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun addAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun clear(): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun contains(/*0*/ element: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun iterator(): kotlin.collections.MutableIterator + public open override /*1*/ /*fake_override*/ fun parallelStream(): java.util.stream.Stream! + public abstract override /*1*/ /*fake_override*/ fun remove(/*0*/ element: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun removeAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public open override /*1*/ fun removeIf(/*0*/ x: java.util.function.Predicate): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun retainAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! + public open override /*1*/ /*fake_override*/ fun stream(): java.util.stream.Stream! + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/stream.kt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/stream.kt new file mode 100644 index 00000000000..4e086498528 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/stream.kt @@ -0,0 +1,10 @@ +import java.util.stream.* + +interface A : Collection { + override fun stream(): Stream = Stream.of() +} + +fun foo(x: List, y: A) { + x.stream().filter { it.length > 0 }.collect(Collectors.toList()) + y.stream().filter { it.length > 0 } +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/stream.txt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/stream.txt new file mode 100644 index 00000000000..a1fcf29ef04 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/stream.txt @@ -0,0 +1,18 @@ +package + +public fun foo(/*0*/ x: kotlin.collections.List, /*1*/ y: A): kotlin.Unit + +public interface A : kotlin.collections.Collection { + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun contains(/*0*/ element: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsAll(/*0*/ elements: kotlin.collections.Collection): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.Consumer!): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun iterator(): kotlin.collections.Iterator + public open override /*1*/ /*fake_override*/ fun parallelStream(): java.util.stream.Stream! + public open override /*1*/ /*fake_override*/ fun spliterator(): java.util.Spliterator! + public open override /*1*/ fun stream(): java.util.stream.Stream + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/DeserializedScopeValidationVisitor.kt b/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/DeserializedScopeValidationVisitor.kt index dd39f4e0a91..9ab96834c10 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/DeserializedScopeValidationVisitor.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/DeserializedScopeValidationVisitor.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.PackageViewDescriptor +import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor import org.jetbrains.kotlin.resolve.MemberComparator import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope @@ -45,9 +46,10 @@ private fun validateDeserializedScope(scopeOwner: DeclarationDescriptor, scope: } private fun checkSorted(descriptors: Collection, declaration: DeclarationDescriptor) { + val serializedOnly = descriptors.filterNot { it is JavaCallableMemberDescriptor } KtUsefulTestCase.assertOrderedEquals( "Members of $declaration should be sorted by serialization.", - descriptors, - descriptors.sortedWith(MemberComparator.INSTANCE) + serializedOnly, + serializedOnly.sortedWith(MemberComparator.INSTANCE) ) } diff --git a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt index 2e0d9597516..9fa88777764 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt @@ -20,10 +20,10 @@ import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.ModuleContent import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.ProjectContext import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.platform.JvmBuiltIns import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.CompilerEnvironment import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade @@ -42,7 +42,7 @@ fun createResolveSessionForFiles( { ModuleContent(syntheticFiles, GlobalSearchScope.allScope(project)) }, JvmPlatformParameters { testModule }, CompilerEnvironment, - JvmBuiltIns.Instance + DefaultBuiltIns.Instance ) return resolverForProject.resolverForModule(testModule).componentProvider.get() } diff --git a/compiler/tests-java8/compiler-tests-java8.iml b/compiler/tests-java8/compiler-tests-java8.iml index 5b2c0810252..b1bec867cc7 100644 --- a/compiler/tests-java8/compiler-tests-java8.iml +++ b/compiler/tests-java8/compiler-tests-java8.iml @@ -22,5 +22,6 @@ + \ No newline at end of file diff --git a/compiler/tests-java8/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithJava8TestGenerated.java b/compiler/tests-java8/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithJava8TestGenerated.java index 3dda81e1557..14545743c30 100644 --- a/compiler/tests-java8/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithJava8TestGenerated.java +++ b/compiler/tests-java8/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithJava8TestGenerated.java @@ -112,4 +112,25 @@ public class DiagnosticsWithJava8TestGenerated extends AbstractDiagnosticsWithFu doTest(fileName); } } + + @TestMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class TargetedBuiltIns extends AbstractDiagnosticsWithFullJdkTest { + public void testAllFilesPresentInTargetedBuiltIns() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("removeIf.kt") + public void testRemoveIf() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/removeIf.kt"); + doTest(fileName); + } + + @TestMetadata("stream.kt") + public void testStream() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/stream.kt"); + doTest(fileName); + } + } } diff --git a/compiler/tests-java8/tests/org/jetbrains/kotlin/codegen/BlackBoxWithJava8CodegenTestGenerated.java b/compiler/tests-java8/tests/org/jetbrains/kotlin/codegen/BlackBoxWithJava8CodegenTestGenerated.java index a8c8c2af314..1573de0e0a5 100644 --- a/compiler/tests-java8/tests/org/jetbrains/kotlin/codegen/BlackBoxWithJava8CodegenTestGenerated.java +++ b/compiler/tests-java8/tests/org/jetbrains/kotlin/codegen/BlackBoxWithJava8CodegenTestGenerated.java @@ -83,12 +83,24 @@ public class BlackBoxWithJava8CodegenTestGenerated extends AbstractBlackBoxCodeg doTest(fileName); } + @TestMetadata("removeIf.kt") + public void testRemoveIf() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/java8/box/removeIf.kt"); + doTest(fileName); + } + @TestMetadata("samOnInterfaceWithDefaultMethod.kt") public void testSamOnInterfaceWithDefaultMethod() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/java8/box/samOnInterfaceWithDefaultMethod.kt"); doTest(fileName); } + @TestMetadata("stream.kt") + public void testStream() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/java8/box/stream.kt"); + doTest(fileName); + } + @TestMetadata("useStream.kt") public void testUseStream() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/java8/box/useStream.kt"); diff --git a/compiler/tests-java8/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests-java8/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java new file mode 100644 index 00000000000..038a1e1dea1 --- /dev/null +++ b/compiler/tests-java8/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java @@ -0,0 +1,43 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.codegen; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("compiler/testData/compileKotlinAgainstKotlinJava8") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotlinAgainstKotlinTest { + public void testAllFilesPresentInCompileKotlinAgainstKotlinJava8() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlinJava8"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("jdk8Against6.kt") + public void testJdk8Against6() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/compileKotlinAgainstKotlinJava8/jdk8Against6.kt"); + doTest(fileName); + } +} diff --git a/compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/Java8BuiltInsWithJDKMembersTest.kt b/compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/Java8BuiltInsWithJDKMembersTest.kt new file mode 100644 index 00000000000..97ebbf4d5a6 --- /dev/null +++ b/compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/Java8BuiltInsWithJDKMembersTest.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.serialization.builtins + +class Java8BuiltInsWithJDKMembersTest : AbstractBuiltInsWithJDKMembersTest() { + fun testLoadBuiltIns() { + doTest("java8") + } +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java index ef5347fe24a..1662a339330 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java @@ -355,7 +355,11 @@ public abstract class AbstractDiagnosticsTest extends BaseDiagnosticsTest { @NotNull protected ModuleDescriptorImpl createModule(@NotNull String moduleName, @NotNull StorageManager storageManager) { - return TargetPlatformKt.createModule(JvmPlatform.INSTANCE, Name.special(moduleName), storageManager, JvmBuiltIns.getInstance()); + JvmBuiltIns builtIns = new JvmBuiltIns(storageManager); + ModuleDescriptorImpl module = TargetPlatformKt.createModule( + JvmPlatform.INSTANCE, Name.special(moduleName), storageManager, builtIns); + builtIns.setOwnerModuleDescriptor(module); + return module; } @NotNull diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt index 1a1c510334a..449631e6005 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt @@ -60,9 +60,11 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() { val moduleDirs = File(PATH_TO_TEST_ROOT_DIR).listFiles { it -> it.isDirectory }!! val environment = createEnvironment(moduleDirs) val modules = setupModules(environment, moduleDirs) + val projectContext = ProjectContext(environment.project) + val builtIns = JvmBuiltIns(projectContext.storageManager) val resolverForProject = JvmAnalyzerFacade.setupResolverForProject( "test", - ProjectContext(environment.project), modules, + projectContext, modules, { m -> ModuleContent(m.kotlinFiles, m.javaFilesScope) }, JvmPlatformParameters { javaClass -> @@ -70,10 +72,12 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() { modules.first { it._name == moduleName } }, CompilerEnvironment, - JvmBuiltIns.Instance, + builtIns, packagePartProviderFactory = { a, b -> JvmPackagePartProvider(environment) } ) + builtIns.setOwnerModuleDescriptor(resolverForProject.descriptorForModule(resolverForProject.allModules.first())) + performChecks(resolverForProject, modules) } diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt new file mode 100644 index 00000000000..720fa4122c6 --- /dev/null +++ b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt @@ -0,0 +1,80 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.serialization.builtins + +import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.builtins.KotlinBuiltIns.* +import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment +import org.jetbrains.kotlin.context.ModuleContext +import org.jetbrains.kotlin.descriptors.PackagePartProvider +import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerForJvm +import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.platform.JvmBuiltIns +import org.jetbrains.kotlin.renderer.DescriptorRenderer +import org.jetbrains.kotlin.renderer.DescriptorRendererModifier +import org.jetbrains.kotlin.renderer.OverrideRenderingPolicy +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory +import org.jetbrains.kotlin.storage.LockBasedStorageManager +import org.jetbrains.kotlin.test.ConfigurationKind +import org.jetbrains.kotlin.test.KotlinTestUtils +import org.jetbrains.kotlin.test.KotlinTestWithEnvironment +import org.jetbrains.kotlin.test.TestJdkKind +import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator +import java.io.File + +abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment() { + override fun createEnvironment(): KotlinCoreEnvironment { + return createEnvironmentWithJdk(ConfigurationKind.JDK_ONLY, TestJdkKind.FULL_JDK) + } + + protected fun doTest(builtinVersionName: String) { + val configuration = RecursiveDescriptorComparator.RECURSIVE_ALL.includeMethodsOfKotlinAny(false).withRenderer( + DescriptorRenderer.withOptions { + withDefinedIn = false + overrideRenderingPolicy = OverrideRenderingPolicy.RENDER_OPEN_OVERRIDE + verbose = true + modifiers = DescriptorRendererModifier.ALL + }) + + val jvmBuiltIns = JvmBuiltIns(LockBasedStorageManager.NO_LOCKS) + val emptyModule = KotlinTestUtils.createEmptyModule("", JvmPlatform, jvmBuiltIns) + jvmBuiltIns.setOwnerModuleDescriptor(emptyModule) + + val moduleContext = ModuleContext(emptyModule, environment.project) + val providerFactory = FileBasedDeclarationProviderFactory(moduleContext.storageManager, emptyList()) + + val container = createContainerForTopDownAnalyzerForJvm( + moduleContext, + CliLightClassGenerationSupport.CliBindingTrace(), providerFactory, + GlobalSearchScope.allScope(environment.project), LookupTracker.DO_NOTHING, PackagePartProvider.EMPTY) + + emptyModule.initialize(container.javaDescriptorResolver.packageFragmentProvider) + emptyModule.setDependencies(emptyModule) + + val packageFragmentProvider = emptyModule.builtIns.builtInsModule.packageFragmentProvider + + for (packageFqName in listOf(BUILT_INS_PACKAGE_FQ_NAME, COLLECTIONS_PACKAGE_FQ_NAME, RANGES_PACKAGE_FQ_NAME)) { + val loaded = packageFragmentProvider.getPackageFragments(packageFqName).single() + RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile( + loaded, configuration, + File("compiler/testData/builtin-classes/$builtinVersionName/" + packageFqName.asString().replace('.', '-') + ".txt")) + } + } +} diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/Java6BuiltInsWithJDKMembersTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/Java6BuiltInsWithJDKMembersTest.kt new file mode 100644 index 00000000000..4e4fcc8b798 --- /dev/null +++ b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/Java6BuiltInsWithJDKMembersTest.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.serialization.builtins + +class Java6BuiltInsWithJDKMembersTest : AbstractBuiltInsWithJDKMembersTest() { + fun testLoadBuiltIns() { + doTest("java6") + } +} diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/context.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/context.kt index 339bd4cb8e6..2548e5cca55 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/context.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/context.kt @@ -48,7 +48,15 @@ class JavaResolverComponents( val packageMapper: PackagePartProvider, val supertypeLoopChecker: SupertypeLoopChecker, val lookupTracker: LookupTracker -) +) { + fun replace( + javaResolverCache: JavaResolverCache = this.javaResolverCache + ) = JavaResolverComponents( + storageManager, finder, kotlinClassFinder, deserializedDescriptorResolver, + externalAnnotationResolver, signaturePropagator, errorReporter, javaResolverCache, + javaPropertyInitializerEvaluator, samConversionResolver, sourceElementFactory, + moduleClassResolver, packageMapper, supertypeLoopChecker, lookupTracker) +} open class LazyJavaResolverContext( val components: JavaResolverComponents, @@ -68,6 +76,9 @@ fun LazyJavaResolverContext.child( typeParameterResolver: TypeParameterResolver ) = LazyJavaResolverContext(components, packageFragmentProvider, javaClassResolver, module, reflectionTypes, typeParameterResolver) +fun LazyJavaResolverContext.replaceComponents( + components: JavaResolverComponents +) = LazyJavaResolverContext(components, packageFragmentProvider, javaClassResolver, module, reflectionTypes, typeParameterResolver) fun LazyJavaResolverContext.child( containingDeclaration: DeclarationDescriptor, diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt index 86bdfb26a7c..1d0946b7e4d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt @@ -23,17 +23,17 @@ import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorBase import org.jetbrains.kotlin.load.java.FakePureImplementationsProvider import org.jetbrains.kotlin.load.java.JavaVisibilities import org.jetbrains.kotlin.load.java.JvmAnnotationNames +import org.jetbrains.kotlin.load.java.components.JavaResolverCache import org.jetbrains.kotlin.load.java.components.TypeUsage import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor -import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext -import org.jetbrains.kotlin.load.java.lazy.child -import org.jetbrains.kotlin.load.java.lazy.resolveAnnotations +import org.jetbrains.kotlin.load.java.lazy.* import org.jetbrains.kotlin.load.java.lazy.types.toAttributes import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.JavaClassifierType import org.jetbrains.kotlin.load.java.structure.JavaType import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.isValidJavaFqName +import org.jetbrains.kotlin.platform.createMappedTypeParametersSubstitution import org.jetbrains.kotlin.resolve.constants.StringValue import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe @@ -48,7 +48,8 @@ import java.util.* class LazyJavaClassDescriptor( private val outerContext: LazyJavaResolverContext, containingDeclaration: DeclarationDescriptor, - private val jClass: JavaClass + private val jClass: JavaClass, + private val additionalSupertypeClassDescriptor: ClassDescriptor? = null ) : ClassDescriptorBase(outerContext.storageManager, containingDeclaration, jClass.name, outerContext.components.sourceElementFactory.source(jClass)), JavaClassDescriptor { @@ -157,6 +158,14 @@ class LazyJavaClassDescriptor( } } + // Add fake supertype kotlin.collection.Collection to java.util.Collection class if needed + // Only needed when calculating built-ins member scope + result.addIfNotNull( + additionalSupertypeClassDescriptor?.let { + createMappedTypeParametersSubstitution(it, this@LazyJavaClassDescriptor) + .buildSubstitutor().substitute(it.defaultType, Variance.INVARIANT) + }) + result.addIfNotNull(purelyImplementedSupertype) if (incomplete.isNotEmpty()) { @@ -213,4 +222,11 @@ class LazyJavaClassDescriptor( override fun toString(): String = getName().asString() } + + // Only needed when calculating built-ins member scope + internal fun copy( + javaResolverCache: JavaResolverCache, additionalSupertypeClassDescriptor: ClassDescriptor? + ) = LazyJavaClassDescriptor( + c.replaceComponents(c.components.replace(javaResolverCache = javaResolverCache)), + containingDeclaration, jClass, additionalSupertypeClassDescriptor) } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt index 5d2f37c5b06..caabbde74e0 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -82,7 +82,7 @@ class LazyJavaClassMemberScope( result.add(descriptor) result.addIfNotNull(c.components.samConversionResolver.resolveSamAdapter(descriptor)) } - + enhanceSignatures( result.ifEmpty { emptyOrSingletonList(createDefaultConstructor()) } ).toReadOnlyList() @@ -346,10 +346,10 @@ class LazyJavaClassMemberScope( } private fun getFunctionsFromSupertypes(name: Name): Set { - return ownerDescriptor.typeConstructor.supertypes.flatMapTo(LinkedHashSet()) { - it.memberScope.getContributedFunctions(name, NoLookupLocation.WHEN_GET_SUPER_MEMBERS) - } - } + return ownerDescriptor.typeConstructor.supertypes.flatMapTo(LinkedHashSet()) { + it.memberScope.getContributedFunctions(name, NoLookupLocation.WHEN_GET_SUPER_MEMBERS) + } + } override fun computeNonDeclaredProperties(name: Name, result: MutableCollection) { if (jClass.isAnnotationType) { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/BuiltInClassesAreSerializableOnJvm.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/BuiltInClassesAreSerializableOnJvm.kt index dd59ca3bec7..886ba8cdfa1 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/BuiltInClassesAreSerializableOnJvm.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/BuiltInClassesAreSerializableOnJvm.kt @@ -17,28 +17,42 @@ package org.jetbrains.kotlin.load.kotlin import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.descriptors.SourceElement +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl +import org.jetbrains.kotlin.incremental.components.NoLookupLocation +import org.jetbrains.kotlin.load.java.components.JavaResolverCache +import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaClassDescriptor +import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaClassMemberScope +import org.jetbrains.kotlin.load.java.lazy.replaceComponents +import org.jetbrains.kotlin.load.java.sources.JavaSourceElement +import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.JavaToKotlinClassMap -import org.jetbrains.kotlin.platform.JvmBuiltIns +import org.jetbrains.kotlin.platform.createMappedTypeParametersSubstitution import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe +import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType +import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.serialization.deserialization.AdditionalClassPartsProvider import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor import org.jetbrains.kotlin.types.DelegatingType import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.utils.SmartSet +import org.jetbrains.kotlin.utils.addToStdlib.check import java.io.Serializable +import java.util.* -class BuiltInClassesAreSerializableOnJvm( - private val moduleDescriptor: ModuleDescriptor +open class BuiltInClassesAreSerializableOnJvm( + private val moduleDescriptor: ModuleDescriptor, + deferredOwnerModuleDescriptor: () -> ModuleDescriptor ) : AdditionalClassPartsProvider { + private val ownerModuleDescriptor: ModuleDescriptor by lazy(deferredOwnerModuleDescriptor) + private val mockSerializableType = createMockJavaIoSerializableType() private fun createMockJavaIoSerializableType(): KotlinType { @@ -49,7 +63,7 @@ class BuiltInClassesAreSerializableOnJvm( //NOTE: can't reference anyType right away, because this is sometimes called when JvmBuiltIns are initializing val superTypes = listOf(object : DelegatingType() { override fun getDelegate(): KotlinType { - return JvmBuiltIns.Instance.anyType + return moduleDescriptor.builtIns.anyType } }) @@ -68,6 +82,74 @@ class BuiltInClassesAreSerializableOnJvm( else return listOf() } + override fun getFunctions(name: Name, classDescriptor: DeserializedClassDescriptor): Collection = + getAdditionalFunctions(classDescriptor) { + it.getContributedFunctions(name, NoLookupLocation.FROM_BUILTINS) + } + .map { + additionalMember -> + additionalMember.newCopyBuilder().apply { + setOwner(classDescriptor) + setDispatchReceiverParameter(classDescriptor.thisAsReceiverParameter) + setPreserveSourceElement() + setSubstitution(createMappedTypeParametersSubstitution( + additionalMember.containingDeclaration as ClassDescriptor, classDescriptor)) + }.build()!! + } + + override fun getFunctionsNames(classDescriptor: DeserializedClassDescriptor): Collection = + getAdditionalFunctions(classDescriptor) { + it.getContributedDescriptors(DescriptorKindFilter.FUNCTIONS).filterIsInstance() + }.map(SimpleFunctionDescriptor::getName) + + private fun getAdditionalFunctions( + classDescriptor: DeserializedClassDescriptor, + functionsByScope: (MemberScope) -> Collection + ): Collection { + // Prevents recursive dependency: memberScope(Any) -> memberScope(Object) -> memberScope(Any) + // No additional members should be added to Any + if (classDescriptor.isAny) return emptyList() + + val fqName = classDescriptor.fqNameUnsafe.check { it.isSafe }?.toSafe() ?: return emptyList() + + val j2kClassMap = JavaToKotlinClassMap.INSTANCE + val javaAnalogueFqName = j2kClassMap.mapKotlinToJava(fqName.toUnsafe())?.asSingleFqName() ?: return emptyList() + + if (javaAnalogueFqName in IGNORE_BY_DEFAULT_CLASS_FQ_NAMES) return emptyList() + + val javaAnalogueDescriptor = + ownerModuleDescriptor.resolveClassByFqName(javaAnalogueFqName, NoLookupLocation.FROM_BUILTINS) as? LazyJavaClassDescriptor + ?: return emptyList() + + val platformClassDescriptors = j2kClassMap.mapPlatformClass(javaAnalogueDescriptor.fqNameSafe, DefaultBuiltIns.Instance) + val kotlinMutableClassIfContainer = platformClassDescriptors.lastOrNull() ?: return emptyList() + val platformVersions = SmartSet.create(platformClassDescriptors.map { it.fqNameSafe }) + + val isMutable = j2kClassMap.isMutable(classDescriptor) + + val fakeJavaClassDescriptor = + javaAnalogueDescriptor.copy( + javaResolverCache = JavaResolverCache.EMPTY, + additionalSupertypeClassDescriptor = kotlinMutableClassIfContainer) + + val scope = fakeJavaClassDescriptor.unsubstitutedMemberScope + + return functionsByScope(scope) + .filter { analogueMember -> + if (analogueMember.kind != CallableMemberDescriptor.Kind.DECLARATION) return@filter false + if (!analogueMember.visibility.isPublicAPI) return@filter false + + val methodFqName = analogueMember.fqNameSafe + + if (methodFqName in BLACK_LIST_METHODS_FQ_NAMES) return@filter false + if ((methodFqName in MUTABLE_METHODS_FQ_NAMES) xor isMutable) return@filter false + + analogueMember.overriddenDescriptors.none { + it.containingDeclaration.fqNameSafe in platformVersions + } + } + } + companion object { fun isSerializableInJava(classFqName: FqName): Boolean { val fqNameUnsafe = classFqName.toUnsafe() @@ -84,5 +166,35 @@ class BuiltInClassesAreSerializableOnJvm( return Serializable::class.java.isAssignableFrom(classViaReflection) } + private val IGNORE_BY_DEFAULT_CLASS_FQ_NAMES = + setOf(FqName("java.lang.String")) + + JvmPrimitiveType.values().map { it.wrapperFqName } + + private val BLACK_LIST_METHODS_FQ_NAMES = + buildPrimitiveValueMethodsSet() + + FqName("java.util.Collection.toArray") + + FqName("java.util.List.toArray") + + FqName("java.util.Set.toArray") + + FqName("java.lang.annotation.Annotation.annotationType") + + private val MUTABLE_METHODS_FQ_NAMES = + inClass("java.util.Collection", + "removeIf") + + + inClass("java.util.List", + "sort", "replaceAll") + + + inClass("java.util.Map", + "compute", "computeIfAbsent", "computeIfPresent", "remove", "merge", "putIfAbsent", "replace", "replaceAll") + + private fun buildPrimitiveValueMethodsSet() = + JvmPrimitiveType.values().mapTo(LinkedHashSet()) { + it.wrapperFqName.child(Name.identifier(it.javaKeywordName + "Value")) + } + + private fun inClass(classFqName: String, vararg names: String) = + names.mapTo(LinkedHashSet()) { FqName(classFqName).child(Name.identifier(it)) } } -} \ No newline at end of file +} + +private val ClassDescriptor.isAny: Boolean get() = fqNameUnsafe == KotlinBuiltIns.FQ_NAMES.any \ No newline at end of file diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt index 6ba8aa20f78..4abfef81a78 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt @@ -43,7 +43,7 @@ class DeserializationComponentsForJava( storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, localClassResolver, errorReporter, lookupTracker, FlexibleJavaClassifierTypeFactory, ClassDescriptorFactory.EMPTY, notFoundClasses, JavaTypeCapabilitiesLoader, - additionalClassPartsProvider = BuiltInClassesAreSerializableOnJvm(moduleDescriptor) + additionalClassPartsProvider = BuiltInClassesAreSerializableOnJvm(moduleDescriptor, { moduleDescriptor }) ) localClassResolver.setDeserializationComponents(components) } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JvmBuiltIns.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JvmBuiltIns.kt index 3817d2936d7..6eda61651bd 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JvmBuiltIns.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JvmBuiltIns.kt @@ -16,23 +16,25 @@ package org.jetbrains.kotlin.platform -import org.jetbrains.kotlin.builtins.BuiltInsInitializer import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.load.kotlin.BuiltInClassesAreSerializableOnJvm import org.jetbrains.kotlin.serialization.deserialization.AdditionalClassPartsProvider +import org.jetbrains.kotlin.storage.StorageManager +import org.jetbrains.kotlin.utils.sure -class JvmBuiltIns private constructor() : KotlinBuiltIns() { - companion object { - private val initializer = BuiltInsInitializer { - JvmBuiltIns() - } +class JvmBuiltIns(storageManager: StorageManager) : KotlinBuiltIns(storageManager) { + // Module containing JDK classes or having them among dependencies + private var ownerModuleDescriptor: ModuleDescriptor? = null - @JvmStatic - val Instance: KotlinBuiltIns - get() = initializer.get() + fun setOwnerModuleDescriptor(moduleDescriptor: ModuleDescriptor) { + assert(ownerModuleDescriptor == null) { "JvmBuiltins repeated initialization" } + this.ownerModuleDescriptor = moduleDescriptor } override fun getAdditionalClassPartsProvider(): AdditionalClassPartsProvider { - return BuiltInClassesAreSerializableOnJvm(builtInsModule) + return BuiltInClassesAreSerializableOnJvm(builtInsModule, { + ownerModuleDescriptor.sure { "JvmBuiltins has not been initialized properly" } + }) } -} \ No newline at end of file +} diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/mappingUtil.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/mappingUtil.kt new file mode 100644 index 00000000000..7843e21549a --- /dev/null +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/mappingUtil.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.platform + +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor +import org.jetbrains.kotlin.types.TypeConstructorSubstitution +import org.jetbrains.kotlin.types.typeUtil.asTypeProjection + +fun createMappedTypeParametersSubstitution(from: ClassDescriptor, to: ClassDescriptor): TypeConstructorSubstitution { + assert(from.declaredTypeParameters.size == to.declaredTypeParameters.size) { + "$from and $to should have same number of type parameters, " + + "but ${from.declaredTypeParameters.size} / ${to.declaredTypeParameters.size} found" + } + + return TypeConstructorSubstitution.createByConstructorsMap( + from.declaredTypeParameters.map(TypeParameterDescriptor::getTypeConstructor).zip( + to.declaredTypeParameters.map { it.defaultType.asTypeProjection() } + ).toMap()) +} \ No newline at end of file diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt index 89ef6e883cb..5a38b926a07 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt @@ -46,8 +46,8 @@ class RuntimeModuleData private constructor(val deserialization: Deserialization companion object { fun create(classLoader: ClassLoader): RuntimeModuleData { - val builtIns = JvmBuiltIns.Instance val storageManager = LockBasedStorageManager() + val builtIns = JvmBuiltIns(storageManager) val module = ModuleDescriptorImpl(Name.special(""), storageManager, ModuleParameters(listOf(), JavaToKotlinClassMap.INSTANCE), builtIns) @@ -64,6 +64,9 @@ class RuntimeModuleData private constructor(val deserialization: Deserialization val lazyJavaPackageFragmentProvider = LazyJavaPackageFragmentProvider(globalJavaResolverContext, module, ReflectionTypes(module)) + + builtIns.setOwnerModuleDescriptor(module) + val javaDescriptorResolver = JavaDescriptorResolver(lazyJavaPackageFragmentProvider) val javaClassDataFinder = JavaClassDataFinder(reflectKotlinClassFinder, deserializedDescriptorResolver) val notFoundClasses = NotFoundClasses(storageManager, module) diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt index cb24055ede5..a9e0ec51f02 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt @@ -16,7 +16,9 @@ package org.jetbrains.kotlin.builtins -class DefaultBuiltIns private constructor() : KotlinBuiltIns() { +import org.jetbrains.kotlin.storage.LockBasedStorageManager + +class DefaultBuiltIns private constructor() : KotlinBuiltIns(LockBasedStorageManager()) { companion object { private val initializer = BuiltInsInitializer { DefaultBuiltIns() diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 43fab8aa36a..ae0672e32db 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -32,7 +32,7 @@ import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.resolve.scopes.MemberScope; import org.jetbrains.kotlin.serialization.deserialization.AdditionalClassPartsProvider; -import org.jetbrains.kotlin.storage.LockBasedStorageManager; +import org.jetbrains.kotlin.storage.StorageManager; import org.jetbrains.kotlin.types.*; import org.jetbrains.kotlin.types.checker.KotlinTypeChecker; @@ -71,12 +71,10 @@ public abstract class KotlinBuiltIns { private final Map primitiveTypeToArrayKotlinType; private final Map primitiveKotlinTypeToKotlinArrayType; private final Map kotlinArrayTypeToPrimitiveKotlinType; - private final Map packageNameToPackageFragment; public static final FqNames FQ_NAMES = new FqNames(); - protected KotlinBuiltIns() { - LockBasedStorageManager storageManager = new LockBasedStorageManager(); + protected KotlinBuiltIns(@NotNull StorageManager storageManager) { builtInsModule = new ModuleDescriptorImpl( Name.special(""), storageManager, ModuleParameters.Empty.INSTANCE, this ); @@ -96,7 +94,7 @@ public abstract class KotlinBuiltIns { builtInsModule.initialize(packageFragmentProvider); builtInsModule.setDependencies(builtInsModule); - packageNameToPackageFragment = new LinkedHashMap(); + Map packageNameToPackageFragment = new LinkedHashMap(); builtInsPackageFragment = createPackage(packageFragmentProvider, packageNameToPackageFragment, BUILT_INS_PACKAGE_FQ_NAME); collectionsPackageFragment = createPackage(packageFragmentProvider, packageNameToPackageFragment, COLLECTIONS_PACKAGE_FQ_NAME); @@ -290,23 +288,7 @@ public abstract class KotlinBuiltIns { @Nullable public ClassDescriptor getBuiltInClassByFqNameNullable(@NotNull FqName fqName) { - if (!fqName.isRoot()) { - FqName parent = fqName.parent(); - PackageFragmentDescriptor packageFragment = packageNameToPackageFragment.get(parent); - if (packageFragment != null) { - ClassDescriptor descriptor = getBuiltInClassByNameNullable(fqName.shortName(), packageFragment); - if (descriptor != null) { - return descriptor; - } - } - - ClassDescriptor possiblyOuterClass = getBuiltInClassByFqNameNullable(parent); - if (possiblyOuterClass != null) { - return (ClassDescriptor) possiblyOuterClass.getUnsubstitutedInnerClassesScope().getContributedClassifier( - fqName.shortName(), NoLookupLocation.FROM_BUILTINS); - } - } - return null; + return DescriptorUtilKt.resolveClassByFqName(builtInsModule, fqName, NoLookupLocation.FROM_BUILTINS); } @NotNull diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java index e18432bf921..5f8cef3acf1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java @@ -20,6 +20,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.types.KotlinType; +import org.jetbrains.kotlin.types.TypeSubstitution; import org.jetbrains.kotlin.types.TypeSubstitutor; import java.util.Collection; @@ -109,6 +110,9 @@ public interface FunctionDescriptor extends CallableMemberDescriptor { @NotNull CopyBuilder setExtensionReceiverType(@Nullable KotlinType type); + @NotNull + CopyBuilder setDispatchReceiverParameter(@Nullable ReceiverParameterDescriptor dispatchReceiverParameter); + @NotNull CopyBuilder setOriginal(@NotNull FunctionDescriptor original); @@ -124,6 +128,9 @@ public interface FunctionDescriptor extends CallableMemberDescriptor { @NotNull CopyBuilder setHiddenToOvercomeSignatureClash(); + @NotNull + CopyBuilder setSubstitution(@NotNull TypeSubstitution substitution); + @Nullable D build(); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/descriptorUtil.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/descriptorUtil.kt new file mode 100644 index 00000000000..372060d1b75 --- /dev/null +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/descriptorUtil.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.descriptors + +import org.jetbrains.kotlin.incremental.components.LookupLocation +import org.jetbrains.kotlin.name.FqName + +fun ModuleDescriptor.resolveClassByFqName(fqName: FqName, lookupLocation: LookupLocation): ClassDescriptor? { + if (fqName.isRoot) return null + + (getPackage(fqName.parent()) + .memberScope.getContributedClassifier(fqName.shortName(), lookupLocation) as? ClassDescriptor)?.let { return it } + + return resolveClassByFqName(fqName.parent(), lookupLocation) + ?.unsubstitutedInnerClassesScope + ?.getContributedClassifier(fqName.shortName(), lookupLocation) as? ClassDescriptor +} diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java index 52b1db7defb..2a249dfe6dc 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java @@ -299,6 +299,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo protected @NotNull Kind kind; protected @NotNull List newValueParameterDescriptors; protected @Nullable KotlinType newExtensionReceiverParameterType; + protected @Nullable ReceiverParameterDescriptor dispatchReceiverParameter; protected @NotNull KotlinType newReturnType; protected @Nullable Name name; protected boolean copyOverrides = true; @@ -326,6 +327,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo this.kind = kind; this.newValueParameterDescriptors = newValueParameterDescriptors; this.newExtensionReceiverParameterType = newExtensionReceiverParameterType; + this.dispatchReceiverParameter = FunctionDescriptorImpl.this.dispatchReceiverParameter; this.newReturnType = newReturnType; this.name = name; this.isHiddenToOvercomeSignatureClash = isHiddenToOvercomeSignatureClash(); @@ -401,6 +403,13 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo return this; } + @Override + @NotNull + public CopyConfiguration setDispatchReceiverParameter(@Nullable ReceiverParameterDescriptor dispatchReceiverParameter) { + this.dispatchReceiverParameter = dispatchReceiverParameter; + return this; + } + @Override @NotNull public CopyConfiguration setOriginal(@NotNull FunctionDescriptor original) { @@ -436,6 +445,13 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo return this; } + @NotNull + @Override + public CopyConfiguration setSubstitution(@NotNull TypeSubstitution substitution) { + this.substitution = substitution; + return this; + } + @Override @Nullable public FunctionDescriptor build() { @@ -498,7 +514,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo } ReceiverParameterDescriptor substitutedExpectedThis = null; - if (dispatchReceiverParameter != null) { + if (configuration.dispatchReceiverParameter != null) { // When generating fake-overridden member it's dispatch receiver parameter has type of Base, and it's correct. // E.g. // class Base { fun foo() } @@ -509,7 +525,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo // // but it would if fake-overridden `foo` had `Derived` as it's dispatch receiver parameter type // x.foo() // } - substitutedExpectedThis = dispatchReceiverParameter.substitute(substitutor); + substitutedExpectedThis = configuration.dispatchReceiverParameter.substitute(substitutor); if (substitutedExpectedThis == null) { return null; } diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/error/ErrorSimpleFunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/types/error/ErrorSimpleFunctionDescriptorImpl.java index 390681db386..42138381c6f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/error/ErrorSimpleFunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/error/ErrorSimpleFunctionDescriptorImpl.java @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.types.ErrorUtils; import org.jetbrains.kotlin.types.KotlinType; +import org.jetbrains.kotlin.types.TypeSubstitution; import java.util.Collection; import java.util.List; @@ -103,6 +104,12 @@ public class ErrorSimpleFunctionDescriptorImpl extends SimpleFunctionDescriptorI return this; } + @NotNull + @Override + public CopyBuilder setSubstitution(@NotNull TypeSubstitution substitution) { + return this; + } + @NotNull @Override public CopyBuilder setTypeParameters(@NotNull List parameters) { @@ -121,6 +128,12 @@ public class ErrorSimpleFunctionDescriptorImpl extends SimpleFunctionDescriptorI return this; } + @NotNull + @Override + public CopyBuilder setDispatchReceiverParameter(@Nullable ReceiverParameterDescriptor dispatchReceiverParameter) { + return this; + } + @NotNull @Override public CopyBuilder setOriginal(@NotNull FunctionDescriptor original) { diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AdditionalClassPartsProvider.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AdditionalClassPartsProvider.kt index ca1b9039bc4..a843c53c561 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AdditionalClassPartsProvider.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AdditionalClassPartsProvider.kt @@ -16,13 +16,19 @@ package org.jetbrains.kotlin.serialization.deserialization +import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor import org.jetbrains.kotlin.types.KotlinType interface AdditionalClassPartsProvider { fun getSupertypes(classDescriptor: DeserializedClassDescriptor): Collection + fun getFunctions(name: Name, classDescriptor: DeserializedClassDescriptor): Collection + fun getFunctionsNames(classDescriptor: DeserializedClassDescriptor): Collection object None : AdditionalClassPartsProvider { override fun getSupertypes(classDescriptor: DeserializedClassDescriptor): Collection = emptyList() + override fun getFunctions(name: Name, classDescriptor: DeserializedClassDescriptor): Collection = emptyList() + override fun getFunctionsNames(classDescriptor: DeserializedClassDescriptor): Collection = emptyList() } } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt index 03e0b254399..cfd18790a78 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt @@ -199,6 +199,8 @@ class DeserializedClassDescriptor( for (supertype in classDescriptor.getTypeConstructor().supertypes) { fromSupertypes.addAll(supertype.memberScope.getContributedFunctions(name, NoLookupLocation.FOR_ALREADY_TRACKED)) } + + functions.addAll(c.components.additionalClassPartsProvider.getFunctions(name, this@DeserializedClassDescriptor)) generateFakeOverrides(name, fromSupertypes, functions) } @@ -229,7 +231,7 @@ class DeserializedClassDescriptor( override fun getNonDeclaredFunctionNames(location: LookupLocation): Set { return classDescriptor.typeConstructor.supertypes.flatMapTo(LinkedHashSet()) { it.memberScope.getContributedDescriptors().filterIsInstance().map { it.name } - } + } + c.components.additionalClassPartsProvider.getFunctionsNames(this@DeserializedClassDescriptor) } override fun getNonDeclaredVariableNames(location: LookupLocation): Set { diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/SmartSet.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/SmartSet.kt index 8a9d12034c0..7ea5f029ea1 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/SmartSet.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/SmartSet.kt @@ -33,7 +33,7 @@ class SmartSet private constructor() : AbstractSet() { fun create() = SmartSet() @JvmStatic - fun create(set: Set) = SmartSet().apply { this.addAll(set) } + fun create(set: Collection) = SmartSet().apply { this.addAll(set) } } // null if size = 0, object if size = 1, array of objects if size < threshold, linked hash set otherwise diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index e1761a508d0..da390c442ac 100644 --- a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -362,8 +362,11 @@ fun main(args: Array) { testClass() { model("loadJava8/compiledJava", extension = "java", excludeDirs = listOf("sam", "kotlinSignature/propagation")) } - } + testClass() { + model("compileKotlinAgainstKotlinJava8") + } + } testGroup("idea/tests", "idea/testData") { testClass() { @@ -874,6 +877,10 @@ fun main(args: Array) { testClass("org.jetbrains.kotlin.idea.completion.test.KDocCompletionTestGenerated") { model("kdoc") } + + testClass() { + model("basic/java8") + } } //TODO: move these tests into idea-completion module diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt index c68777011df..571a6b734d5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.caches.resolve import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.project.Project +import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.roots.ProjectRootModificationTracker import com.intellij.openapi.util.ModificationTracker import com.intellij.psi.util.CachedValue @@ -44,8 +45,8 @@ import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.diagnostics.KotlinSuppressCache import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import org.jetbrains.kotlin.utils.addToStdlib.sumByLong -import org.jetbrains.kotlin.utils.keysToMap internal val LOG = Logger.getInstance(KotlinCacheService::class.java) @@ -56,14 +57,20 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { override fun getSuppressionCache(): KotlinSuppressCache = kotlinSuppressCache.value - private val globalFacadesPerPlatform = listOf(JvmPlatform, JsPlatform).keysToMap { platform -> GlobalFacade(platform) } + private val globalFacadesPerPlatformAndSdk: SLRUCache, GlobalFacade> = + object : SLRUCache, GlobalFacade>(2 * 3, 2 * 3) { + override fun createValue(key: Pair): GlobalFacade { + return GlobalFacade(key.first, key.second) + } + } - private inner class GlobalFacade(platform: TargetPlatform) { + private inner class GlobalFacade(platform: TargetPlatform, sdk: Sdk?) { val facadeForLibraries = ProjectResolutionFacade(project) { globalResolveSessionProvider( "project libraries for platform $platform", project, platform, + sdk, logProcessCanceled = true, moduleFilter = { it.isLibraryClasses() }, dependencies = listOf( @@ -78,6 +85,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { "project source roots and libraries for platform $platform", project, platform, + sdk, reuseDataFrom = facadeForLibraries, moduleFilter = { !it.isLibraryClasses() }, dependencies = listOf(PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT)) @@ -86,17 +94,24 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { @Deprecated("Use JetElement.getResolutionFacade(), please avoid introducing new usages") fun getProjectService(platform: TargetPlatform, ideaModuleInfo: IdeaModuleInfo, serviceClass: Class): T { - return globalFacade(platform).resolverForModuleInfo(ideaModuleInfo).componentProvider.getService(serviceClass) + return globalFacade(platform, ideaModuleInfo.sdk).resolverForModuleInfo(ideaModuleInfo).componentProvider.getService(serviceClass) } - private fun globalFacade(platform: TargetPlatform) = globalFacadesPerPlatform[platform]!!.facadeForModules + private fun globalFacade(platform: TargetPlatform, sdk: Sdk?) = + getOrBuildGlobalFacade(platform, sdk).facadeForModules - private fun librariesFacade(platform: TargetPlatform) = globalFacadesPerPlatform[platform]!!.facadeForLibraries + private fun librariesFacade(platform: TargetPlatform, sdk: Sdk?) = getOrBuildGlobalFacade(platform, sdk).facadeForLibraries + + @Synchronized + private fun getOrBuildGlobalFacade(platform: TargetPlatform, sdk: Sdk?) = globalFacadesPerPlatformAndSdk[Pair(platform, sdk)] + + private val IdeaModuleInfo.sdk: Sdk? get() = dependencies().firstIsInstanceOrNull()?.sdk private fun createFacadeForSyntheticFiles(files: Set): ProjectResolutionFacade { // we assume that all files come from the same module val targetPlatform = files.map { TargetPlatformDetector.getPlatform(it) }.toSet().single() val syntheticFileModule = files.map { it.getModuleInfo() }.toSet().single() + val sdk = syntheticFileModule.sdk val filesModificationTracker = ModificationTracker { files.sumByLong { it.outOfBlockModificationCount } } @@ -110,8 +125,9 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { debugName, project, targetPlatform, + sdk, syntheticFiles = files, - reuseDataFrom = globalFacade(targetPlatform), + reuseDataFrom = globalFacade(targetPlatform, sdk), moduleFilter = { it in dependentModules }, dependencies = dependenciesForSyntheticFileCache ) @@ -124,8 +140,9 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { debugName, project, targetPlatform, + sdk, syntheticFiles = files, - reuseDataFrom = librariesFacade(targetPlatform), + reuseDataFrom = librariesFacade(targetPlatform, sdk), moduleFilter = { it == syntheticFileModule }, dependencies = dependenciesForSyntheticFileCache ) @@ -142,6 +159,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { debugName, project, targetPlatform, + sdk, syntheticFiles = files, moduleFilter = { true }, dependencies = dependenciesForSyntheticFileCache @@ -201,13 +219,14 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { private fun getFacadeToAnalyzeFiles(files: Collection): ResolutionFacade { val syntheticFiles = findSyntheticFiles(files) val file = files.first() + val moduleInfo = file.getModuleInfo() val projectFacade = if (syntheticFiles.isNotEmpty()) { getFacadeForSyntheticFiles(syntheticFiles) } else { - globalFacade(TargetPlatformDetector.getPlatform(file)) + globalFacade(TargetPlatformDetector.getPlatform(file), moduleInfo.sdk) } - return ResolutionFacadeImpl(projectFacade, file.getModuleInfo()) + return ResolutionFacadeImpl(projectFacade, moduleInfo) } private fun findSyntheticFiles(files: Collection) = files.mapNotNull { @@ -228,6 +247,7 @@ private fun globalResolveSessionProvider( debugName: String, project: Project, platform: TargetPlatform, + sdk: Sdk?, dependencies: Collection, moduleFilter: (IdeaModuleInfo) -> Boolean, reuseDataFrom: ProjectResolutionFacade? = null, @@ -242,16 +262,24 @@ private fun globalResolveSessionProvider( val builtIns: KotlinBuiltIns = when (platform) { is JsPlatform -> JsPlatform.builtIns - is JvmPlatform -> JvmBuiltIns.Instance + is JvmPlatform -> JvmBuiltIns(globalContext.storageManager) else -> DefaultBuiltIns.Instance } val moduleResolverProvider = createModuleResolverProvider( - debugName, project, globalContext, + debugName, project, globalContext, sdk, AnalyzerFacadeProvider.getAnalyzerFacade(platform), syntheticFiles, delegateResolverForProject, moduleFilter, builtIns ) + + if (builtIns is JvmBuiltIns) { + val moduleInfoToUse = sdk?.let { SdkInfo(project, it) } ?: moduleResolverProvider.resolverForProject.allModules.firstOrNull() + if (moduleInfoToUse != null) { + builtIns.setOwnerModuleDescriptor(moduleResolverProvider.resolverForProject.descriptorForModule(moduleInfoToUse)) + } + } + val allDependencies = dependencies + listOf(moduleResolverProvider.exceptionTracker) return CachedValueProvider.Result.create(moduleResolverProvider, allDependencies) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt index 259eb5452c2..fc38ae4b7b6 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.caches.resolve import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.project.Project +import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.roots.JdkOrderEntry import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.ModuleRootManager @@ -38,6 +39,7 @@ fun createModuleResolverProvider( debugName: String, project: Project, globalContext: GlobalContextImpl, + sdk: Sdk?, analyzerFacade: AnalyzerFacade, syntheticFiles: Collection, delegateResolver: ResolverForProject, @@ -67,7 +69,8 @@ fun createModuleResolverProvider( val resolverForProject = analyzerFacade.setupResolverForProject( debugName, globalContext.withProject(project), modulesToCreateResolversFor, modulesContent, jvmPlatformParameters, IdeaEnvironment, builtIns, - delegateResolver, { m, c -> IDEPackagePartProvider(c.moduleContentScope) } + delegateResolver, { m, c -> IDEPackagePartProvider(c.moduleContentScope) }, + sdk?.let { SdkInfo(project, it) } ) return resolverForProject } diff --git a/idea/idea-completion/testData/basic/java8/CollectionMethods.kt b/idea/idea-completion/testData/basic/java8/CollectionMethods.kt new file mode 100644 index 00000000000..99474ad5c37 --- /dev/null +++ b/idea/idea-completion/testData/basic/java8/CollectionMethods.kt @@ -0,0 +1,7 @@ +fun foo(x: MutableList) { + x. +} + +// EXIST: {"lookupString":"stream","tailText":"()","typeText":"Stream!"} +// EXIST: {"lookupString":"removeIf","tailText":"(Predicate!)","typeText":"Boolean"} +// EXIST: {"lookupString":"removeIf","tailText":" {...} (((String!) -> Boolean)!)","typeText":"Boolean"} diff --git a/idea/idea-completion/testData/basic/java8/StreamMethods.kt b/idea/idea-completion/testData/basic/java8/StreamMethods.kt new file mode 100644 index 00000000000..0395cf72806 --- /dev/null +++ b/idea/idea-completion/testData/basic/java8/StreamMethods.kt @@ -0,0 +1,7 @@ +fun foo(x: List) { + x.stream(). +} + +// EXIST: {"lookupString":"allMatch","tailText":" {...} (((String!) -> Boolean)!)","typeText":"Boolean","attributes":"bold"} +// EXIST: {"lookupString":"allMatch","tailText":"(Predicate!)","typeText":"Boolean","attributes":"bold"} +// EXIST: {"lookupString":"count","tailText":"()","typeText":"Long","attributes":"bold"} diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJava8BasicCompletionTest.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJava8BasicCompletionTest.java new file mode 100644 index 00000000000..a787d70b136 --- /dev/null +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJava8BasicCompletionTest.java @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.completion.test; + +import com.intellij.testFramework.LightProjectDescriptor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor; + +public abstract class AbstractJava8BasicCompletionTest extends AbstractJvmBasicCompletionTest { + @NotNull + @Override + protected LightProjectDescriptor getProjectDescriptor() { + return KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE_FULL_JDK; + } +} diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/Java8BasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/Java8BasicCompletionTestGenerated.java new file mode 100644 index 00000000000..b95facbdf7b --- /dev/null +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/Java8BasicCompletionTestGenerated.java @@ -0,0 +1,49 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.completion.test; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("idea/idea-completion/testData/basic/java8") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class Java8BasicCompletionTestGenerated extends AbstractJava8BasicCompletionTest { + public void testAllFilesPresentInJava8() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/idea-completion/testData/basic/java8"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("CollectionMethods.kt") + public void testCollectionMethods() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/java8/CollectionMethods.kt"); + doTest(fileName); + } + + @TestMetadata("StreamMethods.kt") + public void testStreamMethods() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/java8/StreamMethods.kt"); + doTest(fileName); + } +} diff --git a/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/KotlinWithJdkAndRuntimeLightProjectDescriptor.java b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/KotlinWithJdkAndRuntimeLightProjectDescriptor.java index bb3ae49b9d5..892386fb296 100644 --- a/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/KotlinWithJdkAndRuntimeLightProjectDescriptor.java +++ b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/KotlinWithJdkAndRuntimeLightProjectDescriptor.java @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.test; +import com.intellij.openapi.projectRoots.Sdk; import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime; public class KotlinWithJdkAndRuntimeLightProjectDescriptor extends KotlinJdkAndLibraryProjectDescriptor { @@ -24,4 +25,10 @@ public class KotlinWithJdkAndRuntimeLightProjectDescriptor extends KotlinJdkAndL } public static final KotlinWithJdkAndRuntimeLightProjectDescriptor INSTANCE = new KotlinWithJdkAndRuntimeLightProjectDescriptor(); + public static final KotlinWithJdkAndRuntimeLightProjectDescriptor INSTANCE_FULL_JDK = new KotlinWithJdkAndRuntimeLightProjectDescriptor() { + @Override + public Sdk getSdk() { + return PluginTestCaseBase.fullJdk(); + } + }; } diff --git a/idea/testData/codeInsight/overrideImplement/jdk8/overrideCollectionStream.kt b/idea/testData/codeInsight/overrideImplement/jdk8/overrideCollectionStream.kt new file mode 100644 index 00000000000..8837b7c0338 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/jdk8/overrideCollectionStream.kt @@ -0,0 +1,3 @@ +abstract class A : List { + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/jdk8/overrideCollectionStream.kt.after b/idea/testData/codeInsight/overrideImplement/jdk8/overrideCollectionStream.kt.after new file mode 100644 index 00000000000..6203ab08603 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/jdk8/overrideCollectionStream.kt.after @@ -0,0 +1,7 @@ +import java.util.stream.Stream + +abstract class A : List { + override fun stream(): Stream? { + return super.stream() + } +} diff --git a/idea/testData/multiModuleHighlighting/differentJdk/jdk8/main.kt b/idea/testData/multiModuleHighlighting/differentJdk/jdk8/main.kt new file mode 100644 index 00000000000..d98701d5657 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/differentJdk/jdk8/main.kt @@ -0,0 +1,13 @@ +package foo + +fun mainJdk8(x: List, j6List: Jdk6List) { + x.stream().filter { it.length > 0 } + + j6List.size + // TODO: stream should be available + j6List.stream() + + buildList().stream() + + myFile().toPath() +} diff --git a/idea/testData/multiModuleHighlighting/differentJdk/mockJdk/main.kt b/idea/testData/multiModuleHighlighting/differentJdk/mockJdk/main.kt new file mode 100644 index 00000000000..35f0677f0ce --- /dev/null +++ b/idea/testData/multiModuleHighlighting/differentJdk/mockJdk/main.kt @@ -0,0 +1,54 @@ +package foo +import java.io.File + +class Jdk6List : List { + override val size: Int + get() = null!! + + override fun contains(element: F): Boolean { + null!! + } + + override fun containsAll(elements: Collection): Boolean { + null!! + } + + override fun get(index: Int): F { + null!! + } + + override fun indexOf(element: F): Int { + null!! + } + + override fun isEmpty(): Boolean { + null!! + } + + override fun iterator(): Iterator { + null!! + } + + override fun lastIndexOf(element: F): Int { + null!! + } + + override fun listIterator(): ListIterator { + null!! + } + + override fun listIterator(index: Int): ListIterator { + null!! + } + + override fun subList(fromIndex: Int, toIndex: Int): List { + null!! + } +} + +fun buildList(): List = null!! +fun myFile(): File = null!! + +fun mainJdk6(x: List) { + x.stream().filter { it.length > 0 } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt new file mode 100644 index 00000000000..abd70f4bcae --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt @@ -0,0 +1,81 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.caches.resolve + +import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import com.intellij.openapi.module.StdModuleTypes +import com.intellij.openapi.roots.ModuleRootModificationUtil +import org.jetbrains.kotlin.idea.project.PluginJetFilesProvider +import com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase +import com.intellij.openapi.module.Module +import com.intellij.openapi.vfs.LocalFileSystem +import com.intellij.openapi.command.WriteCommandAction +import com.intellij.testFramework.PsiTestUtil +import java.io.File +import com.intellij.openapi.util.io.FileUtil +import com.intellij.openapi.roots.DependencyScope +import com.intellij.testFramework.IdeaTestUtil +import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil +import org.junit.Assert + +abstract class AbstractMultiModuleHighlightingTest : DaemonAnalyzerTestCase() { + + private val TEST_DATA_PATH = PluginTestCaseBase.getTestDataPathBase() + "/multiModuleHighlighting/" + + protected fun checkHighlightingInAllFiles() { + var atLeastOneFile = false + PluginJetFilesProvider.allFilesInProject(myProject!!).forEach { file -> + atLeastOneFile = true + configureByExistingFile(file.virtualFile!!) + checkHighlighting(myEditor, true, false) + } + Assert.assertTrue(atLeastOneFile) + } + + protected fun module(name: String, hasTestRoot: Boolean = false, useFullJdk: Boolean = false): Module { + val srcDir = TEST_DATA_PATH + "${getTestName(true)}/$name" + val moduleWithSrcRootSet = createModuleFromTestData(srcDir, "$name", StdModuleTypes.JAVA, true)!! + if (hasTestRoot) { + setTestRoot(moduleWithSrcRootSet, name) + } + + val jdkToUse = if (useFullJdk) PluginTestCaseBase.fullJdk() else PluginTestCaseBase.mockJdk() + ConfigLibraryUtil.configureSdk(moduleWithSrcRootSet, jdkToUse) + + return moduleWithSrcRootSet + } + + protected fun setTestRoot(module: Module, name: String) { + val testDir = TEST_DATA_PATH + "${getTestName(true)}/${name}Test" + val testRootDirInTestData = File(testDir) + val testRootDir = createTempDirectory()!! + FileUtil.copyDir(testRootDirInTestData, testRootDir) + val testRoot = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(testRootDir)!! + object : WriteCommandAction.Simple(project) { + override fun run() { + testRoot.refresh(false, true) + } + }.execute().throwException() + PsiTestUtil.addSourceRoot(module, testRoot, true) + } + + protected fun Module.addDependency( + other: Module, + dependencyScope: DependencyScope = DependencyScope.COMPILE, + exported: Boolean = false + ) = ModuleRootModificationUtil.addDependency(this, other, dependencyScope, exported) +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt new file mode 100644 index 00000000000..a69c60a4f87 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.caches.resolve + +class Java8MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { + fun testDifferentJdk() { + val module1 = module("jdk8", useFullJdk = true) + val module2 = module("mockJdk") + + module1.addDependency(module2) + + checkHighlightingInAllFiles() + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt index 02ac9cb52e0..0a67d176e46 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt @@ -16,24 +16,9 @@ package org.jetbrains.kotlin.idea.caches.resolve -import org.jetbrains.kotlin.idea.test.PluginTestCaseBase -import com.intellij.openapi.module.StdModuleTypes -import com.intellij.openapi.roots.ModuleRootModificationUtil -import org.jetbrains.kotlin.idea.project.PluginJetFilesProvider -import com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase -import com.intellij.openapi.module.Module -import com.intellij.openapi.vfs.LocalFileSystem -import com.intellij.openapi.command.WriteCommandAction -import com.intellij.testFramework.PsiTestUtil -import java.io.File -import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.roots.DependencyScope -import org.junit.Assert - -class MultiModuleHighlightingTest : DaemonAnalyzerTestCase() { - - private val TEST_DATA_PATH = PluginTestCaseBase.getTestDataPathBase() + "/multiModuleHighlighting/" +class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { fun testVisibility() { val module1 = module("m1") val module2 = module("m2") @@ -73,43 +58,4 @@ class MultiModuleHighlightingTest : DaemonAnalyzerTestCase() { checkHighlightingInAllFiles() } - - private fun checkHighlightingInAllFiles() { - var atLeastOneFile = false - PluginJetFilesProvider.allFilesInProject(myProject!!).forEach { file -> - atLeastOneFile = true - configureByExistingFile(file.virtualFile!!) - checkHighlighting(myEditor, true, false) - } - Assert.assertTrue(atLeastOneFile) - } - - private fun module(name: String, hasTestRoot: Boolean = false): Module { - val srcDir = TEST_DATA_PATH + "${getTestName(true)}/$name" - val moduleWithSrcRootSet = createModuleFromTestData(srcDir, "$name", StdModuleTypes.JAVA, true)!! - if (hasTestRoot) { - setTestRoot(moduleWithSrcRootSet, name) - } - return moduleWithSrcRootSet - } - - private fun setTestRoot(module: Module, name: String) { - val testDir = TEST_DATA_PATH + "${getTestName(true)}/${name}Test" - val testRootDirInTestData = File(testDir) - val testRootDir = createTempDirectory()!! - FileUtil.copyDir(testRootDirInTestData, testRootDir) - val testRoot = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(testRootDir)!! - object : WriteCommandAction.Simple(project) { - override fun run() { - testRoot.refresh(false, true) - } - }.execute().throwException() - PsiTestUtil.addSourceRoot(module, testRoot, true) - } - - private fun Module.addDependency( - other: Module, - dependencyScope: DependencyScope = DependencyScope.COMPILE, - exported: Boolean = false - ) = ModuleRootModificationUtil.addDependency(this, other, dependencyScope, exported) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/Java8OverrideImplementTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/Java8OverrideImplementTest.kt new file mode 100644 index 00000000000..9b4576c74cd --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/Java8OverrideImplementTest.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.codeInsight + +import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor +import org.jetbrains.kotlin.idea.test.PluginTestCaseBase + +class Java8OverrideImplementTest : AbstractOverrideImplementTest() { + companion object { + private val TEST_PATH = PluginTestCaseBase.getTestDataPathBase() + "/codeInsight/overrideImplement/jdk8" + } + + override fun setUp() { + super.setUp() + myFixture.testDataPath = TEST_PATH + } + + override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE_FULL_JDK + + fun testOverrideCollectionStream() { + doOverrideFileTest("stream") + } +} diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.java b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.java index 195a287ee30..510f20b7909 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.java @@ -48,7 +48,7 @@ public final class TopDownAnalyzerFacadeForJS { BindingTrace trace = new BindingTraceContext(); MutableModuleContext newModuleContext = ContextKt.ContextForNewModule( - config.getProject(), Name.special("<" + config.getModuleId() + ">"), JsPlatform.INSTANCE, + ContextKt.ProjectContext(config.getProject()), Name.special("<" + config.getModuleId() + ">"), JsPlatform.INSTANCE, JsPlatform.INSTANCE.getBuiltIns() ); newModuleContext.setDependencies(computeDependencies(newModuleContext.getModule(), config));