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    }