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