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.psi.JetFunctionLiteralArgument; 023 import org.jetbrains.kotlin.resolve.BindingTrace; 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.JetType; 028 029 import java.util.Collection; 030 import java.util.List; 031 032 public interface TracingStrategy { 033 TracingStrategy EMPTY = new TracingStrategy() { 034 035 @Override 036 public void bindCall(@NotNull BindingTrace trace, @NotNull Call call) {} 037 038 @Override 039 public <D extends CallableDescriptor> void bindReference(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall) {} 040 041 @Override 042 public <D extends CallableDescriptor> void bindResolvedCall(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall) {} 043 044 @Override 045 public void unresolvedReference(@NotNull BindingTrace trace) {} 046 047 @Override 048 public <D extends CallableDescriptor> void unresolvedReferenceWrongReceiver(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates) {} 049 050 @Override 051 public <D extends CallableDescriptor> void recordAmbiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates) {} 052 053 @Override 054 public void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor expectedReceiver) {} 055 056 @Override 057 public void wrongReceiverType(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor receiverParameter, @NotNull ReceiverValue receiverArgument) {} 058 059 @Override 060 public void noReceiverAllowed(@NotNull BindingTrace trace) {} 061 062 @Override 063 public void noValueForParameter(@NotNull BindingTrace trace, @NotNull ValueParameterDescriptor valueParameter) {} 064 065 @Override 066 public void wrongNumberOfTypeArguments(@NotNull BindingTrace trace, int expectedTypeArgumentCount) {} 067 068 @Override 069 public <D extends CallableDescriptor> void ambiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors) {} 070 071 @Override 072 public <D extends CallableDescriptor> void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors) {} 073 074 @Override 075 public <D extends CallableDescriptor> void cannotCompleteResolve( 076 @NotNull BindingTrace trace, 077 @NotNull Collection<? extends ResolvedCall<D>> descriptors 078 ) {} 079 080 @Override 081 public void instantiationOfAbstractClass(@NotNull BindingTrace trace) {} 082 083 @Override 084 public void abstractSuperCall(@NotNull BindingTrace trace) {} 085 086 @Override 087 public void nestedClassAccessViaInstanceReference( 088 @NotNull BindingTrace trace, 089 @NotNull ClassDescriptor classDescriptor, 090 @NotNull ExplicitReceiverKind explicitReceiverKind 091 ) {} 092 093 @Override 094 public void unsafeCall(@NotNull BindingTrace trace, @NotNull JetType type, boolean isCallForImplicitInvoke) {} 095 096 @Override 097 public void unnecessarySafeCall(@NotNull BindingTrace trace, @NotNull JetType type) {} 098 099 @Override 100 public void danglingFunctionLiteralArgumentSuspected(@NotNull BindingTrace trace, @NotNull List<JetFunctionLiteralArgument> functionLiteralArguments) {} 101 102 @Override 103 public void invisibleMember(@NotNull BindingTrace trace, @NotNull DeclarationDescriptorWithVisibility descriptor) {} 104 105 @Override 106 public void typeInferenceFailed(@NotNull BindingTrace trace, @NotNull InferenceErrorData inferenceErrorData) {} 107 }; 108 109 void bindCall(@NotNull BindingTrace trace, @NotNull Call call); 110 111 <D extends CallableDescriptor> void bindReference(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall); 112 113 <D extends CallableDescriptor> void bindResolvedCall(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall); 114 115 void unresolvedReference(@NotNull BindingTrace trace); 116 117 <D extends CallableDescriptor> void unresolvedReferenceWrongReceiver(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates); 118 119 <D extends CallableDescriptor> void recordAmbiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates); 120 121 void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor expectedReceiver); 122 123 void wrongReceiverType(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor receiverParameter, @NotNull ReceiverValue receiverArgument); 124 125 void noReceiverAllowed(@NotNull BindingTrace trace); 126 127 void noValueForParameter(@NotNull BindingTrace trace, @NotNull ValueParameterDescriptor valueParameter); 128 129 void wrongNumberOfTypeArguments(@NotNull BindingTrace trace, int expectedTypeArgumentCount); 130 131 <D extends CallableDescriptor> void ambiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors); 132 133 <D extends CallableDescriptor> void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors); 134 135 <D extends CallableDescriptor> void cannotCompleteResolve( 136 @NotNull BindingTrace trace, 137 @NotNull Collection<? extends ResolvedCall<D>> descriptors 138 ); 139 140 void instantiationOfAbstractClass(@NotNull BindingTrace trace); 141 142 void abstractSuperCall(@NotNull BindingTrace trace); 143 144 void nestedClassAccessViaInstanceReference( 145 @NotNull BindingTrace trace, 146 @NotNull ClassDescriptor classDescriptor, 147 @NotNull ExplicitReceiverKind explicitReceiverKind 148 ); 149 150 void unsafeCall(@NotNull BindingTrace trace, @NotNull JetType type, boolean isCallForImplicitInvoke); 151 152 void unnecessarySafeCall(@NotNull BindingTrace trace, @NotNull JetType type); 153 154 void danglingFunctionLiteralArgumentSuspected(@NotNull BindingTrace trace, @NotNull List<JetFunctionLiteralArgument> functionLiteralArguments); 155 156 void invisibleMember(@NotNull BindingTrace trace, @NotNull DeclarationDescriptorWithVisibility descriptor); 157 158 void typeInferenceFailed(@NotNull BindingTrace trace, @NotNull InferenceErrorData inferenceErrorData); 159 }