001 /* 002 * Copyright 2010-2015 JetBrains s.r.o. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 package org.jetbrains.kotlin.resolve.calls.tasks; 018 019 import org.jetbrains.annotations.NotNull; 020 import org.jetbrains.kotlin.descriptors.*; 021 import org.jetbrains.kotlin.psi.Call; 022 import org.jetbrains.kotlin.resolve.BindingTrace; 023 import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext; 024 import org.jetbrains.kotlin.resolve.calls.inference.InferenceErrorData; 025 import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; 026 import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue; 027 import org.jetbrains.kotlin.types.KotlinType; 028 029 import java.util.Collection; 030 031 public interface TracingStrategy { 032 TracingStrategy EMPTY = new TracingStrategy() { 033 034 @Override 035 public void bindCall(@NotNull BindingTrace trace, @NotNull Call call) {} 036 037 @Override 038 public <D extends CallableDescriptor> void bindReference(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall) {} 039 040 @Override 041 public <D extends CallableDescriptor> void bindResolvedCall(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall) {} 042 043 @Override 044 public void unresolvedReference(@NotNull BindingTrace trace) {} 045 046 @Override 047 public <D extends CallableDescriptor> void unresolvedReferenceWrongReceiver(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates) {} 048 049 @Override 050 public <D extends CallableDescriptor> void recordAmbiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates) {} 051 052 @Override 053 public void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor expectedReceiver) {} 054 055 @Override 056 public void wrongReceiverType( 057 @NotNull BindingTrace trace, 058 @NotNull ReceiverParameterDescriptor receiverParameter, 059 @NotNull ReceiverValue receiverArgument, 060 @NotNull ResolutionContext<?> c 061 ) {} 062 063 @Override 064 public void noReceiverAllowed(@NotNull BindingTrace trace) {} 065 066 @Override 067 public void noValueForParameter(@NotNull BindingTrace trace, @NotNull ValueParameterDescriptor valueParameter) {} 068 069 @Override 070 public void wrongNumberOfTypeArguments(@NotNull BindingTrace trace, int expectedTypeArgumentCount) {} 071 072 @Override 073 public <D extends CallableDescriptor> void ambiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors) {} 074 075 @Override 076 public <D extends CallableDescriptor> void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors) {} 077 078 @Override 079 public <D extends CallableDescriptor> void cannotCompleteResolve( 080 @NotNull BindingTrace trace, 081 @NotNull Collection<? extends ResolvedCall<D>> descriptors 082 ) {} 083 084 @Override 085 public void instantiationOfAbstractClass(@NotNull BindingTrace trace) {} 086 087 @Override 088 public void abstractSuperCall(@NotNull BindingTrace trace) {} 089 090 @Override 091 public void nestedClassAccessViaInstanceReference( 092 @NotNull BindingTrace trace, 093 @NotNull ClassDescriptor classDescriptor, 094 @NotNull ExplicitReceiverKind explicitReceiverKind 095 ) {} 096 097 @Override 098 public void unsafeCall(@NotNull BindingTrace trace, @NotNull KotlinType type, boolean isCallForImplicitInvoke) {} 099 100 @Override 101 public void invisibleMember(@NotNull BindingTrace trace, @NotNull DeclarationDescriptorWithVisibility descriptor) {} 102 103 @Override 104 public void typeInferenceFailed(@NotNull ResolutionContext<?> context, @NotNull InferenceErrorData inferenceErrorData) {} 105 106 @Override 107 public void nonExtensionFunctionCalledAsExtension(@NotNull BindingTrace trace) { } 108 }; 109 110 void bindCall(@NotNull BindingTrace trace, @NotNull Call call); 111 112 <D extends CallableDescriptor> void bindReference(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall); 113 114 <D extends CallableDescriptor> void bindResolvedCall(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall); 115 116 void unresolvedReference(@NotNull BindingTrace trace); 117 118 <D extends CallableDescriptor> void unresolvedReferenceWrongReceiver(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates); 119 120 <D extends CallableDescriptor> void recordAmbiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates); 121 122 void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor expectedReceiver); 123 124 void wrongReceiverType( 125 @NotNull BindingTrace trace, 126 @NotNull ReceiverParameterDescriptor receiverParameter, 127 @NotNull ReceiverValue receiverArgument, 128 @NotNull ResolutionContext<?> c 129 ); 130 131 void noReceiverAllowed(@NotNull BindingTrace trace); 132 133 void noValueForParameter(@NotNull BindingTrace trace, @NotNull ValueParameterDescriptor valueParameter); 134 135 void wrongNumberOfTypeArguments(@NotNull BindingTrace trace, int expectedTypeArgumentCount); 136 137 <D extends CallableDescriptor> void ambiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors); 138 139 <D extends CallableDescriptor> void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors); 140 141 <D extends CallableDescriptor> void cannotCompleteResolve( 142 @NotNull BindingTrace trace, 143 @NotNull Collection<? extends ResolvedCall<D>> descriptors 144 ); 145 146 void instantiationOfAbstractClass(@NotNull BindingTrace trace); 147 148 void abstractSuperCall(@NotNull BindingTrace trace); 149 150 void nestedClassAccessViaInstanceReference( 151 @NotNull BindingTrace trace, 152 @NotNull ClassDescriptor classDescriptor, 153 @NotNull ExplicitReceiverKind explicitReceiverKind 154 ); 155 156 void unsafeCall(@NotNull BindingTrace trace, @NotNull KotlinType type, boolean isCallForImplicitInvoke); 157 158 void invisibleMember(@NotNull BindingTrace trace, @NotNull DeclarationDescriptorWithVisibility descriptor); 159 160 void typeInferenceFailed(@NotNull ResolutionContext<?> context, @NotNull InferenceErrorData inferenceErrorData); 161 162 void nonExtensionFunctionCalledAsExtension(@NotNull BindingTrace trace); 163 }