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