diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTaskHolder.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTaskHolder.java index f07953f6d81..5d8d5f77e06 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTaskHolder.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTaskHolder.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2013 JetBrains s.r.o. + * Copyright 2010-2014 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. @@ -14,94 +14,79 @@ * limitations under the License. */ -package org.jetbrains.jet.lang.resolve.calls.tasks; +package org.jetbrains.jet.lang.resolve.calls.tasks -import com.google.common.base.Predicate; -import com.google.common.collect.Collections2; -import com.google.common.collect.Lists; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.CallableDescriptor; -import org.jetbrains.jet.lang.psi.JetPsiUtil; -import org.jetbrains.jet.lang.psi.JetReferenceExpression; -import org.jetbrains.jet.lang.resolve.calls.context.BasicCallResolutionContext; +import com.google.common.base.Predicate +import com.google.common.collect.Collections2 +import com.google.common.collect.Lists +import org.jetbrains.jet.lang.descriptors.CallableDescriptor +import org.jetbrains.jet.lang.psi.JetPsiUtil +import org.jetbrains.jet.lang.psi.JetReferenceExpression +import org.jetbrains.jet.lang.resolve.calls.context.BasicCallResolutionContext -import java.util.Collection; -import java.util.List; +public class ResolutionTaskHolder( + private val basicCallResolutionContext: BasicCallResolutionContext, + private val priorityProvider: ResolutionTaskHolder.PriorityProvider>, + private val tracing: TracingStrategy +) { + private val isSafeCall: Boolean -public class ResolutionTaskHolder { - private final BasicCallResolutionContext basicCallResolutionContext; - private final PriorityProvider> priorityProvider; - private final TracingStrategy tracing; - private final boolean isSafeCall; + private val candidatesList = Lists.newArrayList>>() - private final Collection>> candidatesList = Lists.newArrayList(); + private var internalTasks: MutableList>? = null - private List> tasks = null; - - public ResolutionTaskHolder( - @NotNull BasicCallResolutionContext basicCallResolutionContext, - @NotNull PriorityProvider> priorityProvider, - @NotNull TracingStrategy tracing - ) { - this.basicCallResolutionContext = basicCallResolutionContext; - this.priorityProvider = priorityProvider; - this.tracing = tracing; - this.isSafeCall = JetPsiUtil.isSafeCall(basicCallResolutionContext.call); + { + this.isSafeCall = JetPsiUtil.isSafeCall(basicCallResolutionContext.call) } - public Collection> setIsSafeCall(@NotNull Collection> candidates) { - for (ResolutionCandidate candidate : candidates) { - candidate.setSafeCall(isSafeCall); + public fun setIsSafeCall(candidates: Collection>): Collection> { + for (candidate in candidates) { + candidate.setSafeCall(isSafeCall) } - return candidates; + return candidates } - public void addCandidates(@NotNull Collection> candidates) { - assertNotFinished(); + public fun addCandidates(candidates: Collection>) { + assertNotFinished() if (!candidates.isEmpty()) { - candidatesList.add(setIsSafeCall(candidates)); + candidatesList.add(setIsSafeCall(candidates)) } } - public void addCandidates(@NotNull List>> candidatesList) { - assertNotFinished(); - for (Collection> candidates : candidatesList) { - addCandidates(candidates); + public fun addCandidates(candidatesList: List>>) { + assertNotFinished() + for (candidates in candidatesList) { + addCandidates(candidates) } } - private void assertNotFinished() { - assert tasks == null : "Can't add candidates after the resulting tasks were computed."; + private fun assertNotFinished() { + assert(internalTasks == null, "Can't add candidates after the resulting tasks were computed.") } - public List> getTasks() { - if (tasks == null) { - tasks = Lists.newArrayList(); + public fun getTasks(): List> { + if (internalTasks == null) { + internalTasks = Lists.newArrayList() - for (int priority = priorityProvider.getMaxPriority(); priority >= 0; priority--) { - final int finalPriority = priority; - for (Collection> candidates : candidatesList) { - Collection> filteredCandidates = Collections2.filter( - candidates, new Predicate>() { - @Override - public boolean apply(@Nullable ResolutionCandidate input) { - return finalPriority == priorityProvider.getPriority(input); - } - } - ); - if (!filteredCandidates.isEmpty()) { - tasks.add(new ResolutionTask(filteredCandidates, basicCallResolutionContext, tracing)); + run { + var priority = priorityProvider.getMaxPriority() + while (priority >= 0) { + for (candidates in candidatesList) { + val filteredCandidates = candidates.filter { priority == priorityProvider.getPriority(it) } + if (!filteredCandidates.isEmpty()) { + internalTasks!!.add(ResolutionTask(filteredCandidates, basicCallResolutionContext, tracing)) + } } + priority-- } } } - return tasks; + return internalTasks!! } - public interface PriorityProvider { - int getPriority(D candidate); + public trait PriorityProvider { + public fun getPriority(candidate: D): Int - int getMaxPriority(); + public fun getMaxPriority(): Int } }