Fix exception when type parameters appear in object declaration

#KT-14536 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2017-03-10 14:39:48 +03:00
parent 0568bc3ef1
commit da53317357
14 changed files with 242 additions and 142 deletions
@@ -327,6 +327,7 @@ public interface Errors {
DiagnosticFactory1<KtObjectDeclaration, ClassDescriptor> LOCAL_OBJECT_NOT_ALLOWED = DiagnosticFactory1.create(ERROR, DECLARATION_NAME); DiagnosticFactory1<KtObjectDeclaration, ClassDescriptor> LOCAL_OBJECT_NOT_ALLOWED = DiagnosticFactory1.create(ERROR, DECLARATION_NAME);
DiagnosticFactory1<KtClass, ClassDescriptor> LOCAL_INTERFACE_NOT_ALLOWED = DiagnosticFactory1.create(ERROR, DECLARATION_NAME); DiagnosticFactory1<KtClass, ClassDescriptor> LOCAL_INTERFACE_NOT_ALLOWED = DiagnosticFactory1.create(ERROR, DECLARATION_NAME);
DiagnosticFactory0<KtTypeParameterList> TYPE_PARAMETERS_IN_OBJECT = DiagnosticFactory0.create(ERROR);
// Type parameter declarations // Type parameter declarations
@@ -23,7 +23,6 @@ import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly; import org.jetbrains.annotations.TestOnly;
import org.jetbrains.kotlin.config.LanguageFeature;
import org.jetbrains.kotlin.config.LanguageVersion; import org.jetbrains.kotlin.config.LanguageVersion;
import org.jetbrains.kotlin.diagnostics.Diagnostic; import org.jetbrains.kotlin.diagnostics.Diagnostic;
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory; import org.jetbrains.kotlin.diagnostics.DiagnosticFactory;
@@ -373,6 +372,7 @@ public class DefaultErrorMessages {
MAP.put(LOCAL_OBJECT_NOT_ALLOWED, "Named object ''{0}'' is a singleton and cannot be local. Try to use anonymous object instead", NAME); MAP.put(LOCAL_OBJECT_NOT_ALLOWED, "Named object ''{0}'' is a singleton and cannot be local. Try to use anonymous object instead", NAME);
MAP.put(LOCAL_INTERFACE_NOT_ALLOWED, "''{0}'' is an interface so it cannot be local. Try to use anonymous object or abstract class instead", NAME); MAP.put(LOCAL_INTERFACE_NOT_ALLOWED, "''{0}'' is an interface so it cannot be local. Try to use anonymous object or abstract class instead", NAME);
MAP.put(TYPE_PARAMETERS_IN_OBJECT, "Type parameters are not allowed for objects");
MAP.put(ENUM_CLASS_CONSTRUCTOR_CALL, "Enum types cannot be instantiated"); MAP.put(ENUM_CLASS_CONSTRUCTOR_CALL, "Enum types cannot be instantiated");
MAP.put(SEALED_CLASS_CONSTRUCTOR_CALL, "Sealed types cannot be instantiated"); MAP.put(SEALED_CLASS_CONSTRUCTOR_CALL, "Sealed types cannot be instantiated");
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2016 JetBrains s.r.o. * Copyright 2010-2017 JetBrains s.r.o.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -823,9 +823,7 @@ public class KotlinParsing extends AbstractKotlinParsing {
} }
} }
OptionalMarker typeParamsMarker = new OptionalMarker(object);
boolean typeParametersDeclared = parseTypeParameterList(TYPE_PARAMETER_GT_RECOVERY_SET); boolean typeParametersDeclared = parseTypeParameterList(TYPE_PARAMETER_GT_RECOVERY_SET);
typeParamsMarker.error("Type parameters are not allowed for objects");
PsiBuilder.Marker beforeConstructorModifiers = mark(); PsiBuilder.Marker beforeConstructorModifiers = mark();
PsiBuilder.Marker primaryConstructorMarker = mark(); PsiBuilder.Marker primaryConstructorMarker = mark();
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2015 JetBrains s.r.o. * Copyright 2010-2017 JetBrains s.r.o.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -35,7 +35,7 @@ public class KtObjectInfo extends KtClassOrObjectInfo<KtObjectDeclaration> {
@Nullable @Nullable
@Override @Override
public KtTypeParameterList getTypeParameterList() { public KtTypeParameterList getTypeParameterList() {
return null; return element.getTypeParameterList();
} }
@NotNull @NotNull
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2016 JetBrains s.r.o. * Copyright 2010-2017 JetBrains s.r.o.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -68,8 +68,7 @@ import java.util.List;
import static kotlin.collections.CollectionsKt.firstOrNull; import static kotlin.collections.CollectionsKt.firstOrNull;
import static org.jetbrains.kotlin.descriptors.Visibilities.PUBLIC; import static org.jetbrains.kotlin.descriptors.Visibilities.PUBLIC;
import static org.jetbrains.kotlin.diagnostics.Errors.CYCLIC_INHERITANCE_HIERARCHY; import static org.jetbrains.kotlin.diagnostics.Errors.*;
import static org.jetbrains.kotlin.diagnostics.Errors.TYPE_PARAMETERS_IN_ENUM;
import static org.jetbrains.kotlin.resolve.BindingContext.TYPE; import static org.jetbrains.kotlin.resolve.BindingContext.TYPE;
import static org.jetbrains.kotlin.resolve.ModifiersChecker.*; import static org.jetbrains.kotlin.resolve.ModifiersChecker.*;
@@ -270,6 +269,9 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
if (classInfo.getClassKind() == ClassKind.ENUM_CLASS) { if (classInfo.getClassKind() == ClassKind.ENUM_CLASS) {
c.getTrace().report(TYPE_PARAMETERS_IN_ENUM.on(typeParameterList)); c.getTrace().report(TYPE_PARAMETERS_IN_ENUM.on(typeParameterList));
} }
if (classInfo.getClassKind() == ClassKind.OBJECT) {
c.getTrace().report(TYPE_PARAMETERS_IN_OBJECT.on(typeParameterList));
}
List<KtTypeParameter> typeParameters = typeParameterList.getParameters(); List<KtTypeParameter> typeParameters = typeParameterList.getParameters();
if (typeParameters.isEmpty()) return Collections.emptyList(); if (typeParameters.isEmpty()) return Collections.emptyList();
@@ -0,0 +1,21 @@
object A<!TYPE_PARAMETERS_IN_OBJECT!><T><!>
object B<!TYPE_PARAMETERS_IN_OBJECT!><in T, out R><!>
object C<!TYPE_PARAMETERS_IN_OBJECT!><T : Comparable<T>><!>
class D {
companion object<!TYPE_PARAMETERS_IN_OBJECT!><T><!>
}
class E {
companion object<!TYPE_PARAMETERS_IN_OBJECT!><in T, out R><!>
}
class F {
companion object C<!TYPE_PARAMETERS_IN_OBJECT!><T : Comparable<T>><!>
}
class G {
companion object F<!TYPE_PARAMETERS_IN_OBJECT!><T><!>
}
object H<!TYPE_PARAMETERS_IN_OBJECT!><T, R><!><!CONSTRUCTOR_IN_OBJECT!>()<!>
@@ -0,0 +1,85 @@
package
public object A</*0*/ T> {
private constructor A</*0*/ T>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public object B</*0*/ in T, /*1*/ out R> {
private constructor B</*0*/ in T, /*1*/ out R>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public object C</*0*/ T : kotlin.Comparable<T>> {
private constructor C</*0*/ T : kotlin.Comparable<T>>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class D {
public constructor D()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion</*0*/ T> {
private constructor Companion</*0*/ T>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final class E {
public constructor E()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion</*0*/ in T, /*1*/ out R> {
private constructor Companion</*0*/ in T, /*1*/ out R>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final class F {
public constructor F()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object C</*0*/ T : kotlin.Comparable<T>> {
private constructor C</*0*/ T : kotlin.Comparable<T>>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final class G {
public constructor G()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object F</*0*/ T> {
private constructor F</*0*/ T>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public object H</*0*/ T, /*1*/ R> {
private constructor H</*0*/ T, /*1*/ R>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -7,16 +7,15 @@ JetFile: Everything.kt
PsiElement(object)('object') PsiElement(object)('object')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Foo') PsiElement(IDENTIFIER)('Foo')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PRIMARY_CONSTRUCTOR PRIMARY_CONSTRUCTOR
MODIFIER_LIST MODIFIER_LIST
@@ -7,16 +7,15 @@ JetFile: TypeParametersAndParentheses.kt
PsiElement(object)('object') PsiElement(object)('object')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Foo') PsiElement(IDENTIFIER)('Foo')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PRIMARY_CONSTRUCTOR PRIMARY_CONSTRUCTOR
VALUE_PARAMETER_LIST VALUE_PARAMETER_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
@@ -26,16 +25,15 @@ JetFile: TypeParametersAndParentheses.kt
PsiElement(object)('object') PsiElement(object)('object')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Foo') PsiElement(IDENTIFIER)('Foo')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PRIMARY_CONSTRUCTOR PRIMARY_CONSTRUCTOR
VALUE_PARAMETER_LIST VALUE_PARAMETER_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
@@ -57,16 +55,15 @@ JetFile: TypeParametersAndParentheses.kt
PsiElement(object)('object') PsiElement(object)('object')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Foo') PsiElement(IDENTIFIER)('Foo')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PRIMARY_CONSTRUCTOR PRIMARY_CONSTRUCTOR
VALUE_PARAMETER_LIST VALUE_PARAMETER_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
@@ -7,31 +7,29 @@ JetFile: TypeParameterss.kt
PsiElement(object)('object') PsiElement(object)('object')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Foo') PsiElement(IDENTIFIER)('Foo')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PsiWhiteSpace('\n\n') PsiWhiteSpace('\n\n')
OBJECT_DECLARATION OBJECT_DECLARATION
PsiElement(object)('object') PsiElement(object)('object')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Foo') PsiElement(IDENTIFIER)('Foo')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
CLASS_BODY CLASS_BODY
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
@@ -41,16 +39,15 @@ JetFile: TypeParameterss.kt
PsiElement(object)('object') PsiElement(object)('object')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Foo') PsiElement(IDENTIFIER)('Foo')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(COLON)(':') PsiElement(COLON)(':')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -13,16 +13,15 @@ JetFile: Everything.kt
OBJECT_LITERAL OBJECT_LITERAL
OBJECT_DECLARATION OBJECT_DECLARATION
PsiElement(object)('object') PsiElement(object)('object')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PRIMARY_CONSTRUCTOR PRIMARY_CONSTRUCTOR
MODIFIER_LIST MODIFIER_LIST
@@ -81,4 +80,4 @@ JetFile: Everything.kt
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
@@ -13,16 +13,15 @@ JetFile: TypeParametersAndParentheses.kt
OBJECT_LITERAL OBJECT_LITERAL
OBJECT_DECLARATION OBJECT_DECLARATION
PsiElement(object)('object') PsiElement(object)('object')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PRIMARY_CONSTRUCTOR PRIMARY_CONSTRUCTOR
VALUE_PARAMETER_LIST VALUE_PARAMETER_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
@@ -50,16 +49,15 @@ JetFile: TypeParametersAndParentheses.kt
OBJECT_LITERAL OBJECT_LITERAL
OBJECT_DECLARATION OBJECT_DECLARATION
PsiElement(object)('object') PsiElement(object)('object')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PRIMARY_CONSTRUCTOR PRIMARY_CONSTRUCTOR
VALUE_PARAMETER_LIST VALUE_PARAMETER_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
@@ -89,20 +87,19 @@ JetFile: TypeParametersAndParentheses.kt
OBJECT_LITERAL OBJECT_LITERAL
OBJECT_DECLARATION OBJECT_DECLARATION
PsiElement(object)('object') PsiElement(object)('object')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PRIMARY_CONSTRUCTOR PRIMARY_CONSTRUCTOR
VALUE_PARAMETER_LIST VALUE_PARAMETER_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
CLASS_BODY CLASS_BODY
PsiErrorElement:Expecting a class body PsiErrorElement:Expecting a class body
<empty list> <empty list>
@@ -13,16 +13,15 @@ JetFile: TypeParameterss.kt
OBJECT_LITERAL OBJECT_LITERAL
OBJECT_DECLARATION OBJECT_DECLARATION
PsiElement(object)('object') PsiElement(object)('object')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
CLASS_BODY CLASS_BODY
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
@@ -38,16 +37,15 @@ JetFile: TypeParameterss.kt
OBJECT_LITERAL OBJECT_LITERAL
OBJECT_DECLARATION OBJECT_DECLARATION
PsiElement(object)('object') PsiElement(object)('object')
PsiErrorElement:Type parameters are not allowed for objects TYPE_PARAMETER_LIST
TYPE_PARAMETER_LIST PsiElement(LT)('<')
PsiElement(LT)('<') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T') PsiElement(COMMA)(',')
PsiElement(COMMA)(',') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') TYPE_PARAMETER
TYPE_PARAMETER PsiElement(IDENTIFIER)('R')
PsiElement(IDENTIFIER)('R') PsiElement(GT)('>')
PsiElement(GT)('>')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(COLON)(':') PsiElement(COLON)(':')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -97,4 +95,4 @@ JetFile: TypeParameterss.kt
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
CLASS_BODY CLASS_BODY
PsiErrorElement:Expecting a class body PsiErrorElement:Expecting a class body
<empty list> <empty list>
@@ -3324,6 +3324,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/classObjects/resolveFunctionInsideClassObject.kt"); String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/classObjects/resolveFunctionInsideClassObject.kt");
doTest(fileName); doTest(fileName);
} }
@TestMetadata("typeParametersInObject.kt")
public void testTypeParametersInObject() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/classObjects/typeParametersInObject.kt");
doTest(fileName);
}
} }
@TestMetadata("compiler/testData/diagnostics/tests/constructorConsistency") @TestMetadata("compiler/testData/diagnostics/tests/constructorConsistency")