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.types.error;
018    
019    import org.jetbrains.annotations.NotNull;
020    import org.jetbrains.annotations.Nullable;
021    import org.jetbrains.kotlin.descriptors.*;
022    import org.jetbrains.kotlin.descriptors.annotations.Annotations;
023    import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl;
024    import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
025    import org.jetbrains.kotlin.name.Name;
026    import org.jetbrains.kotlin.types.ErrorUtils;
027    import org.jetbrains.kotlin.types.KotlinType;
028    import org.jetbrains.kotlin.types.TypeSubstitution;
029    
030    import java.util.Collection;
031    import java.util.List;
032    
033    public class ErrorSimpleFunctionDescriptorImpl extends SimpleFunctionDescriptorImpl {
034        // used for diagnostic only
035        @SuppressWarnings({"UnusedDeclaration", "FieldCanBeLocal"})
036        private final ErrorUtils.ErrorScope ownerScope;
037    
038        public ErrorSimpleFunctionDescriptorImpl(@NotNull ClassDescriptor containingDeclaration, @NotNull ErrorUtils.ErrorScope ownerScope) {
039            super(containingDeclaration, null, Annotations.Companion.getEMPTY(), Name.special("<ERROR FUNCTION>"), Kind.DECLARATION, SourceElement.NO_SOURCE);
040            this.ownerScope = ownerScope;
041        }
042    
043        @NotNull
044        @Override
045        protected FunctionDescriptorImpl createSubstitutedCopy(
046                @NotNull DeclarationDescriptor newOwner,
047                @Nullable FunctionDescriptor original,
048                @NotNull Kind kind,
049                @Nullable Name newName,
050                @NotNull Annotations annotations,
051                @NotNull SourceElement source
052        ) {
053            return this;
054        }
055    
056        @NotNull
057        @Override
058        public SimpleFunctionDescriptor copy(DeclarationDescriptor newOwner, Modality modality, Visibility visibility, Kind kind, boolean copyOverrides) {
059            return this;
060        }
061    
062        @NotNull
063        @Override
064        public CopyBuilder<? extends SimpleFunctionDescriptor> newCopyBuilder() {
065            return new CopyBuilder<SimpleFunctionDescriptor>() {
066                @NotNull
067                @Override
068                public CopyBuilder<SimpleFunctionDescriptor> setOwner(@NotNull DeclarationDescriptor owner) {
069                    return this;
070                }
071    
072                @NotNull
073                @Override
074                public CopyBuilder<SimpleFunctionDescriptor> setModality(@NotNull Modality modality) {
075                    return this;
076                }
077    
078                @NotNull
079                @Override
080                public CopyBuilder<SimpleFunctionDescriptor> setVisibility(@NotNull Visibility visibility) {
081                    return this;
082                }
083    
084                @NotNull
085                @Override
086                public CopyBuilder<SimpleFunctionDescriptor> setKind(@NotNull Kind kind) {
087                    return this;
088                }
089    
090                @NotNull
091                @Override
092                public CopyBuilder<SimpleFunctionDescriptor> setCopyOverrides(boolean copyOverrides) {
093                    return this;
094                }
095    
096                @NotNull
097                @Override
098                public CopyBuilder<SimpleFunctionDescriptor> setName(@NotNull Name name) {
099                    return this;
100                }
101    
102                @NotNull
103                @Override
104                public CopyBuilder<SimpleFunctionDescriptor> setValueParameters(@NotNull List<ValueParameterDescriptor> parameters) {
105                    return this;
106                }
107    
108                @NotNull
109                @Override
110                public CopyBuilder<SimpleFunctionDescriptor> setSubstitution(@NotNull TypeSubstitution substitution) {
111                    return this;
112                }
113    
114                @NotNull
115                @Override
116                public <V> CopyBuilder<SimpleFunctionDescriptor> putUserData(
117                        @NotNull UserDataKey<V> userDataKey,
118                        V value
119                ) {
120                    return this;
121                }
122    
123                @NotNull
124                @Override
125                public CopyBuilder<SimpleFunctionDescriptor> setTypeParameters(@NotNull List<TypeParameterDescriptor> parameters) {
126                    return this;
127                }
128    
129                @NotNull
130                @Override
131                public CopyBuilder<SimpleFunctionDescriptor> setReturnType(@NotNull KotlinType type) {
132                    return this;
133                }
134    
135                @NotNull
136                @Override
137                public CopyBuilder<SimpleFunctionDescriptor> setExtensionReceiverType(@Nullable KotlinType type) {
138                    return this;
139                }
140    
141                @NotNull
142                @Override
143                public CopyBuilder<SimpleFunctionDescriptor> setDispatchReceiverParameter(@Nullable ReceiverParameterDescriptor dispatchReceiverParameter) {
144                    return this;
145                }
146    
147                @NotNull
148                @Override
149                public CopyBuilder<SimpleFunctionDescriptor> setOriginal(@Nullable FunctionDescriptor original) {
150                    return this;
151                }
152    
153                @NotNull
154                @Override
155                public CopyBuilder<SimpleFunctionDescriptor> setSignatureChange() {
156                    return this;
157                }
158    
159                @NotNull
160                @Override
161                public CopyBuilder<SimpleFunctionDescriptor> setPreserveSourceElement() {
162                    return this;
163                }
164    
165                @NotNull
166                @Override
167                public CopyBuilder<SimpleFunctionDescriptor> setSource(@NotNull SourceElement source) {
168                    return this;
169                }
170    
171                @NotNull
172                @Override
173                public CopyBuilder<SimpleFunctionDescriptor> setDropOriginalInContainingParts() {
174                    return this;
175                }
176    
177                @NotNull
178                @Override
179                public CopyBuilder<SimpleFunctionDescriptor> setHiddenToOvercomeSignatureClash() {
180                    return this;
181                }
182    
183                @NotNull
184                @Override
185                public CopyBuilder<SimpleFunctionDescriptor> setHiddenForResolutionEverywhereBesideSupercalls() {
186                    return this;
187                }
188    
189                @NotNull
190                @Override
191                public CopyBuilder<SimpleFunctionDescriptor> setAdditionalAnnotations(@NotNull Annotations additionalAnnotations) {
192                    return this;
193                }
194    
195                @Nullable
196                @Override
197                public SimpleFunctionDescriptor build() {
198                    return ErrorSimpleFunctionDescriptorImpl.this;
199                }
200            };
201        }
202    
203        @Override
204        public boolean isSuspend() {
205            return false;
206        }
207    
208        @Override
209        public <V> V getUserData(UserDataKey<V> key) {
210            return null;
211        }
212    
213        @Override
214        public void setOverriddenDescriptors(@NotNull Collection<? extends CallableMemberDescriptor> overriddenDescriptors) {
215            // nop
216        }
217    }