Remove "This" keyword

This commit is contained in:
Andrey Breslav
2015-10-16 20:04:37 +03:00
parent aca355acdc
commit 8544a5ab5f
18 changed files with 495 additions and 717 deletions
@@ -1,4 +1,4 @@
/* The following code was generated by JFlex 1.4.3 on 11/27/15 4:10 PM */
/* The following code was generated by JFlex 1.4.3 on 11/27/15 4:27 PM */
package org.jetbrains.kotlin.kdoc.lexer;
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag;
/**
* This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3
* on 11/27/15 4:10 PM from the specification file
* on 11/27/15 4:27 PM from the specification file
* <tt>/Users/abreslav/work/kotlin/compiler/frontend/src/org/jetbrains/kotlin/kdoc/lexer/KDoc.flex</tt>
*/
class _KDocLexer implements FlexLexer {
@@ -251,7 +251,6 @@ LONG_TEMPLATE_ENTRY_START=\$\{
"this" { return KtTokens.THIS_KEYWORD ;}
"null" { return KtTokens.NULL_KEYWORD ;}
"else" { return KtTokens.ELSE_KEYWORD ;}
"This" { return KtTokens.CAPITALIZED_THIS_KEYWORD ;}
"try" { return KtTokens.TRY_KEYWORD ;}
"val" { return KtTokens.VAL_KEYWORD ;}
"var" { return KtTokens.VAR_KEYWORD ;}
@@ -76,9 +76,6 @@ public interface KtTokens {
KtKeywordToken DO_KEYWORD = KtKeywordToken.keyword("do");
KtKeywordToken WHEN_KEYWORD = KtKeywordToken.keyword("when");
KtKeywordToken INTERFACE_KEYWORD = KtKeywordToken.keyword("interface");
// TODO: Discuss "This" keyword
KtKeywordToken CAPITALIZED_THIS_KEYWORD = KtKeywordToken.keyword("This");
KtToken AS_SAFE = KtKeywordToken.keyword("AS_SAFE");//new KtToken("as?");
@@ -191,7 +188,7 @@ public interface KtTokens {
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD,
ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, TRY_KEYWORD, WHEN_KEYWORD,
NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD, AS_SAFE
NOT_IN, NOT_IS, AS_SAFE
);
TokenSet SOFT_KEYWORDS = TokenSet.create(FILE_KEYWORD, IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
File diff suppressed because it is too large Load Diff
@@ -56,7 +56,7 @@ public class KotlinParsing extends AbstractKotlinParsing {
private static final TokenSet PARAMETER_NAME_RECOVERY_SET = TokenSet.create(COLON, EQ, COMMA, RPAR);
private static final TokenSet PACKAGE_NAME_RECOVERY_SET = TokenSet.create(DOT, EOL_OR_SEMICOLON);
private static final TokenSet IMPORT_RECOVERY_SET = TokenSet.create(AS_KEYWORD, DOT, EOL_OR_SEMICOLON);
/*package*/ static final TokenSet TYPE_REF_FIRST = TokenSet.create(LBRACKET, IDENTIFIER, LPAR, CAPITALIZED_THIS_KEYWORD, HASH, DYNAMIC_KEYWORD);
/*package*/ static final TokenSet TYPE_REF_FIRST = TokenSet.create(LBRACKET, IDENTIFIER, LPAR, HASH, DYNAMIC_KEYWORD);
private static final TokenSet RECEIVER_TYPE_TERMINATORS = TokenSet.create(DOT, SAFE_ACCESS);
private static final TokenSet VALUE_PARAMETER_FIRST =
TokenSet.orSet(TokenSet.create(IDENTIFIER, LBRACKET, VAL_KEYWORD, VAR_KEYWORD), MODIFIER_KEYWORDS);
@@ -1867,9 +1867,6 @@ public class KotlinParsing extends AbstractKotlinParsing {
}
}
else if (at(CAPITALIZED_THIS_KEYWORD)) {
parseSelfType();
}
else {
errorWithRecovery("Type expected",
TokenSet.orSet(TOP_LEVEL_DECLARATION_FIRST,
@@ -2021,19 +2018,6 @@ public class KotlinParsing extends AbstractKotlinParsing {
}
}
/*
* selfType
* : "This"
* ;
*/
private void parseSelfType() {
assert _at(CAPITALIZED_THIS_KEYWORD);
PsiBuilder.Marker type = mark();
advance(); // CAPITALIZED_THIS_KEYWORD
type.done(SELF_TYPE);
}
/*
* (optionalProjection type){","}
*/
@@ -1,8 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun foo(f: <!UNSUPPORTED!>This<!>) {}
interface C<T: C<<!UNSUPPORTED!>This<!>>> {
val x: <!UNSUPPORTED!>This<!>
val y: <!UNSUPPORTED!>This<!>?
}
@@ -1,11 +0,0 @@
package
public fun foo(/*0*/ f: [ERROR : This]): kotlin.Unit
public interface C</*0*/ T : C<[ERROR : This]>> {
public abstract val x: [ERROR : This]
public abstract val y: [ERROR : This]?
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
}
-6
View File
@@ -1,6 +0,0 @@
class Foo<T : List<This>>(a : This, b : bar<This>) : List<This> by foo as List<This> {
fun foo(a : This) : This {
val a : This = Foo<This>();
}
}
-155
View File
@@ -1,155 +0,0 @@
JetFile: ThisType.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
CLASS
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Foo')
TYPE_PARAMETER_LIST
PsiElement(LT)('<')
TYPE_PARAMETER
PsiElement(IDENTIFIER)('T')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('List')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
PsiElement(GT)('>')
PsiElement(GT)('>')
PRIMARY_CONSTRUCTOR
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('b')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
PsiElement(GT)('>')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
DELEGATION_SPECIFIER_LIST
DELEGATOR_BY
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('List')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
PsiElement(GT)('>')
PsiWhiteSpace(' ')
PsiElement(by)('by')
PsiWhiteSpace(' ')
BINARY_WITH_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace(' ')
OPERATION_REFERENCE
PsiElement(as)('as')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('List')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
PsiElement(GT)('>')
PsiWhiteSpace(' ')
CLASS_BODY
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
PsiElement(GT)('>')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
+12 -8
View File
@@ -536,8 +536,9 @@ JetFile: BitArith.kt
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('This')
PsiElement(GT)('>')
PsiWhiteSpace(' ')
CLASS_BODY
@@ -576,15 +577,17 @@ JetFile: BitArith.kt
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('This')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('This')
PsiWhiteSpace('\n\n ')
FUN
MODIFIER_LIST
@@ -615,8 +618,9 @@ JetFile: BitArith.kt
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('This')
PsiWhiteSpace('\n ')
PsiComment(EOL_COMMENT)('// ...')
PsiWhiteSpace('\n')
@@ -577,12 +577,6 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("SelfTypesUnsupported.kt")
public void testSelfTypesUnsupported() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/SelfTypesUnsupported.kt");
doTest(fileName);
}
@TestMetadata("Serializable.kt")
public void testSerializable() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/Serializable.kt");
@@ -703,12 +703,6 @@ public class ParsingTestGenerated extends AbstractParsingTest {
doParsingTest(fileName);
}
@TestMetadata("ThisType.kt")
public void testThisType() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/psi/ThisType.kt");
doParsingTest(fileName);
}
@TestMetadata("TraitConstructor.kt")
public void testTraitConstructor() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/psi/TraitConstructor.kt");
@@ -51,7 +51,6 @@ public class KeywordStringsGenerated {
"while",
"do",
"when",
"interface",
"This"
"interface"
));
}
@@ -44,8 +44,7 @@ import org.jetbrains.kotlin.resolve.ModifierCheckerCore
open class KeywordLookupObject
object KeywordCompletion {
private val NON_ACTUAL_KEYWORDS = setOf(CAPITALIZED_THIS_KEYWORD,
TYPE_ALIAS_KEYWORD)
private val NON_ACTUAL_KEYWORDS = setOf(TYPE_ALIAS_KEYWORD)
private val ALL_KEYWORDS = (KEYWORDS.getTypes() + SOFT_KEYWORDS.getTypes())
.filter { it !in NON_ACTUAL_KEYWORDS }
.map { it as KtKeywordToken }
+1 -1
View File
@@ -1,2 +1,2 @@
//statement
int as, type, val, var, fun, is, in, object, when, This;
int as, type, val, var, fun, is, in, object, when;
+1 -2
View File
@@ -6,5 +6,4 @@ val `fun`: Int
val `is`: Int
val `in`: Int
val `object`: Int
val `when`: Int
val `This`: Int
val `when`: Int
@@ -1,6 +1,6 @@
//file
package test;
import as.type.val.var.fun.is.in.object.when.This;
import as.type.val.var.fun.is.in.object.when;
class Test {}
@@ -1,6 +1,6 @@
// ERROR: Unresolved reference: `as`
package test
import `as`.type.`val`.`var`.`fun`.`is`.`in`.`object`.`when`.`This`
import `as`.type.`val`.`var`.`fun`.`is`.`in`.`object`.`when`
internal class Test