/*
* 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.resolve.calls.model;
import org.jetbrains.annotations.
NotNull;
import org.jetbrains.annotations.
Nullable;
import org.jetbrains.kotlin.descriptors.
CallableDescriptor;
import org.jetbrains.kotlin.descriptors.
TypeParameterDescriptor;
import org.jetbrains.kotlin.descriptors.
ValueParameterDescriptor;
import org.jetbrains.kotlin.psi.
Call;
import org.jetbrains.kotlin.psi.
ValueArgument;
import org.jetbrains.kotlin.resolve.calls.results.
ResolutionStatus;
import org.jetbrains.kotlin.resolve.calls.tasks.
ExplicitReceiverKind;
import org.jetbrains.kotlin.resolve.scopes.receivers.
ReceiverValue;
import org.jetbrains.kotlin.types.
KotlinType;
import java.util.
List;
import java.util.
Map;
public interface
ResolvedCall<D extends
CallableDescriptor> {
@
NotNull
ResolutionStatus getStatus();
/** The call that was resolved to this ResolvedCall */
@
NotNull
Call getCall();
/** A target callable descriptor as it was accessible in the corresponding scope, i.e. with type arguments not substituted */
@
NotNull
D
getCandidateDescriptor();
/** Type arguments are substituted. This descriptor is guaranteed to have NO declared type parameters */
@
NotNull
D
getResultingDescriptor();
/** If the target was an extension function or property, this is the value for its receiver parameter */
@
Nullable
ReceiverValue getExtensionReceiver();
/** If the target was a member of a class, this is the object of that class to call it on */
@
Nullable
ReceiverValue getDispatchReceiver();
/** Determines whether receiver argument or this object is substituted for explicit receiver */
@
NotNull
ExplicitReceiverKind getExplicitReceiverKind();
/** Values (arguments) for value parameters */
@
NotNull
Map<
ValueParameterDescriptor,
ResolvedValueArgument>
getValueArguments();
/** Values (arguments) for value parameters indexed by parameter index */
@
Nullable
List<
ResolvedValueArgument>
getValueArgumentsByIndex();
/** The result of mapping the value argument to a parameter */
@
NotNull
ArgumentMapping getArgumentMapping(@
NotNull ValueArgument valueArgument);
/** What's substituted for type parameters */
@
NotNull
Map<
TypeParameterDescriptor,
KotlinType>
getTypeArguments();
/** Data flow info for each argument and the result data flow info */
@
NotNull
DataFlowInfoForArguments getDataFlowInfoForArguments();
@
Nullable
KotlinType getSmartCastDispatchReceiverType();
}