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.diagnostics.rendering;
018    
019    import com.google.common.collect.ImmutableList;
020    import com.intellij.openapi.application.Application;
021    import com.intellij.openapi.application.ApplicationManager;
022    import com.intellij.openapi.extensions.ExtensionPointName;
023    import com.intellij.openapi.extensions.Extensions;
024    import kotlin.Function1;
025    import kotlin.KotlinPackage;
026    import org.jetbrains.annotations.NotNull;
027    import org.jetbrains.annotations.Nullable;
028    import org.jetbrains.annotations.TestOnly;
029    import org.jetbrains.kotlin.diagnostics.Diagnostic;
030    import org.jetbrains.kotlin.diagnostics.DiagnosticFactory;
031    import org.jetbrains.kotlin.diagnostics.Errors;
032    import org.jetbrains.kotlin.lexer.JetKeywordToken;
033    import org.jetbrains.kotlin.lexer.JetModifierKeywordToken;
034    import org.jetbrains.kotlin.psi.JetExpression;
035    import org.jetbrains.kotlin.psi.JetSimpleNameExpression;
036    import org.jetbrains.kotlin.psi.JetTypeConstraint;
037    import org.jetbrains.kotlin.renderer.MultiRenderer;
038    import org.jetbrains.kotlin.renderer.Renderer;
039    import org.jetbrains.kotlin.resolve.varianceChecker.VarianceChecker.VarianceConflictDiagnosticData;
040    import org.jetbrains.kotlin.types.JetType;
041    
042    import java.lang.reflect.Field;
043    import java.lang.reflect.Modifier;
044    import java.util.Collection;
045    import java.util.List;
046    
047    import static org.jetbrains.kotlin.diagnostics.Errors.*;
048    import static org.jetbrains.kotlin.diagnostics.rendering.Renderers.*;
049    import static org.jetbrains.kotlin.renderer.DescriptorRenderer.*;
050    
051    public class DefaultErrorMessages {
052    
053        public interface Extension {
054            ExtensionPointName<Extension> EP_NAME = ExtensionPointName.create("org.jetbrains.kotlin.defaultErrorMessages");
055    
056            @NotNull
057            DiagnosticFactoryToRendererMap getMap();
058        }
059    
060        private static final DiagnosticFactoryToRendererMap MAP = new DiagnosticFactoryToRendererMap();
061        private static List<DiagnosticFactoryToRendererMap> maps = null;
062        private static Application application = ApplicationManager.getApplication();
063        private static DispatchingDiagnosticRenderer renderer = null;
064    
065        @NotNull
066        public static String render(@NotNull Diagnostic diagnostic) {
067            return getRenderer().render(diagnostic);
068        }
069    
070        @NotNull
071        private static DiagnosticRenderer<Diagnostic> getRenderer() {
072            boolean mapsChanged = resetMapsIfNeeded();
073    
074            // Renderer is changed in tests only
075            if (renderer == null || mapsChanged) {
076                renderer = new DispatchingDiagnosticRenderer(maps);
077            }
078    
079            return renderer;
080        }
081    
082        private static boolean resetMapsIfNeeded() {
083            boolean needToResetMaps = maps == null;
084            Application newApp = ApplicationManager.getApplication();
085    
086            if (application != newApp) {
087                assert newApp.isUnitTestMode(): "Expected application switch only in tests";
088                application = newApp;
089                needToResetMaps = true;
090            }
091    
092            if (!needToResetMaps) return false;
093    
094            maps = ImmutableList.<DiagnosticFactoryToRendererMap>builder()
095                    .addAll(
096                            KotlinPackage.map(
097                                    Extensions.getExtensions(Extension.EP_NAME),
098                                    new Function1<Extension, DiagnosticFactoryToRendererMap>() {
099                                        @Override
100                                        public DiagnosticFactoryToRendererMap invoke(Extension extension) {
101                                            return extension.getMap();
102                                        }
103                                    }
104                            )
105                    )
106                    .add(MAP)
107                    .build();
108    
109            return true;
110        }
111    
112        @TestOnly
113        @Nullable
114        public static DiagnosticRenderer getRendererForDiagnostic(@NotNull Diagnostic diagnostic) {
115            for (DiagnosticFactoryToRendererMap map : maps) {
116                DiagnosticRenderer renderer = map.get(diagnostic.getFactory());
117    
118                if (renderer != null) return renderer;
119            }
120    
121            return null;
122        }
123    
124        static {
125            MAP.put(UNRESOLVED_REFERENCE, "Unresolved reference: {0}", ELEMENT_TEXT);
126    
127            MAP.put(INVISIBLE_REFERENCE, "Cannot access ''{0}'': it is ''{1}'' in ''{2}''", NAME, TO_STRING, NAME);
128            MAP.put(INVISIBLE_MEMBER, "Cannot access ''{0}'': it is ''{1}'' in ''{2}''", NAME, TO_STRING, NAME);
129    
130            MAP.put(REDECLARATION, "Redeclaration: {0}", STRING);
131            MAP.put(NAME_SHADOWING, "Name shadowed: {0}", STRING);
132    
133            MAP.put(TYPE_MISMATCH, "Type mismatch: inferred type is {1} but {0} was expected", RENDER_TYPE, RENDER_TYPE);
134            MAP.put(INCOMPATIBLE_MODIFIERS, "Incompatible modifiers: ''{0}''", new Renderer<Collection<JetModifierKeywordToken>>() {
135                @NotNull
136                @Override
137                public String render(@NotNull Collection<JetModifierKeywordToken> tokens) {
138                    StringBuilder sb = new StringBuilder();
139                    for (JetKeywordToken token : tokens) {
140                        if (sb.length() != 0) {
141                            sb.append(" ");
142                        }
143                        sb.append(token.getValue());
144                    }
145                    return sb.toString();
146                }
147            });
148            MAP.put(ILLEGAL_MODIFIER, "Illegal modifier ''{0}''", TO_STRING);
149            MAP.put(REPEATED_MODIFIER, "Repeated ''{0}''", TO_STRING);
150            MAP.put(INAPPLICABLE_ANNOTATION, "This annotation is not applicable to class members");
151    
152            MAP.put(REDUNDANT_MODIFIER, "Modifier ''{0}'' is redundant because ''{1}'' is present", TO_STRING, TO_STRING);
153            MAP.put(ABSTRACT_MODIFIER_IN_TRAIT, "Modifier ''abstract'' is redundant in trait");
154            MAP.put(OPEN_MODIFIER_IN_TRAIT, "Modifier ''open'' is redundant in trait");
155            MAP.put(OPEN_MODIFIER_IN_ENUM, "Modifier ''open'' is not applicable for enum class");
156            MAP.put(ABSTRACT_MODIFIER_IN_ENUM, "Modifier ''abstract'' is not applicable for enum class");
157            MAP.put(ILLEGAL_ENUM_ANNOTATION, "Annotation ''enum'' is only applicable for class");
158            MAP.put(REDUNDANT_MODIFIER_IN_GETTER, "Visibility modifiers are redundant in getter");
159            MAP.put(TRAIT_CAN_NOT_BE_FINAL, "Trait cannot be final");
160            MAP.put(TYPE_PARAMETERS_IN_ENUM, "Enum class cannot have type parameters");
161            MAP.put(TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM,
162                    "Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly"); // TODO: message
163            MAP.put(RETURN_NOT_ALLOWED, "'return' is not allowed here");
164            MAP.put(RETURN_NOT_ALLOWED_EXPLICIT_RETURN_TYPE_REQUIRED, "'return' is only allowed in function literals that have return types specified explicitly");
165            MAP.put(PROJECTION_IN_IMMEDIATE_ARGUMENT_TO_SUPERTYPE, "Projections are not allowed for immediate arguments of a supertype");
166            MAP.put(LABEL_NAME_CLASH, "There is more than one label with such a name in this scope");
167            MAP.put(EXPRESSION_EXPECTED_PACKAGE_FOUND, "Expression expected, but a package name found");
168    
169            MAP.put(CANNOT_IMPORT_FROM_ELEMENT, "Cannot import from ''{0}''", NAME);
170            MAP.put(CANNOT_BE_IMPORTED, "Cannot import ''{0}'', functions and properties can be imported only from packages", NAME);
171            MAP.put(CONFLICTING_IMPORT, "Conflicting import, imported name ''{0}'' is ambiguous", STRING);
172            MAP.put(PLATFORM_CLASS_MAPPED_TO_KOTLIN, "This class shouldn''t be used in Kotlin. Use {0} instead.", CLASSES_OR_SEPARATED);
173    
174            MAP.put(CANNOT_INFER_PARAMETER_TYPE,
175                    "Cannot infer a type for this parameter. To specify it explicitly use the {(p : Type) -> ...} notation");
176    
177            MAP.put(NO_BACKING_FIELD_ABSTRACT_PROPERTY, "This property doesn't have a backing field, because it's abstract");
178            MAP.put(NO_BACKING_FIELD_CUSTOM_ACCESSORS,
179                    "This property doesn't have a backing field, because it has custom accessors without reference to the backing field");
180            MAP.put(INACCESSIBLE_BACKING_FIELD, "The backing field is not accessible here");
181            MAP.put(NOT_PROPERTY_BACKING_FIELD, "The referenced variable is not a property and doesn't have backing field");
182    
183            MAP.put(MIXING_NAMED_AND_POSITIONED_ARGUMENTS, "Mixing named and positioned arguments is not allowed");
184            MAP.put(ARGUMENT_PASSED_TWICE, "An argument is already passed for this parameter");
185            MAP.put(NAMED_PARAMETER_NOT_FOUND, "Cannot find a parameter with this name: {0}", ELEMENT_TEXT);
186            MAP.put(NAMED_ARGUMENTS_NOT_ALLOWED, "Named arguments are not allowed for non-Kotlin functions");
187            MAP.put(VARARG_OUTSIDE_PARENTHESES, "Passing value as a vararg is only allowed inside a parenthesized argument list");
188            MAP.put(NON_VARARG_SPREAD, "The spread operator (*foo) may only be applied in a vararg position");
189    
190            MAP.put(MANY_FUNCTION_LITERAL_ARGUMENTS, "Only one function literal is allowed outside a parenthesized argument list");
191            MAP.put(PROPERTY_WITH_NO_TYPE_NO_INITIALIZER, "This property must either have a type annotation, be initialized or be delegated");
192            MAP.put(VARIABLE_WITH_NO_TYPE_NO_INITIALIZER, "This variable must either have a type annotation or be initialized");
193    
194            MAP.put(INITIALIZER_REQUIRED_FOR_MULTIDECLARATION, "Initializer required for multi-declaration");
195            MAP.put(COMPONENT_FUNCTION_MISSING, "Multi-declaration initializer of type {1} must have a ''{0}()'' function", TO_STRING, RENDER_TYPE);
196            MAP.put(COMPONENT_FUNCTION_AMBIGUITY, "Function ''{0}()'' is ambiguous for this expression: {1}", TO_STRING, AMBIGUOUS_CALLS);
197            MAP.put(COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH, "''{0}()'' function returns ''{1}'', but ''{2}'' is expected",
198                                                                                        TO_STRING, RENDER_TYPE, RENDER_TYPE);
199    
200            MAP.put(ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS, "This property cannot be declared abstract");
201            MAP.put(ABSTRACT_PROPERTY_WITH_INITIALIZER, "Property with initializer cannot be abstract");
202            MAP.put(ABSTRACT_PROPERTY_WITH_GETTER, "Property with getter implementation cannot be abstract");
203            MAP.put(ABSTRACT_PROPERTY_WITH_SETTER, "Property with setter implementation cannot be abstract");
204    
205            MAP.put(ABSTRACT_DELEGATED_PROPERTY, "Delegated property cannot be abstract");
206            MAP.put(ACCESSOR_FOR_DELEGATED_PROPERTY, "Delegated property cannot have accessor");
207            MAP.put(DELEGATED_PROPERTY_IN_TRAIT, "Delegated properties are not allowed in traits");
208            MAP.put(LOCAL_VARIABLE_WITH_DELEGATE, "Local variables are not allowed to have delegates");
209    
210            MAP.put(PACKAGE_MEMBER_CANNOT_BE_PROTECTED, "Package member cannot be protected");
211    
212            MAP.put(GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY, "Getter visibility must be the same as property visibility");
213            MAP.put(BACKING_FIELD_IN_TRAIT, "Property in a trait cannot have a backing field");
214            MAP.put(MUST_BE_INITIALIZED, "Property must be initialized");
215            MAP.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT, "Property must be initialized or be abstract");
216            MAP.put(PROPERTY_INITIALIZER_IN_TRAIT, "Property initializers are not allowed in traits");
217            MAP.put(FINAL_PROPERTY_IN_TRAIT, "Abstract property in trait cannot be final");
218            MAP.put(EXTENSION_PROPERTY_WITH_BACKING_FIELD, "Extension property cannot be initialized because it has no backing field");
219            MAP.put(PROPERTY_INITIALIZER_NO_BACKING_FIELD, "Initializer is not allowed here because this property has no backing field");
220            MAP.put(ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS, "Abstract property ''{0}'' in non-abstract class ''{1}''", STRING, NAME);
221            MAP.put(ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS, "Abstract function ''{0}'' in non-abstract class ''{1}''", STRING, NAME);
222            MAP.put(ABSTRACT_FUNCTION_WITH_BODY, "A function ''{0}'' with body cannot be abstract", NAME);
223            MAP.put(NON_ABSTRACT_FUNCTION_WITH_NO_BODY, "Function ''{0}'' without a body must be abstract", NAME);
224            MAP.put(FINAL_FUNCTION_WITH_NO_BODY, "Function ''{0}'' without body cannot be final", NAME);
225    
226            MAP.put(NON_MEMBER_FUNCTION_NO_BODY, "Function ''{0}'' must have a body", NAME);
227            MAP.put(NON_FINAL_MEMBER_IN_FINAL_CLASS, "\"open\" has no effect in a final class");
228    
229            MAP.put(PUBLIC_MEMBER_SHOULD_SPECIFY_TYPE, "Public or protected member should have specified type");
230    
231            MAP.put(PROJECTION_ON_NON_CLASS_TYPE_ARGUMENT, "Projections are not allowed on type arguments of functions and properties");
232            MAP.put(SUPERTYPE_NOT_INITIALIZED, "This type has a constructor, and thus must be initialized here");
233            MAP.put(NOTHING_TO_OVERRIDE, "''{0}'' overrides nothing", NAME);
234            MAP.put(VIRTUAL_MEMBER_HIDDEN, "''{0}'' hides member of supertype ''{2}'' and needs ''override'' modifier", NAME, NAME, NAME);
235    
236            MAP.put(DATA_CLASS_OVERRIDE_CONFLICT, "Function ''{0}'' generated for the data class conflicts with member of supertype ''{1}''", NAME, NAME);
237    
238            MAP.put(CANNOT_OVERRIDE_INVISIBLE_MEMBER, "''{0}'' has no access to ''{1}'', so it cannot override it", FQ_NAMES_IN_TYPES,
239                    FQ_NAMES_IN_TYPES);
240            MAP.put(CANNOT_INFER_VISIBILITY, "Cannot infer visibility for ''{0}''. Please specify it explicitly", COMPACT);
241    
242            MAP.put(ENUM_ENTRY_SHOULD_BE_INITIALIZED, "Missing delegation specifier ''{0}''", NAME);
243            MAP.put(ENUM_ENTRY_ILLEGAL_TYPE, "The type constructor of enum entry should be ''{0}''", NAME);
244    
245            MAP.put(UNINITIALIZED_VARIABLE, "Variable ''{0}'' must be initialized", NAME);
246            MAP.put(UNINITIALIZED_PARAMETER, "Parameter ''{0}'' is uninitialized here", NAME);
247            MAP.put(UNUSED_VARIABLE, "Variable ''{0}'' is never used", NAME);
248            MAP.put(UNUSED_PARAMETER, "Parameter ''{0}'' is never used", NAME);
249            MAP.put(ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE, "Variable ''{0}'' is assigned but never accessed", NAME);
250            MAP.put(VARIABLE_WITH_REDUNDANT_INITIALIZER, "Variable ''{0}'' initializer is redundant", NAME);
251            MAP.put(UNUSED_VALUE, "The value ''{0}'' assigned to ''{1}'' is never used", ELEMENT_TEXT, FQ_NAMES_IN_TYPES);
252            MAP.put(UNUSED_CHANGED_VALUE, "The value changed at ''{0}'' is never used", ELEMENT_TEXT);
253            MAP.put(UNUSED_EXPRESSION, "The expression is unused");
254            MAP.put(UNUSED_FUNCTION_LITERAL, "The function literal is unused. If you mean block, you can use 'run { ... }'");
255    
256            MAP.put(VAL_REASSIGNMENT, "Val cannot be reassigned", NAME);
257            MAP.put(SETTER_PROJECTED_OUT, "Setter for ''{0}'' is removed by type projection", NAME);
258            MAP.put(INVISIBLE_SETTER, "Cannot assign to ''{0}'': the setter is ''{1}'' in ''{2}''", NAME, TO_STRING, NAME);
259            MAP.put(INITIALIZATION_BEFORE_DECLARATION, "Variable cannot be initialized before declaration", NAME);
260            MAP.put(VARIABLE_EXPECTED, "Variable expected");
261    
262            MAP.put(VAL_OR_VAR_ON_LOOP_PARAMETER, "''{0}'' on loop parameter is not allowed", TO_STRING);
263            MAP.put(VAL_OR_VAR_ON_FUN_PARAMETER, "''{0}'' on function parameter is not allowed", TO_STRING);
264            MAP.put(VAL_OR_VAR_ON_CATCH_PARAMETER, "''{0}'' on catch parameter is not allowed", TO_STRING);
265    
266            MAP.put(INITIALIZATION_USING_BACKING_FIELD_CUSTOM_SETTER,
267                    "This property has a custom setter, so initialization using backing field required", NAME);
268            MAP.put(INITIALIZATION_USING_BACKING_FIELD_OPEN_SETTER,
269                    "Setter of this property can be overridden, so initialization using backing field required", NAME);
270    
271            MAP.put(UNREACHABLE_CODE, "Unreachable code", TO_STRING);
272    
273            MAP.put(MANY_CLASS_OBJECTS, "Only one class object is allowed per class");
274            MAP.put(CLASS_OBJECT_NOT_ALLOWED, "A class object is not allowed here");
275            MAP.put(LOCAL_OBJECT_NOT_ALLOWED, "Named object ''{0}'' is a singleton and cannot be local. Try to use anonymous object instead", NAME);
276            MAP.put(LOCAL_ENUM_NOT_ALLOWED, "Enum class ''{0}'' cannot be local", NAME);
277            MAP.put(DELEGATION_IN_TRAIT, "Traits cannot use delegation");
278            MAP.put(DELEGATION_NOT_TO_TRAIT, "Only traits can be delegated to");
279            MAP.put(UNMET_TRAIT_REQUIREMENT, "Super trait ''{0}'' requires subclasses to extend ''{1}''", NAME, NAME);
280            MAP.put(NO_CONSTRUCTOR, "This class does not have a constructor");
281            MAP.put(NOT_A_CLASS, "Not a class");
282            MAP.put(ILLEGAL_ESCAPE_SEQUENCE, "Illegal escape sequence");
283    
284            MAP.put(LOCAL_EXTENSION_PROPERTY, "Local extension properties are not allowed");
285            MAP.put(LOCAL_VARIABLE_WITH_GETTER, "Local variables are not allowed to have getters");
286            MAP.put(LOCAL_VARIABLE_WITH_SETTER, "Local variables are not allowed to have setters");
287            MAP.put(VAL_WITH_SETTER, "A 'val'-property cannot have a setter");
288    
289            MAP.put(NO_GET_METHOD, "No get method providing array access");
290            MAP.put(NO_SET_METHOD, "No set method providing array access");
291    
292            MAP.put(INC_DEC_SHOULD_NOT_RETURN_UNIT, "Functions inc(), dec() shouldn't return Unit to be used by operators ++, --");
293            MAP.put(ASSIGNMENT_OPERATOR_SHOULD_RETURN_UNIT, "Function ''{0}'' should return Unit to be used by corresponding operator ''{1}''",
294                    NAME, ELEMENT_TEXT);
295            MAP.put(ASSIGN_OPERATOR_AMBIGUITY, "Assignment operators ambiguity: {0}", AMBIGUOUS_CALLS);
296    
297            MAP.put(EQUALS_MISSING, "No method 'equals(kotlin.Any?): kotlin.Boolean' available");
298            MAP.put(ASSIGNMENT_IN_EXPRESSION_CONTEXT, "Assignments are not expressions, and only expressions are allowed in this context");
299            MAP.put(PACKAGE_IS_NOT_AN_EXPRESSION, "'package' is not an expression, it can only be used on the left-hand side of a dot ('.')");
300            MAP.put(SUPER_IS_NOT_AN_EXPRESSION, "''{0}'' is not an expression, it can only be used on the left-hand side of a dot ('.')", STRING);
301            MAP.put(SUPER_CANT_BE_EXTENSION_RECEIVER, "''{0}'' is not an expression, it can not be used as a receiver for extension functions", STRING);
302            MAP.put(DECLARATION_IN_ILLEGAL_CONTEXT, "Declarations are not allowed in this position");
303            MAP.put(SETTER_PARAMETER_WITH_DEFAULT_VALUE, "Setter parameters cannot have default values");
304            MAP.put(NO_THIS, "'this' is not defined in this context");
305            MAP.put(SUPER_NOT_AVAILABLE, "No supertypes are accessible in this context");
306            MAP.put(SUPERCLASS_NOT_ACCESSIBLE_FROM_TRAIT, "Superclass is not accessible from trait");
307            MAP.put(AMBIGUOUS_SUPER, "Many supertypes available, please specify the one you mean in angle brackets, e.g. 'super<Foo>'");
308            MAP.put(ABSTRACT_SUPER_CALL, "Abstract member cannot be accessed directly");
309            MAP.put(NOT_A_SUPERTYPE, "Not a supertype");
310            MAP.put(TYPE_ARGUMENTS_REDUNDANT_IN_SUPER_QUALIFIER, "Type arguments do not need to be specified in a 'super' qualifier");
311            MAP.put(USELESS_CAST_STATIC_ASSERT_IS_FINE, "No cast needed. You can use ':' if you need a cast to a super type");
312            MAP.put(USELESS_CAST, "No cast needed");
313            MAP.put(CAST_NEVER_SUCCEEDS, "This cast can never succeed");
314            MAP.put(DYNAMIC_NOT_ALLOWED, "Dynamic types are not allowed in this position");
315            MAP.put(USELESS_NULLABLE_CHECK, "Non-null type is checked for instance of nullable type");
316            MAP.put(WRONG_SETTER_PARAMETER_TYPE, "Setter parameter type must be equal to the type of the property, i.e. ''{0}''", RENDER_TYPE, RENDER_TYPE);
317            MAP.put(WRONG_GETTER_RETURN_TYPE, "Getter return type must be equal to the type of the property, i.e. ''{0}''", RENDER_TYPE, RENDER_TYPE);
318            MAP.put(NO_CLASS_OBJECT, "Please specify constructor invocation; classifier ''{0}'' does not have a class object", NAME);
319            MAP.put(TYPE_PARAMETER_IS_NOT_AN_EXPRESSION, "Type parameter ''{0}'' is not an expression", NAME);
320            MAP.put(TYPE_PARAMETER_ON_LHS_OF_DOT, "Type parameter ''{0}'' cannot have or inherit a class object, so it cannot be on the left hand side of dot", NAME);
321            MAP.put(NO_GENERICS_IN_SUPERTYPE_SPECIFIER, "Generic arguments of the base type must be specified");
322            MAP.put(NESTED_CLASS_ACCESSED_VIA_INSTANCE_REFERENCE, "Nested {0} accessed via instance reference", RENDER_CLASS_OR_OBJECT_NAME);
323            MAP.put(NESTED_CLASS_SHOULD_BE_QUALIFIED, "Nested {0} should be qualified as ''{1}''", RENDER_CLASS_OR_OBJECT_NAME, TO_STRING);
324    
325            MAP.put(INACCESSIBLE_OUTER_CLASS_EXPRESSION, "Expression is inaccessible from a nested class ''{0}'', use ''inner'' keyword to make the class inner", NAME);
326            MAP.put(NESTED_CLASS_NOT_ALLOWED, "Nested class is not allowed here, use ''inner'' keyword to make the class inner");
327    
328            MAP.put(HAS_NEXT_MISSING, "hasNext() cannot be called on iterator() of type ''{0}''", RENDER_TYPE);
329            MAP.put(HAS_NEXT_FUNCTION_AMBIGUITY, "hasNext() is ambiguous for iterator() of type ''{0}''", RENDER_TYPE);
330            MAP.put(HAS_NEXT_FUNCTION_NONE_APPLICABLE, "None of the hasNext() functions is applicable for iterator() of type ''{0}''", RENDER_TYPE);
331            MAP.put(HAS_NEXT_FUNCTION_TYPE_MISMATCH, "The ''iterator().hasNext()'' function of the loop range must return kotlin.Boolean, but returns {0}", RENDER_TYPE);
332    
333            MAP.put(NEXT_MISSING, "next() cannot be called on iterator() of type ''{0}''", RENDER_TYPE);
334            MAP.put(NEXT_AMBIGUITY, "next() is ambiguous for iterator() of type ''{0}''", RENDER_TYPE);
335            MAP.put(NEXT_NONE_APPLICABLE, "None of the next() functions is applicable for iterator() of type ''{0}''", RENDER_TYPE);
336    
337            MAP.put(ITERATOR_MISSING, "For-loop range must have an iterator() method");
338            MAP.put(ITERATOR_AMBIGUITY, "Method ''iterator()'' is ambiguous for this expression: {0}", AMBIGUOUS_CALLS);
339    
340            MAP.put(DELEGATE_SPECIAL_FUNCTION_MISSING, "Missing ''{0}'' method on delegate of type ''{1}''", STRING, RENDER_TYPE);
341            MAP.put(DELEGATE_SPECIAL_FUNCTION_AMBIGUITY, "Overload resolution ambiguity on method ''{0}'': {1}",  STRING, AMBIGUOUS_CALLS);
342            MAP.put(DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, "Property delegate must have a ''{0}'' method. None of the following functions is suitable: {1}",
343                    STRING, AMBIGUOUS_CALLS);
344            MAP.put(DELEGATE_SPECIAL_FUNCTION_RETURN_TYPE_MISMATCH, "The ''{0}'' function of property delegate is expected to return ''{1}'', but returns ''{2}''",
345                    STRING, RENDER_TYPE, RENDER_TYPE);
346            MAP.put(DELEGATE_PD_METHOD_NONE_APPLICABLE, "''{0}'' method may be missing. None of the following functions will be called: {1}", STRING, AMBIGUOUS_CALLS);
347    
348            MAP.put(COMPARE_TO_TYPE_MISMATCH, "''compareTo()'' must return kotlin.Int, but returns {0}", RENDER_TYPE);
349    
350            MAP.put(RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY,
351                    "Returns are not allowed for functions with expression body. Use block body in '{...}'");
352            MAP.put(NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY, "A 'return' expression required in a function with a block body ('{...}')");
353            MAP.put(RETURN_TYPE_MISMATCH, "This function must return a value of type {0}", RENDER_TYPE);
354            MAP.put(EXPECTED_TYPE_MISMATCH, "Expected a value of type {0}", RENDER_TYPE);
355            MAP.put(ASSIGNMENT_TYPE_MISMATCH,
356                    "Expected a value of type {0}. Assignment operation is not an expression, so it does not return any value", RENDER_TYPE);
357    
358            MAP.put(EXPECTED_PARAMETER_TYPE_MISMATCH, "Expected parameter of type {0}", RENDER_TYPE);
359            MAP.put(EXPECTED_RETURN_TYPE_MISMATCH, "Expected return type {0}", RENDER_TYPE);
360            MAP.put(EXPECTED_PARAMETERS_NUMBER_MISMATCH, "Expected {0,choice,0#no parameters|1#one parameter of type|1<{0,number,integer} parameters of types} {1}", null, RENDER_COLLECTION_OF_TYPES);
361    
362            MAP.put(IMPLICIT_CAST_TO_UNIT_OR_ANY, "Type is cast to ''{0}''. Please specify ''{0}'' as expected type, if you mean such cast",
363                    RENDER_TYPE);
364            MAP.put(EXPRESSION_EXPECTED, "{0} is not an expression, and only expressions are allowed here", new Renderer<JetExpression>() {
365                @NotNull
366                @Override
367                public String render(@NotNull JetExpression expression) {
368                    String expressionType = expression.toString();
369                    return expressionType.substring(0, 1) +
370                           expressionType.substring(1).toLowerCase();
371                }
372            });
373    
374            MAP.put(UPPER_BOUND_VIOLATED, "Type argument is not within its bounds: should be subtype of ''{0}''", RENDER_TYPE, RENDER_TYPE);
375            MAP.put(FINAL_CLASS_OBJECT_UPPER_BOUND, "''{0}'' is a final type, and thus a class object cannot extend it", RENDER_TYPE);
376            MAP.put(FINAL_UPPER_BOUND, "''{0}'' is a final type, and thus a value of the type parameter is predetermined", RENDER_TYPE);
377            MAP.put(DYNAMIC_UPPER_BOUND, "Dynamic type can not be used as an upper bound");
378            MAP.put(USELESS_ELVIS, "Elvis operator (?:) always returns the left operand of non-nullable type {0}", RENDER_TYPE);
379            MAP.put(CONFLICTING_UPPER_BOUNDS, "Upper bounds of {0} have empty intersection", NAME);
380            MAP.put(CONFLICTING_CLASS_OBJECT_UPPER_BOUNDS, "Class object upper bounds of {0} have empty intersection", NAME);
381    
382            MAP.put(TOO_MANY_ARGUMENTS, "Too many arguments for {0}", FQ_NAMES_IN_TYPES);
383    
384            MAP.put(CONSTANT_EXPECTED_TYPE_MISMATCH, "An {0} literal does not conform to the expected type {1}", STRING, RENDER_TYPE);
385            MAP.put(INTEGER_OVERFLOW, "This operation has led to an overflow");
386            MAP.put(INT_LITERAL_OUT_OF_RANGE, "The value is out of range");
387            MAP.put(WRONG_LONG_SUFFIX, "Use 'L' instead of 'l'");
388            MAP.put(FLOAT_LITERAL_OUT_OF_RANGE, "The value is out of range");
389            MAP.put(INCORRECT_CHARACTER_LITERAL, "Incorrect character literal");
390            MAP.put(EMPTY_CHARACTER_LITERAL, "Empty character literal");
391            MAP.put(TOO_MANY_CHARACTERS_IN_CHARACTER_LITERAL, "Too many characters in a character literal ''{0}''", ELEMENT_TEXT);
392            MAP.put(ILLEGAL_ESCAPE, "Illegal escape: ''{0}''", ELEMENT_TEXT);
393            MAP.put(NULL_FOR_NONNULL_TYPE, "Null can not be a value of a non-null type {0}", RENDER_TYPE);
394    
395            MAP.put(ELSE_MISPLACED_IN_WHEN, "'else' entry must be the last one in a when-expression");
396    
397            MAP.put(NO_ELSE_IN_WHEN, "'when' expression must contain 'else' branch");
398            MAP.put(TYPE_MISMATCH_IN_RANGE, "Type mismatch: incompatible types of range and element checked in it");
399            MAP.put(CYCLIC_INHERITANCE_HIERARCHY, "There's a cycle in the inheritance hierarchy for this type");
400    
401            MAP.put(MANY_CLASSES_IN_SUPERTYPE_LIST, "Only one class may appear in a supertype list");
402            MAP.put(SUPERTYPE_NOT_A_CLASS_OR_TRAIT, "Only classes and traits may serve as supertypes");
403            MAP.put(SUPERTYPE_INITIALIZED_IN_TRAIT, "Traits cannot initialize supertypes");
404            MAP.put(CLASS_IN_SUPERTYPE_FOR_ENUM, "Enum class cannot inherit from classes");
405            MAP.put(CONSTRUCTOR_IN_TRAIT, "A trait may not have a constructor");
406            MAP.put(SUPERTYPE_APPEARS_TWICE, "A supertype appears twice");
407            MAP.put(FINAL_SUPERTYPE, "This type is final, so it cannot be inherited from");
408            MAP.put(SINGLETON_IN_SUPERTYPE, "Cannot inherit from a singleton");
409    
410            MAP.put(ILLEGAL_SELECTOR, "Expression ''{0}'' cannot be a selector (occur after a dot)", STRING);
411    
412            MAP.put(NO_TAIL_CALLS_FOUND, "A function is marked as tail-recursive but no tail calls are found");
413            MAP.put(VALUE_PARAMETER_WITH_NO_TYPE_ANNOTATION, "A type annotation is required on a value parameter");
414            MAP.put(BREAK_OR_CONTINUE_OUTSIDE_A_LOOP, "'break' and 'continue' are only allowed inside a loop");
415            MAP.put(BREAK_OR_CONTINUE_JUMPS_ACROSS_FUNCTION_BOUNDARY, "'break' or 'continue' jumps across a function boundary");
416            MAP.put(NOT_A_LOOP_LABEL, "The label ''{0}'' does not denote a loop", STRING);
417            MAP.put(NOT_A_RETURN_LABEL, "The label ''{0}'' does not reference to a context from which we can return", STRING);
418    
419            MAP.put(ANONYMOUS_INITIALIZER_IN_TRAIT, "Anonymous initializers are not allowed in traits");
420            MAP.put(NULLABLE_SUPERTYPE, "A supertype cannot be nullable");
421            MAP.put(DYNAMIC_SUPERTYPE, "A supertype cannot be dynamic");
422            MAP.put(REDUNDANT_NULLABLE, "Redundant '?'");
423            MAP.put(BASE_WITH_NULLABLE_UPPER_BOUND, "''{0}'' has a nullable upper bound. " +
424                                                    "This means that a value of this type may be null. " +
425                                                    "Using ''{0}?'' is likely to mislead the reader", RENDER_TYPE);
426            MAP.put(UNSAFE_CALL, "Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type {0}", RENDER_TYPE);
427            MAP.put(AMBIGUOUS_LABEL, "Ambiguous label");
428            MAP.put(UNSUPPORTED, "Unsupported [{0}]", STRING);
429            MAP.put(UNNECESSARY_SAFE_CALL, "Unnecessary safe call on a non-null receiver of type {0}", RENDER_TYPE);
430            MAP.put(UNNECESSARY_NOT_NULL_ASSERTION, "Unnecessary non-null assertion (!!) on a non-null receiver of type {0}", RENDER_TYPE);
431            MAP.put(NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER, "{0} does not refer to a type parameter of {1}", new Renderer<JetTypeConstraint>() {
432                @NotNull
433                @Override
434                public String render(@NotNull JetTypeConstraint typeConstraint) {
435                    //noinspection ConstantConditions
436                    return typeConstraint.getSubjectTypeParameterName().getReferencedName();
437                }
438            }, DECLARATION_NAME);
439            MAP.put(SMARTCAST_IMPOSSIBLE,
440                    "Smart cast to ''{0}'' is impossible, because ''{1}'' could have changed since the is-check", RENDER_TYPE, STRING);
441    
442            MAP.put(VARIANCE_ON_TYPE_PARAMETER_OF_FUNCTION_OR_PROPERTY, "Variance annotations are only allowed for type parameters of classes and traits");
443            MAP.put(TYPE_VARIANCE_CONFLICT, "Type parameter {0} is declared as ''{1}'' but occurs in ''{2}'' position in type {3}",
444                    new MultiRenderer<VarianceConflictDiagnosticData>() {
445                        @NotNull
446                        @Override
447                        public String[] render(@NotNull VarianceConflictDiagnosticData data) {
448                            return new String[] {
449                                NAME.render(data.getTypeParameter()),
450                                RENDER_POSITION_VARIANCE.render(data.getTypeParameter().getVariance()),
451                                RENDER_POSITION_VARIANCE.render(data.getOccurrencePosition()),
452                                RENDER_TYPE.render(data.getContainingType())
453                            };
454                        }
455                    });
456    
457            MAP.put(REDUNDANT_PROJECTION, "Projection is redundant: the corresponding type parameter of {0} has the same variance", NAME);
458            MAP.put(CONFLICTING_PROJECTION, "Projection is conflicting with variance of the corresponding type parameter of {0}. Remove the projection or replace it with ''*''", NAME);
459    
460            MAP.put(TYPE_MISMATCH_IN_FOR_LOOP, "The loop iterates over values of type {0} but the parameter is declared to be {1}", RENDER_TYPE,
461                    RENDER_TYPE);
462            MAP.put(TYPE_MISMATCH_IN_CONDITION, "Condition must be of type kotlin.Boolean, but is of type {0}", RENDER_TYPE);
463            MAP.put(INCOMPATIBLE_TYPES, "Incompatible types: {0} and {1}", RENDER_TYPE, RENDER_TYPE);
464            MAP.put(EXPECTED_CONDITION, "Expected condition of type kotlin.Boolean");
465    
466            MAP.put(CANNOT_CHECK_FOR_ERASED, "Cannot check for instance of erased type: {0}", RENDER_TYPE);
467            MAP.put(UNCHECKED_CAST, "Unchecked cast: {0} to {1}", RENDER_TYPE, RENDER_TYPE);
468    
469            MAP.put(INCONSISTENT_TYPE_PARAMETER_VALUES, "Type parameter {0} of ''{1}'' has inconsistent values: {2}", NAME, NAME, RENDER_COLLECTION_OF_TYPES);
470    
471            MAP.put(EQUALITY_NOT_APPLICABLE, "Operator ''{0}'' cannot be applied to ''{1}'' and ''{2}''", new Renderer<JetSimpleNameExpression>() {
472                @NotNull
473                @Override
474                public String render(@NotNull JetSimpleNameExpression nameExpression) {
475                    //noinspection ConstantConditions
476                    return nameExpression.getReferencedName();
477                }
478            }, RENDER_TYPE, RENDER_TYPE);
479    
480            MAP.put(SENSELESS_COMPARISON, "Condition ''{0}'' is always ''{1}''", ELEMENT_TEXT, TO_STRING);
481            MAP.put(SENSELESS_NULL_IN_WHEN, "Expression under 'when' is never equal to null");
482    
483            MAP.put(OVERRIDING_FINAL_MEMBER, "''{0}'' in ''{1}'' is final and cannot be overridden", NAME, NAME);
484            MAP.put(CANNOT_WEAKEN_ACCESS_PRIVILEGE, "Cannot weaken access privilege ''{0}'' for ''{1}'' in ''{2}''", TO_STRING, NAME, NAME);
485            MAP.put(CANNOT_CHANGE_ACCESS_PRIVILEGE, "Cannot change access privilege ''{0}'' for ''{1}'' in ''{2}''", TO_STRING, NAME, NAME);
486    
487            MAP.put(RETURN_TYPE_MISMATCH_ON_OVERRIDE, "Return type of ''{0}'' is not a subtype of the return type of overridden member {1}",
488                    NAME, FQ_NAMES_IN_TYPES);
489    
490            MAP.put(PROPERTY_TYPE_MISMATCH_ON_OVERRIDE, "Type of ''{0}'' doesn't match to the type of overridden var-property {1}",
491                    NAME, FQ_NAMES_IN_TYPES);
492    
493            MAP.put(VAR_OVERRIDDEN_BY_VAL, "Var-property {0} cannot be overridden by val-property {1}", FQ_NAMES_IN_TYPES, FQ_NAMES_IN_TYPES);
494    
495            MAP.put(ABSTRACT_MEMBER_NOT_IMPLEMENTED, "{0} must be declared abstract or implement abstract member {1}", RENDER_CLASS_OR_OBJECT,
496                    FQ_NAMES_IN_TYPES);
497    
498            MAP.put(MANY_IMPL_MEMBER_NOT_IMPLEMENTED, "{0} must override {1} because it inherits many implementations of it",
499                    RENDER_CLASS_OR_OBJECT, FQ_NAMES_IN_TYPES);
500    
501            MAP.put(CONFLICTING_OVERLOADS, "''{0}'' is already defined in {1}", COMPACT_WITH_MODIFIERS, STRING);
502            MAP.put(ILLEGAL_PLATFORM_NAME, "Illegal platform name: ''{0}''", STRING);
503    
504            MAP.put(FUNCTION_EXPECTED, "Expression ''{0}''{1} cannot be invoked as a function. The function 'invoke()' is not found", ELEMENT_TEXT, new Renderer<JetType>() {
505                @NotNull
506                @Override
507                public String render(@NotNull JetType type) {
508                    if (type.isError()) return "";
509                    return " of type '" + RENDER_TYPE.render(type) + "'";
510                }
511            });
512            MAP.put(FUNCTION_CALL_EXPECTED, "Function invocation ''{0}({1})'' expected", ELEMENT_TEXT,new Renderer<Boolean>() {
513                @NotNull
514                @Override
515                public String render(@NotNull Boolean hasValueParameters) {
516                    return hasValueParameters ? "..." : "";
517                }
518            });
519            MAP.put(NON_TAIL_RECURSIVE_CALL, "Recursive call is not a tail call");
520            MAP.put(TAIL_RECURSION_IN_TRY_IS_NOT_SUPPORTED, "Tail recursion optimization inside try/catch/finally is not supported");
521    
522            MAP.put(RESULT_TYPE_MISMATCH, "{0} must return {1} but returns {2}", STRING, RENDER_TYPE, RENDER_TYPE);
523            MAP.put(UNSAFE_INFIX_CALL,
524                    "Infix call corresponds to a dot-qualified call ''{0}.{1}({2})'' which is not allowed on a nullable receiver ''{0}''. " +
525                    "Use '?.'-qualified call instead",
526                    STRING, STRING, STRING);
527    
528            MAP.put(OVERLOAD_RESOLUTION_AMBIGUITY, "Overload resolution ambiguity: {0}", AMBIGUOUS_CALLS);
529            MAP.put(NONE_APPLICABLE, "None of the following functions can be called with the arguments supplied: {0}", AMBIGUOUS_CALLS);
530            MAP.put(CANNOT_COMPLETE_RESOLVE, "Cannot choose among the following candidates without completing type inference: {0}", AMBIGUOUS_CALLS);
531            MAP.put(UNRESOLVED_REFERENCE_WRONG_RECEIVER, "Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: {0}", AMBIGUOUS_CALLS);
532    
533            MAP.put(NO_VALUE_FOR_PARAMETER, "No value passed for parameter {0}", NAME);
534            MAP.put(MISSING_RECEIVER, "A receiver of type {0} is required", RENDER_TYPE);
535            MAP.put(NO_RECEIVER_ALLOWED, "No receiver can be passed to this function or property");
536    
537            MAP.put(CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS, "Cannot create an instance of an abstract class");
538    
539            MAP.put(TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS, "Type inference failed: {0}", TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS_RENDERER);
540            MAP.put(TYPE_INFERENCE_CANNOT_CAPTURE_TYPES, "Type inference failed: {0}", TYPE_INFERENCE_CANNOT_CAPTURE_TYPES_RENDERER);
541            MAP.put(TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER, "Type inference failed: {0}", TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER_RENDERER);
542            MAP.put(TYPE_INFERENCE_TYPE_CONSTRUCTOR_MISMATCH, "Type inference failed: {0}", TYPE_INFERENCE_TYPE_CONSTRUCTOR_MISMATCH_RENDERER);
543            MAP.put(TYPE_INFERENCE_UPPER_BOUND_VIOLATED, "{0}", TYPE_INFERENCE_UPPER_BOUND_VIOLATED_RENDERER);
544            MAP.put(TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH, "Type inference failed. Expected type mismatch: found: {1} required: {0}", RENDER_TYPE, RENDER_TYPE);
545    
546            MAP.put(WRONG_NUMBER_OF_TYPE_ARGUMENTS, "{0,choice,0#No type arguments|1#Type argument|1<{0,number,integer} type arguments} expected", (Renderer) null);
547            MAP.put(NO_TYPE_ARGUMENTS_ON_RHS, "{0,choice,0#No type arguments|1#Type argument|1<{0,number,integer} type arguments} expected. " +
548                                                               "Use ''{1}'' if you don''t want to pass type arguments", null, STRING);
549    
550            MAP.put(DANGLING_FUNCTION_LITERAL_ARGUMENT_SUSPECTED,
551                    "This expression is treated as an argument to the function call on the previous line. " +
552                    "Separate it with a semicolon (;) if it is not intended to be an argument.");
553    
554            MAP.put(TYPE_PARAMETER_AS_REIFIED, "Cannot use ''{0}'' as reified type parameter. Use a class instead.", NAME);
555            MAP.put(REIFIED_TYPE_PARAMETER_NO_INLINE, "Only type parameters of inline functions can be reified");
556            MAP.put(REIFIED_TYPE_FORBIDDEN_SUBSTITUTION, "Cannot use ''{0}'' as reified type parameter", RENDER_TYPE);
557    
558            MAP.put(SUPERTYPES_FOR_ANNOTATION_CLASS, "Annotation class cannot have supertypes");
559            MAP.put(MISSING_VAL_ON_ANNOTATION_PARAMETER, "'val' keyword is missing on annotation parameter");
560            MAP.put(ANNOTATION_CLASS_CONSTRUCTOR_CALL, "Annotation class cannot be instantiated");
561            MAP.put(NOT_AN_ANNOTATION_CLASS, "''{0}'' is not an annotation class", NAME);
562            MAP.put(ANNOTATION_CLASS_WITH_BODY, "Body is not allowed for annotation class");
563            MAP.put(INVALID_TYPE_OF_ANNOTATION_MEMBER, "Invalid type of annotation member");
564            MAP.put(NULLABLE_TYPE_OF_ANNOTATION_MEMBER, "An annotation parameter cannot be nullable");
565            MAP.put(ILLEGAL_ANNOTATION_KEYWORD, "''annotation'' keyword is only applicable for class");
566            MAP.put(ANNOTATION_PARAMETER_MUST_BE_CONST, "An annotation parameter must be a compile-time constant");
567            MAP.put(ANNOTATION_PARAMETER_MUST_BE_ENUM_CONST, "An enum annotation parameter must be a enum constant");
568            MAP.put(ANNOTATION_PARAMETER_MUST_BE_CLASS_LITERAL, "An annotation parameter must be a class literal");
569    
570            MAP.put(DEFAULT_VALUE_NOT_ALLOWED_IN_OVERRIDE, "An overriding function is not allowed to specify default values for its parameters");
571    
572    
573            String multipleDefaultsMessage = "More than one overridden descriptor declares a default value for ''{0}''. " +
574                                             "As the compiler can not make sure these values agree, this is not allowed.";
575            MAP.put(MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES, multipleDefaultsMessage, FQ_NAMES_IN_TYPES);
576            MAP.put(MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE, multipleDefaultsMessage, FQ_NAMES_IN_TYPES);
577    
578            MAP.put(PARAMETER_NAME_CHANGED_ON_OVERRIDE, "The corresponding parameter in the supertype ''{0}'' is named ''{1}''. " +
579                                                        "This may cause problems when calling this function with named arguments.", NAME, NAME);
580    
581            MAP.put(DIFFERENT_NAMES_FOR_THE_SAME_PARAMETER_IN_SUPERTYPES,
582                        "Names of the parameter #{1} conflict in the following members of supertypes: ''{0}''. " +
583                        "This may cause problems when calling this function with named arguments.", commaSeparated(FQ_NAMES_IN_TYPES), TO_STRING);
584    
585            MAP.put(AMBIGUOUS_ANONYMOUS_TYPE_INFERRED, "Right-hand side has anonymous type. Please specify type explicitly", TO_STRING);
586    
587            MAP.put(REFLECTION_TYPES_NOT_LOADED, "Reflection types can't be loaded. Please ensure that you have Kotlin Runtime in your classpath");
588    
589            MAP.put(EXTENSION_IN_CLASS_REFERENCE_NOT_ALLOWED,
590                    "''{0}'' is a member and an extension at the same time. References to such elements are not allowed", NAME);
591            MAP.put(CALLABLE_REFERENCE_LHS_NOT_A_CLASS, "Callable reference left-hand side cannot be a type parameter");
592    
593            //Inline
594            MAP.put(INVISIBLE_MEMBER_FROM_INLINE, "Cannot access effectively non-public-api ''{0}'' member from effectively public-api ''{1}''", SHORT_NAMES_IN_TYPES, SHORT_NAMES_IN_TYPES);
595            MAP.put(NOT_YET_SUPPORTED_IN_INLINE, "''{0}'' construction not yet supported in inline functions", ELEMENT_TEXT, SHORT_NAMES_IN_TYPES);
596            MAP.put(DECLARATION_CANT_BE_INLINED, "Inline annotation could be present only on nonvirtual members (private or final)");
597            MAP.put(NOTHING_TO_INLINE, "Expected performance impact of inlining ''{0}'' can be insignificant. Inlining works best for functions with lambda parameters", SHORT_NAMES_IN_TYPES);
598            MAP.put(USAGE_IS_NOT_INLINABLE, "Illegal usage of inline-parameter ''{0}'' in ''{1}''. Annotate the parameter with [noinline]", ELEMENT_TEXT, SHORT_NAMES_IN_TYPES);
599            MAP.put(NULLABLE_INLINE_PARAMETER, "Inline-parameter ''{0}'' of ''{1}'' must not be nullable. Annotate the parameter with [noinline] or make not nullable", ELEMENT_TEXT, SHORT_NAMES_IN_TYPES);
600            MAP.put(RECURSION_IN_INLINE, "Inline-function ''{1}'' can't be recursive", ELEMENT_TEXT, SHORT_NAMES_IN_TYPES);
601            //Inline non Locals
602            MAP.put(NON_LOCAL_RETURN_NOT_ALLOWED, "Can''t inline ''{0}'' here: it may contain non-local returns. Annotate parameter declaration ''{0}'' with ''inlineOptions(ONLY_LOCAL_RETURN)''", ELEMENT_TEXT, SHORT_NAMES_IN_TYPES, SHORT_NAMES_IN_TYPES);
603    
604            MAP.setImmutable();
605    
606            for (Field field : Errors.class.getFields()) {
607                if (Modifier.isStatic(field.getModifiers())) {
608                    try {
609                        Object fieldValue = field.get(null);
610                        if (fieldValue instanceof DiagnosticFactory) {
611                            if (MAP.get((DiagnosticFactory<?>) fieldValue) == null) {
612                                throw new IllegalStateException("No default diagnostic renderer is provided for " + ((DiagnosticFactory<?>)fieldValue).getName());
613                            }
614                        }
615                    }
616                    catch (IllegalAccessException e) {
617                        throw new IllegalStateException(e);
618                    }
619                }
620            }
621    
622            resetMapsIfNeeded();
623        }
624    
625        private DefaultErrorMessages() {
626        }
627    }