diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java index 8664ddedc75..39569a249cb 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java @@ -349,7 +349,7 @@ public abstract class AnnotationCodegen { private String getAnnotationArgumentJvmName(@Nullable ClassDescriptor annotationClass, @NotNull Name parameterName) { if (annotationClass == null) return parameterName.asString(); - Collection variables = + Collection variables = annotationClass.getUnsubstitutedMemberScope().getContributedVariables(parameterName, NoLookupLocation.FROM_BACKEND); if (variables.size() != 1) return parameterName.asString(); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java index 75671846c2f..955949d4596 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java @@ -467,7 +467,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { return; } - Collection functions = descriptor.getDefaultType().getMemberScope().getContributedFunctions( + Collection functions = descriptor.getDefaultType().getMemberScope().getContributedFunctions( Name.identifier("toArray"), NoLookupLocation.FROM_BACKEND ); boolean hasGenericToArray = false; 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 1e5ee52ba74..e8a56cc3ac1 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/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java index 9a05b291aff..7a29033e758 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java @@ -1187,8 +1187,9 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { KotlinType refinedType = KotlinBuiltIns.isNothingOrNullableNothing(receiver.getType()) ? components.builtIns.getNullableAnyType() : receiver.getType(); - Collection equalsMembers = refinedType.getMemberScope().getContributedFunctions( - OperatorNameConventions.EQUALS, new KotlinLookupLocation(expression.getOperationReference())); + Collection equalsMembers = refinedType.getMemberScope().getContributedFunctions( + OperatorNameConventions.EQUALS, new KotlinLookupLocation(expression.getOperationReference()) + ); return CollectionsKt.filter(equalsMembers, descriptor -> { if (ErrorUtils.isError(descriptor)) return true; 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 619ea700236..a1438caaf98 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DataFlowAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DataFlowAnalyzer.java @@ -99,8 +99,9 @@ public class DataFlowAnalyzer { } private boolean typeHasOverriddenEquals(@NotNull KotlinType type, @NotNull KtElement lookupElement) { - Collection members = type.getMemberScope().getContributedFunctions( - OperatorNameConventions.EQUALS, new KotlinLookupLocation(lookupElement)); + Collection members = type.getMemberScope().getContributedFunctions( + OperatorNameConventions.EQUALS, new KotlinLookupLocation(lookupElement) + ); for (FunctionDescriptor member : members) { KotlinType returnType = member.getReturnType(); if (returnType == null || !KotlinBuiltIns.isBoolean(returnType)) continue; diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/annotation/AbstractAnnotationDescriptorResolveTest.java b/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/annotation/AbstractAnnotationDescriptorResolveTest.java index 778b8dc1f44..6c63f80fe26 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/annotation/AbstractAnnotationDescriptorResolveTest.java +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/annotation/AbstractAnnotationDescriptorResolveTest.java @@ -169,7 +169,8 @@ 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 +179,8 @@ 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(); } @@ -187,12 +189,13 @@ public abstract class AbstractAnnotationDescriptorResolveTest extends KotlinTest protected static PropertyDescriptor getPropertyDescriptor(@NotNull PackageFragmentDescriptor packageView, @NotNull String name, boolean failOnMissing) { Name propertyName = Name.identifier(name); MemberScope memberScope = packageView.getMemberScope(); - Collection properties = memberScope.getContributedVariables(propertyName, NoLookupLocation.FROM_TEST); + Collection properties = memberScope.getContributedVariables(propertyName, NoLookupLocation.FROM_TEST); if (properties.isEmpty()) { for (DeclarationDescriptor descriptor : DescriptorUtils.getAllDescriptors(memberScope)) { if (descriptor instanceof ClassDescriptor) { - Collection classProperties = ((ClassDescriptor) descriptor).getMemberScope(Collections.emptyList()) - .getContributedVariables(propertyName, NoLookupLocation.FROM_TEST); + Collection classProperties = + ((ClassDescriptor) descriptor).getMemberScope(Collections.emptyList()) + .getContributedVariables(propertyName, NoLookupLocation.FROM_TEST); if (!classProperties.isEmpty()) { properties = classProperties; break; @@ -213,7 +216,7 @@ public abstract class AbstractAnnotationDescriptorResolveTest extends KotlinTest private static PropertyDescriptor getPropertyDescriptor(@NotNull ClassDescriptor classDescriptor, @NotNull String name) { Name propertyName = Name.identifier(name); MemberScope memberScope = classDescriptor.getMemberScope(Collections.emptyList()); - Collection properties = memberScope.getContributedVariables(propertyName, NoLookupLocation.FROM_TEST); + Collection properties = memberScope.getContributedVariables(propertyName, NoLookupLocation.FROM_TEST); assert properties.size() == 1 : "Failed to find property " + propertyName + " in class " + classDescriptor.getName(); return properties.iterator().next(); } diff --git a/compiler/tests/org/jetbrains/kotlin/types/BoundsSubstitutorTest.java b/compiler/tests/org/jetbrains/kotlin/types/BoundsSubstitutorTest.java index 23a16fff12a..91789ef7b34 100644 --- a/compiler/tests/org/jetbrains/kotlin/types/BoundsSubstitutorTest.java +++ b/compiler/tests/org/jetbrains/kotlin/types/BoundsSubstitutorTest.java @@ -72,7 +72,7 @@ public class BoundsSubstitutorTest extends KotlinTestWithEnvironment { private void doTest(String text, String expected) { KtFile ktFile = KtPsiFactoryKt.KtPsiFactory(getProject()).createFile("fun.kt", text); ModuleDescriptor module = JvmResolveUtil.analyze(ktFile, getEnvironment()).getModuleDescriptor(); - Collection functions = + Collection functions = module.getPackage(FqName.ROOT).getMemberScope().getContributedFunctions(Name.identifier("f"), NoLookupLocation.FROM_TEST); FunctionDescriptor substituted = BoundsSubstitutor.substituteBounds(CollectionsKt.single(functions)); String actual = DescriptorRenderer.COMPACT.render(substituted); 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 655a800ac00..195eac21cb1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java @@ -182,21 +182,21 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { } private class EnumEntryScope extends MemberScopeImpl { - private final MemoizedFunctionToNotNull> functions; - private final MemoizedFunctionToNotNull> properties; + 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); } }); - this.properties = storageManager.createMemoizedFunction(new Function1>() { + this.properties = storageManager.createMemoizedFunction(new Function1>() { @Override - public Collection invoke(Name name) { + public Collection invoke(Name name) { return computeProperties(name); } }); @@ -210,32 +210,23 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { @NotNull @Override - // 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) { + public Collection getContributedVariables(@NotNull Name name, @NotNull LookupLocation location) { return properties.invoke(name); } @NotNull - // 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)); + private Collection computeProperties(@NotNull Name name) { + return resolveFakeOverrides(name, getSupertypeScope().getContributedVariables(name, NoLookupLocation.FOR_NON_TRACKED_SCOPE)); } @NotNull @Override - // 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) { + 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)); } @@ -247,9 +238,9 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { } @NotNull - private Collection resolveFakeOverrides( + private Collection resolveFakeOverrides( @NotNull Name name, - @NotNull Collection fromSupertypes + @NotNull Collection fromSupertypes ) { final Set result = new LinkedHashSet(); diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java index 0dcbb446779..837e4816565 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java @@ -587,8 +587,7 @@ public class DescriptorUtils { @Nullable public static FunctionDescriptor getFunctionByNameOrNull(@NotNull MemberScope scope, @NotNull Name name) { - Collection functions = scope.getContributedFunctions(name, NoLookupLocation.FROM_BACKEND); - for (SimpleFunctionDescriptor d : functions) { + for (SimpleFunctionDescriptor d : scope.getContributedFunctions(name, NoLookupLocation.FROM_BACKEND)) { if (name.equals(d.getOriginal().getName())) { return d; } @@ -599,8 +598,7 @@ public class DescriptorUtils { @NotNull public static PropertyDescriptor getPropertyByName(@NotNull MemberScope scope, @NotNull Name name) { - Collection properties = scope.getContributedVariables(name, NoLookupLocation.FROM_BACKEND); - for (PropertyDescriptor d : properties) { + for (PropertyDescriptor d : scope.getContributedVariables(name, NoLookupLocation.FROM_BACKEND)) { if (name.equals(d.getOriginal().getName())) { return d; } 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 997a35a59e9..d5c9a9d1253 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScope.kt @@ -25,8 +25,9 @@ import java.lang.reflect.Modifier interface MemberScope : ResolutionScope { - override fun getContributedVariables(name: Name, location: LookupLocation): Collection - override fun getContributedFunctions(name: Name, location: LookupLocation): Collection + override fun getContributedVariables(name: Name, location: LookupLocation): Collection<@JvmWildcard PropertyDescriptor> + + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection<@JvmWildcard SimpleFunctionDescriptor> /** * These methods may return a superset of an actual names' set 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 773936d5a4d..d4708d062c5 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScopeImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/MemberScopeImpl.kt @@ -25,9 +25,11 @@ import org.jetbrains.kotlin.utils.alwaysTrue abstract class MemberScopeImpl : MemberScope { override fun getContributedClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? = null - override fun getContributedVariables(name: Name, location: LookupLocation): Collection = emptyList() + override fun getContributedVariables(name: Name, location: LookupLocation): Collection<@JvmWildcard PropertyDescriptor> = + emptyList() - override fun getContributedFunctions(name: Name, location: LookupLocation): Collection = emptyList() + override fun getContributedFunctions(name: Name, location: LookupLocation): Collection<@JvmWildcard SimpleFunctionDescriptor> = + emptyList() override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection = emptyList() diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ResolutionScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ResolutionScope.kt index 664754fc8b1..3f1299bac42 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ResolutionScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ResolutionScope.kt @@ -39,9 +39,9 @@ interface ResolutionScope { fun getContributedClassifierIncludeDeprecated(name: Name, location: LookupLocation): DescriptorWithDeprecation? = getContributedClassifier(name, location)?.let { DescriptorWithDeprecation.createNonDeprecated(it) } - fun getContributedVariables(name: Name, location: LookupLocation): Collection + fun getContributedVariables(name: Name, location: LookupLocation): Collection<@JvmWildcard VariableDescriptor> - fun getContributedFunctions(name: Name, location: LookupLocation): Collection + fun getContributedFunctions(name: Name, location: LookupLocation): Collection<@JvmWildcard FunctionDescriptor> /** * All visible descriptors from current scope possibly filtered by the given name and kind filters diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java index 90f3fd1ca32..2ac355fe2a9 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java @@ -198,19 +198,13 @@ public class ErrorUtils { @NotNull @Override - // 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) { + public Set getContributedVariables(@NotNull Name name, @NotNull LookupLocation location) { return ERROR_PROPERTY_GROUP; } @NotNull @Override - // 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) { + public Set getContributedFunctions(@NotNull Name name, @NotNull LookupLocation location) { return Collections.singleton(createErrorFunction(this)); } @@ -284,17 +278,15 @@ public class ErrorUtils { @NotNull @Override - @SuppressWarnings({"unchecked"}) // KT-9898 Impossible implement kotlin interface from java - public Collection getContributedVariables(@NotNull Name name, @NotNull LookupLocation location) { + public Collection getContributedVariables(@NotNull Name name, @NotNull LookupLocation location) { throw new IllegalStateException(debugMessage+", required name: " + name); } @NotNull @Override - // 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) { + public Collection getContributedFunctions( + @NotNull Name name, @NotNull LookupLocation location + ) { throw new IllegalStateException(debugMessage+", required name: " + name); } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java index cd9306d098e..715002f3fc7 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java @@ -216,8 +216,9 @@ public final class Namer { // TODO: get rid of this function @NotNull private static String getStableMangledNameForDescriptor(@NotNull ClassDescriptor descriptor, @NotNull String functionName) { - Collection functions = descriptor.getDefaultType().getMemberScope().getContributedFunctions( - Name.identifier(functionName), NoLookupLocation.FROM_BACKEND); + 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; SuggestedName suggested = new NameSuggestion().suggest(functions.iterator().next()); assert suggested != null : "Suggested name for class members is always non-null: " + functions.iterator().next(); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java index cd4e7cd5780..497714af80e 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallExpressionTranslator.java @@ -152,7 +152,7 @@ public final class CallExpressionTranslator extends AbstractCallExpressionTransl @Nullable private static VariableDescriptor getVariableByName(@NotNull LexicalScope scope, @NotNull Name name) { while (true) { - Collection variables = scope.getContributedVariables(name, NoLookupLocation.FROM_BACKEND); + Collection variables = scope.getContributedVariables(name, NoLookupLocation.FROM_BACKEND); if (!variables.isEmpty()) { return variables.size() == 1 ? variables.iterator().next() : null; }