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.*;
021    import org.jetbrains.jet.lang.psi.Call;
022    import org.jetbrains.jet.lang.psi.JetFunctionLiteralArgument;
023    import org.jetbrains.jet.lang.resolve.BindingTrace;
024    import org.jetbrains.jet.lang.resolve.calls.inference.InferenceErrorData;
025    import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
026    import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
027    import org.jetbrains.jet.lang.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 nestedClassAccessViaInstanceReference(
085                    @NotNull BindingTrace trace,
086                    @NotNull ClassDescriptor classDescriptor,
087                    @NotNull ExplicitReceiverKind explicitReceiverKind
088            ) {}
089    
090            @Override
091            public void unsafeCall(@NotNull BindingTrace trace, @NotNull JetType type, boolean isCallForImplicitInvoke) {}
092    
093            @Override
094            public void unnecessarySafeCall(@NotNull BindingTrace trace, @NotNull JetType type) {}
095    
096            @Override
097            public void danglingFunctionLiteralArgumentSuspected(@NotNull BindingTrace trace, @NotNull List<JetFunctionLiteralArgument> functionLiteralArguments) {}
098    
099            @Override
100            public void invisibleMember(@NotNull BindingTrace trace, @NotNull DeclarationDescriptorWithVisibility descriptor) {}
101    
102            @Override
103            public void typeInferenceFailed(@NotNull BindingTrace trace, @NotNull InferenceErrorData inferenceErrorData) {}
104        };
105    
106        void bindCall(@NotNull BindingTrace trace, @NotNull Call call);
107    
108        <D extends CallableDescriptor> void bindReference(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall);
109    
110        <D extends CallableDescriptor> void bindResolvedCall(@NotNull BindingTrace trace, @NotNull ResolvedCall<D> resolvedCall);
111    
112        void unresolvedReference(@NotNull BindingTrace trace);
113    
114        <D extends CallableDescriptor> void unresolvedReferenceWrongReceiver(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates);
115    
116        <D extends CallableDescriptor> void recordAmbiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> candidates);
117    
118        void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor expectedReceiver);
119    
120        void wrongReceiverType(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor receiverParameter, @NotNull ReceiverValue receiverArgument);
121    
122        void noReceiverAllowed(@NotNull BindingTrace trace);
123    
124        void noValueForParameter(@NotNull BindingTrace trace, @NotNull ValueParameterDescriptor valueParameter);
125    
126        void wrongNumberOfTypeArguments(@NotNull BindingTrace trace, int expectedTypeArgumentCount);
127    
128        <D extends CallableDescriptor> void ambiguity(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors);
129    
130        <D extends CallableDescriptor> void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection<? extends ResolvedCall<D>> descriptors);
131    
132        <D extends CallableDescriptor> void cannotCompleteResolve(
133                @NotNull BindingTrace trace,
134                @NotNull Collection<? extends ResolvedCall<D>> descriptors
135        );
136    
137        void instantiationOfAbstractClass(@NotNull BindingTrace trace);
138    
139        void nestedClassAccessViaInstanceReference(
140                @NotNull BindingTrace trace,
141                @NotNull ClassDescriptor classDescriptor,
142                @NotNull ExplicitReceiverKind explicitReceiverKind
143        );
144    
145        void unsafeCall(@NotNull BindingTrace trace, @NotNull JetType type, boolean isCallForImplicitInvoke);
146    
147        void unnecessarySafeCall(@NotNull BindingTrace trace, @NotNull JetType type);
148    
149        void danglingFunctionLiteralArgumentSuspected(@NotNull BindingTrace trace, @NotNull List<JetFunctionLiteralArgument> functionLiteralArguments);
150    
151        void invisibleMember(@NotNull BindingTrace trace, @NotNull DeclarationDescriptorWithVisibility descriptor);
152    
153        void typeInferenceFailed(@NotNull BindingTrace trace, @NotNull InferenceErrorData inferenceErrorData);
154    }