001 /* 002 * Copyright 2010-2016 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, @NotNull CallableDescriptor descriptor) {} 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 107 void bindCall(@NotNull BindingTrace trace, @NotNull Call call); 108 109 <D extends CallableDescriptor> void bindReference(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall); 110 111 <D extends CallableDescriptor> void bindResolvedCall(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall); 112 113 void unresolvedReference(@NotNull BindingTrace trace); 114 115 <D extends CallableDescriptor> void unresolvedReferenceWrongReceiver(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates); 116 117 <D extends CallableDescriptor> void recordAmbiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates); 118 119 void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor expectedReceiver); 120 121 void wrongReceiverType( 122 @NotNull BindingTrace trace, 123 @NotNull ReceiverParameterDescriptor receiverParameter, 124 @NotNull ReceiverValue receiverArgument, 125 @NotNull ResolutionContext<?> c 126 ); 127 128 void noReceiverAllowed(@NotNull BindingTrace trace); 129 130 void noValueForParameter(@NotNull BindingTrace trace, @NotNull ValueParameterDescriptor valueParameter); 131 132 void wrongNumberOfTypeArguments( 133 @NotNull BindingTrace trace, 134 int expectedTypeArgumentCount, 135 @NotNull CallableDescriptor descriptor 136 ); 137 138 <D extends CallableDescriptor> void ambiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors); 139 140 <D extends CallableDescriptor> void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors); 141 142 <D extends CallableDescriptor> void cannotCompleteResolve( 143 @NotNull BindingTrace trace, 144 @NotNull Collection<? extends ResolvedCall<D>> descriptors 145 ); 146 147 void instantiationOfAbstractClass(@NotNull BindingTrace trace); 148 149 void abstractSuperCall(@NotNull BindingTrace trace); 150 151 void nestedClassAccessViaInstanceReference( 152 @NotNull BindingTrace trace, 153 @NotNull ClassDescriptor classDescriptor, 154 @NotNull ExplicitReceiverKind explicitReceiverKind 155 ); 156 157 void unsafeCall(@NotNull BindingTrace trace, @NotNull KotlinType type, boolean isCallForImplicitInvoke); 158 159 void invisibleMember(@NotNull BindingTrace trace, @NotNull DeclarationDescriptorWithVisibility descriptor); 160 161 void typeInferenceFailed(@NotNull ResolutionContext<?> context, @NotNull InferenceErrorData inferenceErrorData); 162 }