diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java index 288e92da85c..db91925b1f4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java @@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.resolve.calls.smartcasts.SmartCastUtils; import org.jetbrains.jet.lang.resolve.calls.tasks.ResolutionTask; import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer; import org.jetbrains.jet.lang.resolve.calls.util.FakeCallableDescriptorForObject; +import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil; import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.jet.lang.types.*; @@ -122,8 +123,12 @@ public class CandidateResolver { if (projection.getProjectionKind() != JetProjectionKind.NONE) { context.trace.report(PROJECTION_ON_NON_CLASS_TYPE_ARGUMENT.on(projection)); } - typeArguments.add(argumentTypeResolver.resolveTypeRefWithDefault( - projection.getTypeReference(), context.scope, context.trace, ErrorUtils.createErrorType("Star projection in a call"))); + JetType type = argumentTypeResolver.resolveTypeRefWithDefault( + projection.getTypeReference(), context.scope, context.trace, + ErrorUtils.createErrorType("Star projection in a call") + ); + ForceResolveUtil.forceResolveAllContents(type); + typeArguments.add(type); } int expectedTypeArgumentCount = candidate.getTypeParameters().size(); for (int index = jetTypeArguments.size(); index < expectedTypeArgumentCount; index++) { @@ -644,7 +649,7 @@ public class CandidateResolver { @NotNull BindingTrace trace ) { List typeParameters = functionDescriptor.getTypeParameters(); - for (int i = 0; i < typeParameters.size(); i++) { + for (int i = 0; i < Math.min(typeParameters.size(), jetTypeArguments.size()); i++) { TypeParameterDescriptor typeParameterDescriptor = typeParameters.get(i); JetType typeArgument = typeArguments.get(i); JetTypeReference typeReference = jetTypeArguments.get(i).getTypeReference(); diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassAllUsages3.1.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassAllUsages3.1.kt index 92d7b496461..4b8d7f7ca88 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassAllUsages3.1.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassAllUsages3.1.kt @@ -6,4 +6,4 @@ class Client where X: Data { } -val c = Client() \ No newline at end of file +val c = Client() \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassAllUsages3.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassAllUsages3.results.txt index 1690e3c478e..0cbb2ef3b4e 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassAllUsages3.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassAllUsages3.results.txt @@ -1,4 +1,4 @@ Type constraint (5: 17) class Client where X: Data { Type constraint (5: 35) class Client where X: Data { -Type parameter (9: 16) val c = Client() +Type parameter (9: 16) val c = Client() Usage in import (3: 15) import server.Data