diff --git a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.java b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.java index 6d894206dcd..0ae486ce0fe 100644 --- a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.java +++ b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.java @@ -50,7 +50,7 @@ public class CodegenUtil { @NotNull ClassifierDescriptor returnedClassifier, @NotNull ClassifierDescriptor... valueParameterClassifiers ) { - Collection functions = owner.getDefaultType().getMemberScope().getContributedFunctions(name, NoLookupLocation.FROM_BACKEND); + Collection functions = owner.getDefaultType().getMemberScope().getContributedFunctions(name, NoLookupLocation.FROM_BACKEND); for (FunctionDescriptor function : functions) { if (!CallResolverUtilKt.isOrOverridesSynthesized(function) && function.getTypeParameters().isEmpty() diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java index ae09bdafc46..321dcbb852f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java @@ -413,7 +413,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } private boolean isGenericToArrayPresent() { - Collection functions = + Collection functions = descriptor.getDefaultType().getMemberScope().getContributedFunctions(Name.identifier("toArray"), NoLookupLocation.FROM_BACKEND); for (FunctionDescriptor function : functions) { if (CallResolverUtilKt.isOrOverridesSynthesized(function)) { diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java index d167592b365..e484611b83a 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java @@ -203,7 +203,7 @@ public class SignaturesPropagationData { Method autoSignature = null; boolean autoMethodContainsVararg = SignaturePropagationUtilKt.containsVarargs(autoMethodDescriptor); for (KotlinType supertype : containingClass.getTypeConstructor().getSupertypes()) { - Collection superFunctionCandidates = + Collection superFunctionCandidates = supertype.getMemberScope().getContributedFunctions(name, NoLookupLocation.WHEN_GET_SUPER_MEMBERS); if (!autoMethodContainsVararg && !SignaturePropagationUtilKt.containsAnyNotTrivialSignature(superFunctionCandidates)) continue; diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt index 44af44ad0f6..cdc99924c7a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt @@ -46,7 +46,7 @@ class DynamicCallableDescriptors(private val builtIns: KotlinBuiltIns) { p.println(javaClass.simpleName, ": dynamic candidates for " + call) } - override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { if (isAugmentedAssignmentConvention(name)) return listOf() if (call.callType == Call.CallType.INVOKE && call.valueArgumentList == null && call.functionLiteralArguments.isEmpty()) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt index 30e6593fe41..907e67dc95a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt @@ -17,10 +17,7 @@ package org.jetbrains.kotlin.resolve.lazy.descriptors import com.google.common.collect.Sets -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.incremental.record import org.jetbrains.kotlin.name.Name @@ -49,7 +46,7 @@ protected constructor( protected val storageManager: StorageManager = c.storageManager private val classDescriptors: MemoizedFunctionToNotNull> = storageManager.createMemoizedFunction { resolveClassDescriptor(it) } - private val functionDescriptors: MemoizedFunctionToNotNull> = storageManager.createMemoizedFunction { doGetFunctions(it) } + private val functionDescriptors: MemoizedFunctionToNotNull> = storageManager.createMemoizedFunction { doGetFunctions(it) } private val propertyDescriptors: MemoizedFunctionToNotNull> = storageManager.createMemoizedFunction { doGetProperties(it) } private fun resolveClassDescriptor(name: Name): List { @@ -66,13 +63,13 @@ protected constructor( return classDescriptors(name).firstOrNull() } - override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { recordLookup(name, location) return functionDescriptors(name) } - private fun doGetFunctions(name: Name): Collection { - val result = Sets.newLinkedHashSet() + private fun doGetFunctions(name: Name): Collection { + val result = Sets.newLinkedHashSet() val declarations = declarationProvider.getFunctionDeclarations(name) for (functionDeclaration in declarations) { @@ -92,7 +89,7 @@ protected constructor( protected abstract fun getScopeForMemberDeclarationResolution(declaration: KtDeclaration): LexicalScope - protected abstract fun getNonDeclaredFunctions(name: Name, result: MutableSet) + protected abstract fun getNonDeclaredFunctions(name: Name, result: MutableSet) override fun getContributedVariables(name: Name, location: LookupLocation): Collection { recordLookup(name, location) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassMemberScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassMemberScope.kt index d9beb6de3ce..99457e76bf7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassMemberScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassMemberScope.kt @@ -120,26 +120,26 @@ open class LazyClassMemberScope( OverrideResolver.resolveUnknownVisibilities(result, trace) } - override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { // TODO: this should be handled by lazy function descriptors val functions = super.getContributedFunctions(name, location) resolveUnknownVisibilitiesForMembers(functions) return functions } - override fun getNonDeclaredFunctions(name: Name, result: MutableSet) { + override fun getNonDeclaredFunctions(name: Name, result: MutableSet) { val location = NoLookupLocation.FOR_ALREADY_TRACKED - val fromSupertypes = Lists.newArrayList() + val fromSupertypes = Lists.newArrayList() for (supertype in thisDescriptor.typeConstructor.supertypes) { fromSupertypes.addAll(supertype.memberScope.getContributedFunctions(name, location)) } result.addAll(generateDelegatingDescriptors(name, EXTRACT_FUNCTIONS, result)) generateDataClassMethods(result, name, location) - generateFakeOverrides(name, fromSupertypes, result, FunctionDescriptor::class.java) + generateFakeOverrides(name, fromSupertypes, result, SimpleFunctionDescriptor::class.java) } - private fun generateDataClassMethods(result: MutableCollection, name: Name, location: LookupLocation) { + private fun generateDataClassMethods(result: MutableCollection, name: Name, location: LookupLocation) { if (!thisDescriptor.isData) return val constructor = getPrimaryConstructor() ?: return @@ -319,8 +319,8 @@ open class LazyClassMemberScope( override fun toString() = "lazy scope for class ${thisDescriptor.name}" companion object { - private val EXTRACT_FUNCTIONS: MemberExtractor = object : MemberExtractor { - override fun extract(extractFrom: KotlinType, name: Name): Collection { + private val EXTRACT_FUNCTIONS: MemberExtractor = object : MemberExtractor { + override fun extract(extractFrom: KotlinType, name: Name): Collection { return extractFrom.memberScope.getContributedFunctions(name, NoLookupLocation.FOR_ALREADY_TRACKED) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyPackageMemberScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyPackageMemberScope.kt index b7b95b0b119..537c1b0b9c7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyPackageMemberScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyPackageMemberScope.kt @@ -37,7 +37,7 @@ class LazyPackageMemberScope( override fun getScopeForMemberDeclarationResolution(declaration: KtDeclaration) = resolveSession.fileScopeProvider.getFileResolutionScope(declaration.getContainingKtFile()) - override fun getNonDeclaredFunctions(name: Name, result: MutableSet) { + override fun getNonDeclaredFunctions(name: Name, result: MutableSet) { // No extra functions } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DataFlowAnalyzer.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DataFlowAnalyzer.java index 0b4c170e3bf..ef6a899e22a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DataFlowAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DataFlowAnalyzer.java @@ -87,7 +87,7 @@ public class DataFlowAnalyzer { } private static boolean typeHasOverriddenEquals(@NotNull KotlinType type, @NotNull KtElement lookupElement) { - Collection members = type.getMemberScope().getContributedFunctions( + Collection members = type.getMemberScope().getContributedFunctions( OperatorNameConventions.EQUALS, new KotlinLookupLocation(lookupElement)); for (FunctionDescriptor member : members) { KotlinType returnType = member.getReturnType(); diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/annotation/AbstractAnnotationDescriptorResolveTest.java b/compiler/tests/org/jetbrains/kotlin/resolve/annotation/AbstractAnnotationDescriptorResolveTest.java index b9c6486986b..870a50f3575 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/annotation/AbstractAnnotationDescriptorResolveTest.java +++ b/compiler/tests/org/jetbrains/kotlin/resolve/annotation/AbstractAnnotationDescriptorResolveTest.java @@ -169,7 +169,7 @@ public abstract class AbstractAnnotationDescriptorResolveTest extends KotlinTest protected static FunctionDescriptor getFunctionDescriptor(@NotNull PackageFragmentDescriptor packageView, @NotNull String name) { Name functionName = Name.identifier(name); MemberScope memberScope = packageView.getMemberScope(); - Collection functions = memberScope.getContributedFunctions(functionName, NoLookupLocation.FROM_TEST); + Collection functions = memberScope.getContributedFunctions(functionName, NoLookupLocation.FROM_TEST); assert functions.size() == 1 : "Failed to find function " + functionName + " in class" + "." + packageView.getName(); return functions.iterator().next(); } @@ -178,7 +178,7 @@ public abstract class AbstractAnnotationDescriptorResolveTest extends KotlinTest private static FunctionDescriptor getFunctionDescriptor(@NotNull ClassDescriptor classDescriptor, @NotNull String name) { Name functionName = Name.identifier(name); MemberScope memberScope = classDescriptor.getMemberScope(Collections.emptyList()); - Collection functions = memberScope.getContributedFunctions(functionName, NoLookupLocation.FROM_TEST); + Collection functions = memberScope.getContributedFunctions(functionName, NoLookupLocation.FROM_TEST); assert functions.size() == 1 : "Failed to find function " + functionName + " in class" + "." + classDescriptor.getName(); return functions.iterator().next(); } diff --git a/compiler/tests/org/jetbrains/kotlin/types/BoundsSubstitutorTest.java b/compiler/tests/org/jetbrains/kotlin/types/BoundsSubstitutorTest.java index 0883fc088cb..785ea39577e 100644 --- a/compiler/tests/org/jetbrains/kotlin/types/BoundsSubstitutorTest.java +++ b/compiler/tests/org/jetbrains/kotlin/types/BoundsSubstitutorTest.java @@ -20,6 +20,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; import org.jetbrains.kotlin.descriptors.FunctionDescriptor; import org.jetbrains.kotlin.descriptors.ModuleDescriptor; +import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor; import org.jetbrains.kotlin.incremental.components.NoLookupLocation; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.Name; @@ -72,7 +73,7 @@ public class BoundsSubstitutorTest extends KotlinTestWithEnvironment { private void doTest(String text, String expected) { KtFile jetFile = KtPsiFactoryKt.KtPsiFactory(getProject()).createFile("fun.kt", text); ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(Collections.singletonList(jetFile), getEnvironment()); - Collection functions = + Collection functions = module.getPackage(FqName.ROOT).getMemberScope().getContributedFunctions(Name.identifier("f"), NoLookupLocation.FROM_TEST); assert functions.size() == 1 : "Many functions defined"; FunctionDescriptor function = ContainerUtil.getFirstItem(functions); diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt index 534f4ccb46c..bf071940701 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt @@ -138,7 +138,7 @@ class LazyJavaPackageScope( return deserializedPackageScope.getContributedVariables(name, NoLookupLocation.FOR_ALREADY_TRACKED) } - override fun getContributedFunctions(name: Name, location: LookupLocation): List { + override fun getContributedFunctions(name: Name, location: LookupLocation): List { // We should track lookups here because this scope can be used for kotlin packages too (if it doesn't contain toplevel properties nor functions). recordLookup(name, location) return deserializedPackageScope.getContributedFunctions(name, NoLookupLocation.FOR_ALREADY_TRACKED) + super.getContributedFunctions(name, NoLookupLocation.FOR_ALREADY_TRACKED) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt index 0488f9390c8..73e7478daf6 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt @@ -72,7 +72,7 @@ abstract class LazyJavaScope(protected val c: LazyJavaResolverContext) : MemberS protected abstract fun getDispatchReceiverParameter(): ReceiverParameterDescriptor? - private val functions = c.storageManager.createMemoizedFunction> { + private val functions = c.storageManager.createMemoizedFunction> { name -> val result = LinkedHashSet() @@ -214,7 +214,7 @@ abstract class LazyJavaScope(protected val c: LazyJavaResolverContext) : MemberS return ResolvedValueParameters(descriptors, synthesizedNames) } - override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { recordLookup(name, location) return functions(name) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassScope.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassScope.kt index 546ed4b9508..4f54bccde4f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassScope.kt @@ -48,8 +48,8 @@ class FunctionClassScope( return allDescriptors() } - override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { - return allDescriptors().filterIsInstance().filter { it.name == name } + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { + return allDescriptors().filterIsInstance().filter { it.name == name } } override fun getContributedVariables(name: Name, location: LookupLocation): Collection { diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java index b02222aac96..e511bc8bc86 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java @@ -178,14 +178,14 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { } private class EnumEntryScope extends MemberScopeImpl { - private final MemoizedFunctionToNotNull> functions; + private final MemoizedFunctionToNotNull> functions; private final MemoizedFunctionToNotNull> properties; private final NotNullLazyValue> allDescriptors; public EnumEntryScope(@NotNull StorageManager storageManager) { - this.functions = storageManager.createMemoizedFunction(new Function1>() { + this.functions = storageManager.createMemoizedFunction(new Function1>() { @Override - public Collection invoke(Name name) { + public Collection invoke(Name name) { return computeFunctions(name); } }); @@ -206,25 +206,32 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { @NotNull @Override - @SuppressWarnings({"unchecked"}) // KT-9898 Impossible implement kotlin interface in java + // TODO: Convert to Kotlin or add @JvmWildcard to MemberScope declarations + // method is covariantly overridden in Kotlin, but collections in Java are invariant + @SuppressWarnings({"unchecked"}) public Collection getContributedVariables(@NotNull Name name, @NotNull LookupLocation location) { return properties.invoke(name); } @NotNull - @SuppressWarnings("unchecked") + // TODO: Convert to Kotlin or add @JvmWildcard to MemberScope declarations + // method is covariantly overridden in Kotlin, but collections in Java are invariant + @SuppressWarnings({"unchecked"}) private Collection computeProperties(@NotNull Name name) { return resolveFakeOverrides(name, (Collection) getSupertypeScope().getContributedVariables(name, NoLookupLocation.FOR_NON_TRACKED_SCOPE)); } @NotNull @Override - public Collection getContributedFunctions(@NotNull Name name, @NotNull LookupLocation location) { + // TODO: Convert to Kotlin or add @JvmWildcard to MemberScope declarations + // method is covariantly overridden in Kotlin, but collections in Java are invariant + @SuppressWarnings({"unchecked"}) + public Collection getContributedFunctions(@NotNull Name name, @NotNull LookupLocation location) { return functions.invoke(name); } @NotNull - private Collection computeFunctions(@NotNull Name name) { + private Collection computeFunctions(@NotNull Name name) { return resolveFakeOverrides(name, getSupertypeScope().getContributedFunctions(name, NoLookupLocation.FOR_NON_TRACKED_SCOPE)); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt index 1b54bc79561..bc4b0eb84aa 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt @@ -33,7 +33,7 @@ abstract class AbstractScopeAdapter : MemberScope { else workerScope - override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { return workerScope.getContributedFunctions(name, location) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt index d03daf3f576..47642a9bc44 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.resolve.scopes import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.util.collectionUtils.getFirstMatch @@ -35,7 +36,7 @@ class ChainedMemberScope( override fun getContributedVariables(name: Name, location: LookupLocation): Collection = getFromAllScopes(scopes) { it.getContributedVariables(name, location) } - override fun getContributedFunctions(name: Name, location: LookupLocation): Collection + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection = getFromAllScopes(scopes) { it.getContributedFunctions(name, location) } override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean) diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScope.kt index 63afbe5c5fe..174e639fcf6 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScope.kt @@ -26,6 +26,7 @@ import java.lang.reflect.Modifier interface MemberScope : ResolutionScope { override fun getContributedVariables(name: Name, location: LookupLocation): Collection + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection /** * Is supposed to be used in tests and debug only diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScopeImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScopeImpl.kt index cd3824693ed..c2cb4db8f62 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScopeImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScopeImpl.kt @@ -26,7 +26,7 @@ abstract class MemberScopeImpl : MemberScope { override fun getContributedVariables(name: Name, location: LookupLocation): Collection = emptyList() - override fun getContributedFunctions(name: Name, location: LookupLocation): Collection = emptyList() + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection = emptyList() override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection = emptyList() diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/StaticScopeForKotlinEnum.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/StaticScopeForKotlinEnum.kt index b1cb10c788b..962362d26f5 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/StaticScopeForKotlinEnum.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/StaticScopeForKotlinEnum.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.resolve.scopes import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValueOfMethod @@ -34,14 +35,14 @@ class StaticScopeForKotlinEnum(private val containingClass: ClassDescriptor) : M override fun getContributedClassifier(name: Name, location: LookupLocation) = null // TODO - private val functions: List by lazy { + private val functions: List by lazy { listOf(createEnumValueOfMethod(containingClass), createEnumValuesMethod(containingClass)) } override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean) = functions override fun getContributedFunctions(name: Name, location: LookupLocation) = - functions.filterTo(ArrayList(1)) { it.name == name } + functions.filterTo(ArrayList(1)) { it.name == name } override fun printScopeStructure(p: Printer) { p.println("Static scope for $containingClass") diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java index d447fb84282..e7a1e6aaee8 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java @@ -184,15 +184,20 @@ public class ErrorUtils { @NotNull @Override - @SuppressWarnings({"unchecked"}) // KT-9898 Impossible implement kotlin interface in java + // TODO: Convert to Kotlin or add @JvmWildcard to MemberScope declarations + // method is covariantly overridden in Kotlin, but collections in Java are invariant + @SuppressWarnings({"unchecked"}) public Set getContributedVariables(@NotNull Name name, @NotNull LookupLocation location) { return ERROR_PROPERTY_GROUP; } @NotNull @Override - public Set getContributedFunctions(@NotNull Name name, @NotNull LookupLocation location) { - return Collections.singleton(createErrorFunction(this)); + // TODO: Convert to Kotlin or add @JvmWildcard to MemberScope declarations + // method is covariantly overridden in Kotlin, but collections in Java are invariant + @SuppressWarnings({"unchecked"}) + public Set getContributedFunctions(@NotNull Name name, @NotNull LookupLocation location) { + return Collections.singleton(createErrorFunction(this)); } @NotNull @@ -236,7 +241,10 @@ public class ErrorUtils { @NotNull @Override - public Collection getContributedFunctions(@NotNull Name name, @NotNull LookupLocation location) { + // TODO: Convert to Kotlin or add @JvmWildcard to MemberScope declarations + // method is covariantly overridden in Kotlin, but collections in Java are invariant + @SuppressWarnings({"unchecked"}) + public Collection getContributedFunctions(@NotNull Name name, @NotNull LookupLocation location) { throw new IllegalStateException(); } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt index 7af87f5bbd2..a4430331d15 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt @@ -139,7 +139,7 @@ class MemberDeserializer(private val c: DeserializationContext) { return lowSixBits + rest } - fun loadFunction(proto: ProtoBuf.Function): FunctionDescriptor { + fun loadFunction(proto: ProtoBuf.Function): SimpleFunctionDescriptor { val flags = if (proto.hasFlags()) proto.flags else loadOldFlags(proto.oldFlags) val annotations = getAnnotations(proto, flags, AnnotatedCallableKind.FUNCTION) val receiverAnnotations = if (proto.hasReceiver()) 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 d3770fcdbf2..3ebfbd23b62 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 @@ -203,8 +203,8 @@ class DeserializedClassDescriptor( override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection = allDescriptors() - override fun computeNonDeclaredFunctions(name: Name, functions: MutableCollection) { - val fromSupertypes = ArrayList() + override fun computeNonDeclaredFunctions(name: Name, functions: MutableCollection) { + val fromSupertypes = ArrayList() for (supertype in classDescriptor.getTypeConstructor().supertypes) { fromSupertypes.addAll(supertype.memberScope.getContributedFunctions(name, NoLookupLocation.FOR_ALREADY_TRACKED)) } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt index ecb3aa74861..3b20cd68109 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt @@ -48,7 +48,7 @@ abstract class DeserializedMemberScope protected constructor( } private val functions = - c.storageManager.createMemoizedFunction> { computeFunctions(it) } + c.storageManager.createMemoizedFunction> { computeFunctions(it) } private val properties = c.storageManager.createMemoizedFunction> { computeProperties(it) } @@ -63,7 +63,7 @@ abstract class DeserializedMemberScope protected constructor( return map } - private fun computeFunctions(name: Name): Collection { + private fun computeFunctions(name: Name): Collection { val protos = functionProtos()[ProtoKey(name, isExtension = false)].orEmpty() + functionProtos()[ProtoKey(name, isExtension = true)].orEmpty() @@ -75,10 +75,10 @@ abstract class DeserializedMemberScope protected constructor( return descriptors.toReadOnlyList() } - protected open fun computeNonDeclaredFunctions(name: Name, functions: MutableCollection) { + protected open fun computeNonDeclaredFunctions(name: Name, functions: MutableCollection) { } - override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection { recordLookup(name, location) return functions(name) } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/ManglingUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/ManglingUtils.java index a9a9469cb4f..2f445700c56 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/ManglingUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/ManglingUtils.java @@ -244,7 +244,7 @@ public class ManglingUtils { @NotNull public static String getStableMangledNameForDescriptor(@NotNull ClassDescriptor descriptor, @NotNull String functionName) { - Collection functions = + Collection functions = descriptor.getDefaultType().getMemberScope().getContributedFunctions(Name.identifier(functionName), NoLookupLocation.FROM_BACKEND); assert functions.size() == 1 : "Can't select a single function: " + functionName + " in " + descriptor; return getSuggestedName((DeclarationDescriptor) functions.iterator().next()); diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/descriptors/PredefinedPackageFragmentDescriptor.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/descriptors/PredefinedPackageFragmentDescriptor.kt index ee96b5bb833..3d6567233d7 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/descriptors/PredefinedPackageFragmentDescriptor.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/descriptors/PredefinedPackageFragmentDescriptor.kt @@ -16,7 +16,10 @@ package org.jetbrains.kotlin.android.synthetic.descriptors -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor +import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.name.FqName @@ -31,10 +34,10 @@ class PredefinedPackageFragmentDescriptor( module: ModuleDescriptor, private val storageManager: StorageManager, val subpackages: List = emptyList(), - private val descriptors: (PredefinedPackageFragmentDescriptor) -> Collection = { emptyList() } + private val functions: (PredefinedPackageFragmentDescriptor) -> Collection = { emptyList() } ) : PackageFragmentDescriptorImpl(module, FqName(fqName)) { - private val calculatedDescriptors = storageManager.createLazyValue { - descriptors(this) + private val calculatedFunctions = storageManager.createLazyValue { + functions(this) } private val scope = PredefinedScope() @@ -42,15 +45,14 @@ class PredefinedPackageFragmentDescriptor( inner class PredefinedScope : MemberScopeImpl() { @Suppress("UNCHECKED_CAST") - override fun getContributedVariables(name: Name, location: LookupLocation) = - calculatedDescriptors().filter { it is PropertyDescriptor && it.name == name } as List + override fun getContributedVariables(name: Name, location: LookupLocation) = emptyList() @Suppress("UNCHECKED_CAST") override fun getContributedFunctions(name: Name, location: LookupLocation) = - calculatedDescriptors().filter { it is FunctionDescriptor && it.name == name } as List + calculatedFunctions().filter { it.name == name } override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean) = - calculatedDescriptors().filter { nameFilter(it.name) && kindFilter.accepts(it) } + calculatedFunctions().filter { nameFilter(it.name) && kindFilter.accepts(it) } override fun printScopeStructure(p: Printer) { p.println(javaClass.simpleName) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt index 1b794e17919..70851be6140 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt @@ -34,7 +34,7 @@ import org.jetbrains.kotlin.types.typeUtil.makeNullable private class XmlSourceElement(override val psi: PsiElement) : PsiSourceElement -internal fun genClearCacheFunction(packageFragmentDescriptor: PackageFragmentDescriptor, receiverType: KotlinType): FunctionDescriptor { +internal fun genClearCacheFunction(packageFragmentDescriptor: PackageFragmentDescriptor, receiverType: KotlinType): SimpleFunctionDescriptor { val function = object : AndroidSyntheticFunction, SimpleFunctionDescriptorImpl( packageFragmentDescriptor, null,