From 5989fb2bc36a2ef20e25a48911967446c78b8106 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 24 May 2011 22:31:21 +0400 Subject: [PATCH] JET-47 Require a ':' in object literals --- grammar/src/expressions.grm | 2 +- .../jet/lang/parsing/JetExpressionParsing.java | 4 +++- idea/testData/psi/SimpleClassMembers.jet | 12 ++++++------ idea/testData/psi/SimpleClassMembers.txt | 12 ++++++++++++ idea/testData/psi/SimpleExpressions.jet | 2 +- idea/testData/psi/SimpleExpressions.txt | 2 ++ idea/testData/psi/examples/AnonymousObjects.jet | 2 +- idea/testData/psi/examples/AnonymousObjects.txt | 2 ++ idea/testData/psi/examples/BinaryTree.jet | 2 +- idea/testData/psi/examples/BinaryTree.txt | 2 ++ idea/testData/psi/examples/Builder.jet | 2 +- idea/testData/psi/examples/Builder.txt | 2 ++ .../psi/examples/PolymorphicClassObjects.jet | 2 +- .../psi/examples/PolymorphicClassObjects.txt | 2 ++ idea/testData/psi/examples/collections/ArrayList.jet | 2 +- idea/testData/psi/examples/collections/ArrayList.txt | 2 ++ idea/testData/psi/examples/collections/List.jet | 2 +- idea/testData/psi/examples/collections/List.txt | 2 ++ 18 files changed, 43 insertions(+), 15 deletions(-) diff --git a/grammar/src/expressions.grm b/grammar/src/expressions.grm index f77625fb414..3b6bfb9d038 100644 --- a/grammar/src/expressions.grm +++ b/grammar/src/expressions.grm @@ -238,7 +238,7 @@ arrayAccess ; objectLiteral - : "object" delegationSpecifier{","}? classBody // Cannot make class body optional: foo(object F, a) + : "object" ":" delegationSpecifier{","}? classBody // Cannot make class body optional: foo(object F, a) ; /* Factory methods: diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index e8233d1f041..9fa7a6a3919 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -1591,7 +1591,7 @@ public class JetExpressionParsing extends AbstractJetParsing { /* * objectLiteral - * : "object" delegationSpecifier{","}? classBody // Cannot make class body optional: foo(object F, a) + * : "object" ":" delegationSpecifier{","}? classBody // Cannot make class body optional: foo(object F, a) * ; */ public void parseObjectLiteral() { @@ -1605,6 +1605,8 @@ public class JetExpressionParsing extends AbstractJetParsing { myJetParsing.parseClassBody(); } else { + expect(COLON, "Expecting ':'", TokenSet.create(IDENTIFIER, NAMESPACE_KEYWORD)); + myJetParsing.parseDelegationSpecifierList(); if (at(LBRACE)) { myJetParsing.parseClassBody(); diff --git a/idea/testData/psi/SimpleClassMembers.jet b/idea/testData/psi/SimpleClassMembers.jet index 59ed6a8ae48..0aa33e631a7 100644 --- a/idea/testData/psi/SimpleClassMembers.jet +++ b/idea/testData/psi/SimpleClassMembers.jet @@ -28,15 +28,15 @@ class foo { } - private class object Fooo { + private class object : Fooo { } - private class object Fooo, Bar by foo { + private class object : Fooo, Bar by foo { } - private class object Fooo, Bar by foo, Goo() + private class object : Fooo, Bar by foo, Goo() } class Bar {} @@ -74,15 +74,15 @@ class foo { } - private class object Fooo { + private class object : Fooo { } - private class object Fooo, Bar by foo { + private class object : Fooo, Bar by foo { } - private class object Fooo, Bar by foo, Goo() + private class object : Fooo, Bar by foo, Goo() } diff --git a/idea/testData/psi/SimpleClassMembers.txt b/idea/testData/psi/SimpleClassMembers.txt index 348258ca22c..464a2c892d3 100644 --- a/idea/testData/psi/SimpleClassMembers.txt +++ b/idea/testData/psi/SimpleClassMembers.txt @@ -202,6 +202,8 @@ JetFile: SimpleClassMembers.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CLASS TYPE_REFERENCE @@ -223,6 +225,8 @@ JetFile: SimpleClassMembers.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CLASS TYPE_REFERENCE @@ -256,6 +260,8 @@ JetFile: SimpleClassMembers.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CLASS TYPE_REFERENCE @@ -553,6 +559,8 @@ JetFile: SimpleClassMembers.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CLASS TYPE_REFERENCE @@ -574,6 +582,8 @@ JetFile: SimpleClassMembers.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CLASS TYPE_REFERENCE @@ -607,6 +617,8 @@ JetFile: SimpleClassMembers.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CLASS TYPE_REFERENCE diff --git a/idea/testData/psi/SimpleExpressions.jet b/idea/testData/psi/SimpleExpressions.jet index 8f0898dc334..29ab4bc1ace 100644 --- a/idea/testData/psi/SimpleExpressions.jet +++ b/idea/testData/psi/SimpleExpressions.jet @@ -23,7 +23,7 @@ fun a( a : foo = new Foo(bar), a : foo = new Foo(), a : foo = new Foo(), - a : foo = object Foo{}, + a : foo = object : Foo{}, a : foo = throw new Foo(), a : foo = return 10, a : foo = break, diff --git a/idea/testData/psi/SimpleExpressions.txt b/idea/testData/psi/SimpleExpressions.txt index e49f6e8fc81..97f525a2ff6 100644 --- a/idea/testData/psi/SimpleExpressions.txt +++ b/idea/testData/psi/SimpleExpressions.txt @@ -485,6 +485,8 @@ JetFile: SimpleExpressions.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CLASS TYPE_REFERENCE diff --git a/idea/testData/psi/examples/AnonymousObjects.jet b/idea/testData/psi/examples/AnonymousObjects.jet index 5d99bf59dae..2242c4f2c0f 100644 --- a/idea/testData/psi/examples/AnonymousObjects.jet +++ b/idea/testData/psi/examples/AnonymousObjects.jet @@ -1,6 +1,6 @@ fun foo() { -addMouseListener(object MouseAdapter() { +addMouseListener(object : MouseAdapter() { private var clickCount = 0; diff --git a/idea/testData/psi/examples/AnonymousObjects.txt b/idea/testData/psi/examples/AnonymousObjects.txt index 9cd62feeeec..0aa0f9587d6 100644 --- a/idea/testData/psi/examples/AnonymousObjects.txt +++ b/idea/testData/psi/examples/AnonymousObjects.txt @@ -20,6 +20,8 @@ JetFile: AnonymousObjects.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CALL TYPE_REFERENCE diff --git a/idea/testData/psi/examples/BinaryTree.jet b/idea/testData/psi/examples/BinaryTree.jet index 6576f4dcb11..25a5bb1d230 100644 --- a/idea/testData/psi/examples/BinaryTree.jet +++ b/idea/testData/psi/examples/BinaryTree.jet @@ -129,7 +129,7 @@ class BinaryTree : IMutableSet { override fun iterator() : IIterator = mutableIterator() - override fun mutableIterator() : IMutableIterator = object IMutableIterator { + override fun mutableIterator() : IMutableIterator = object : IMutableIterator { val version = BinaryTree.this.version val down = Stack() val up = Stack() diff --git a/idea/testData/psi/examples/BinaryTree.txt b/idea/testData/psi/examples/BinaryTree.txt index 9b6eab8d8b4..a550a3bfef3 100644 --- a/idea/testData/psi/examples/BinaryTree.txt +++ b/idea/testData/psi/examples/BinaryTree.txt @@ -1872,6 +1872,8 @@ JetFile: BinaryTree.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CLASS TYPE_REFERENCE diff --git a/idea/testData/psi/examples/Builder.jet b/idea/testData/psi/examples/Builder.jet index addd01cd65d..cc7eb034f58 100644 --- a/idea/testData/psi/examples/Builder.jet +++ b/idea/testData/psi/examples/Builder.jet @@ -1,4 +1,4 @@ -val foo = object AntBuilder() { +val foo = object : AntBuilder() { [lazy] val groovy = library { classpath("$libs/groovy-...") diff --git a/idea/testData/psi/examples/Builder.txt b/idea/testData/psi/examples/Builder.txt index 0dd1be90a5c..8b4971fbc8d 100644 --- a/idea/testData/psi/examples/Builder.txt +++ b/idea/testData/psi/examples/Builder.txt @@ -11,6 +11,8 @@ JetFile: Builder.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CALL TYPE_REFERENCE diff --git a/idea/testData/psi/examples/PolymorphicClassObjects.jet b/idea/testData/psi/examples/PolymorphicClassObjects.jet index 86fcb9ade5b..9e05a3ac741 100644 --- a/idea/testData/psi/examples/PolymorphicClassObjects.jet +++ b/idea/testData/psi/examples/PolymorphicClassObjects.jet @@ -9,7 +9,7 @@ virtual class Buildable { class List { - class object Buildable { + class object : Buildable { override fun newBuilder() : Builder } diff --git a/idea/testData/psi/examples/PolymorphicClassObjects.txt b/idea/testData/psi/examples/PolymorphicClassObjects.txt index 94892ef2007..af916c0e519 100644 --- a/idea/testData/psi/examples/PolymorphicClassObjects.txt +++ b/idea/testData/psi/examples/PolymorphicClassObjects.txt @@ -137,6 +137,8 @@ JetFile: PolymorphicClassObjects.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CLASS TYPE_REFERENCE diff --git a/idea/testData/psi/examples/collections/ArrayList.jet b/idea/testData/psi/examples/collections/ArrayList.jet index 2f076052068..b199971098d 100644 --- a/idea/testData/psi/examples/collections/ArrayList.jet +++ b/idea/testData/psi/examples/collections/ArrayList.jet @@ -5,7 +5,7 @@ class ArrayList : IMutableList { override fun iterator() : IIterator = mutableIterator() - override fun mutableIterator() : IMutableIterator = object IMutableIterator() { // T is inferred + override fun mutableIterator() : IMutableIterator = object : IMutableIterator() { // T is inferred private val index = 0 private var myVersion = version diff --git a/idea/testData/psi/examples/collections/ArrayList.txt b/idea/testData/psi/examples/collections/ArrayList.txt index 34d628715aa..eb757b554b7 100644 --- a/idea/testData/psi/examples/collections/ArrayList.txt +++ b/idea/testData/psi/examples/collections/ArrayList.txt @@ -142,6 +142,8 @@ JetFile: ArrayList.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CALL TYPE_REFERENCE diff --git a/idea/testData/psi/examples/collections/List.jet b/idea/testData/psi/examples/collections/List.jet index 490da9ae039..b5b6583ff27 100644 --- a/idea/testData/psi/examples/collections/List.jet +++ b/idea/testData/psi/examples/collections/List.jet @@ -11,7 +11,7 @@ enum class List(theSize : Int) : IList { get() = this == Nil - override fun iterator() = object IIterator() { + override fun iterator() = object : IIterator() { private var current = List.this override val hasNext diff --git a/idea/testData/psi/examples/collections/List.txt b/idea/testData/psi/examples/collections/List.txt index 88bffdc19c6..970e2fbc219 100644 --- a/idea/testData/psi/examples/collections/List.txt +++ b/idea/testData/psi/examples/collections/List.txt @@ -226,6 +226,8 @@ JetFile: List.jet OBJECT_LITERAL PsiElement(object)('object') PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') DELEGATION_SPECIFIER_LIST DELEGATOR_SUPER_CALL TYPE_REFERENCE