001/* 002 * Copyright 2010-2013 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 017package org.jetbrains.jet.lang.resolve.calls.tasks; 018 019import org.jetbrains.annotations.NotNull; 020import org.jetbrains.jet.lang.descriptors.CallableDescriptor; 021import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorWithVisibility; 022import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; 023import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; 024import org.jetbrains.jet.lang.psi.JetExpression; 025import org.jetbrains.jet.lang.resolve.BindingTrace; 026import org.jetbrains.jet.lang.resolve.calls.inference.InferenceErrorData; 027import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallWithTrace; 028import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; 029import org.jetbrains.jet.lang.types.JetType; 030 031import java.util.Collection; 032import java.util.List; 033 034import static org.jetbrains.jet.lang.resolve.calls.inference.InferenceErrorData.ExtendedInferenceErrorData; 035 036public interface TracingStrategy { 037 TracingStrategy EMPTY = new TracingStrategy() { 038 039 @Override 040 public <D extends CallableDescriptor> void bindReference(@NotNull BindingTrace trace, @NotNull ResolvedCallWithTrace<D> resolvedCall) {} 041 042 @Override 043 public <D extends CallableDescriptor> void bindResolvedCall(@NotNull BindingTrace trace, @NotNull ResolvedCallWithTrace<D> resolvedCall) {} 044 045 @Override 046 public void unresolvedReference(@NotNull BindingTrace trace) {} 047 048 @Override 049 public <D extends CallableDescriptor> void unresolvedReferenceWrongReceiver(@NotNull BindingTrace trace, @NotNull Collection<ResolvedCallWithTrace<D>> candidates) {} 050 051 @Override 052 public <D extends CallableDescriptor> void recordAmbiguity(@NotNull BindingTrace trace, @NotNull Collection<ResolvedCallWithTrace<D>> candidates) {} 053 054 @Override 055 public void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor expectedReceiver) {} 056 057 @Override 058 public void wrongReceiverType(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor receiverParameter, @NotNull ReceiverValue receiverArgument) {} 059 060 @Override 061 public void noReceiverAllowed(@NotNull BindingTrace trace) {} 062 063 @Override 064 public void noValueForParameter(@NotNull BindingTrace trace, @NotNull ValueParameterDescriptor valueParameter) {} 065 066 @Override 067 public void wrongNumberOfTypeArguments(@NotNull BindingTrace trace, int expectedTypeArgumentCount) {} 068 069 @Override 070 public <D extends CallableDescriptor> void ambiguity(@NotNull BindingTrace trace, @NotNull Collection<ResolvedCallWithTrace<D>> descriptors) {} 071 072 @Override 073 public <D extends CallableDescriptor> void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection<ResolvedCallWithTrace<D>> descriptors) {} 074 075 @Override 076 public <D extends CallableDescriptor> void cannotCompleteResolve( 077 @NotNull BindingTrace trace, 078 @NotNull Collection<ResolvedCallWithTrace<D>> descriptors 079 ) {} 080 081 @Override 082 public void instantiationOfAbstractClass(@NotNull BindingTrace trace) {} 083 084 @Override 085 public void unsafeCall(@NotNull BindingTrace trace, @NotNull JetType type, boolean isCallForImplicitInvoke) {} 086 087 @Override 088 public void unnecessarySafeCall(@NotNull BindingTrace trace, @NotNull JetType type) {} 089 090 @Override 091 public void danglingFunctionLiteralArgumentSuspected(@NotNull BindingTrace trace, @NotNull List<JetExpression> functionLiteralArguments) {} 092 093 @Override 094 public void invisibleMember(@NotNull BindingTrace trace, @NotNull DeclarationDescriptorWithVisibility descriptor) {} 095 096 @Override 097 public void typeInferenceFailed(@NotNull BindingTrace trace, @NotNull ExtendedInferenceErrorData inferenceErrorData) {} 098 099 @Override 100 public void upperBoundViolated(@NotNull BindingTrace trace, @NotNull InferenceErrorData inferenceErrorData) {} 101 }; 102 103 <D extends CallableDescriptor> void bindReference(@NotNull BindingTrace trace, @NotNull ResolvedCallWithTrace<D> resolvedCall); 104 105 <D extends CallableDescriptor> void bindResolvedCall(@NotNull BindingTrace trace, @NotNull ResolvedCallWithTrace<D> resolvedCall); 106 107 void unresolvedReference(@NotNull BindingTrace trace); 108 109 <D extends CallableDescriptor> void unresolvedReferenceWrongReceiver(@NotNull BindingTrace trace, @NotNull Collection<ResolvedCallWithTrace<D>> candidates); 110 111 <D extends CallableDescriptor> void recordAmbiguity(@NotNull BindingTrace trace, @NotNull Collection<ResolvedCallWithTrace<D>> candidates); 112 113 void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor expectedReceiver); 114 115 void wrongReceiverType(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor receiverParameter, @NotNull ReceiverValue receiverArgument); 116 117 void noReceiverAllowed(@NotNull BindingTrace trace); 118 119 void noValueForParameter(@NotNull BindingTrace trace, @NotNull ValueParameterDescriptor valueParameter); 120 121 void wrongNumberOfTypeArguments(@NotNull BindingTrace trace, int expectedTypeArgumentCount); 122 123 <D extends CallableDescriptor> void ambiguity(@NotNull BindingTrace trace, @NotNull Collection<ResolvedCallWithTrace<D>> descriptors); 124 125 <D extends CallableDescriptor> void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection<ResolvedCallWithTrace<D>> descriptors); 126 127 <D extends CallableDescriptor> void cannotCompleteResolve( 128 @NotNull BindingTrace trace, 129 @NotNull Collection<ResolvedCallWithTrace<D>> descriptors 130 ); 131 132 void instantiationOfAbstractClass(@NotNull BindingTrace trace); 133 134 void unsafeCall(@NotNull BindingTrace trace, @NotNull JetType type, boolean isCallForImplicitInvoke); 135 136 void unnecessarySafeCall(@NotNull BindingTrace trace, @NotNull JetType type); 137 138 void danglingFunctionLiteralArgumentSuspected(@NotNull BindingTrace trace, @NotNull List<JetExpression> functionLiteralArguments); 139 140 void invisibleMember(@NotNull BindingTrace trace, @NotNull DeclarationDescriptorWithVisibility descriptor); 141 142 void typeInferenceFailed(@NotNull BindingTrace trace, @NotNull ExtendedInferenceErrorData inferenceErrorData); 143 144 void upperBoundViolated(@NotNull BindingTrace trace, @NotNull InferenceErrorData inferenceErrorData); 145}