KT-627 Drop Predicate expression

This commit is contained in:
Andrey Breslav
2012-02-27 12:57:55 +04:00
parent dd36efd24d
commit cefd9d5ca2
8 changed files with 26 additions and 55 deletions
@@ -138,7 +138,7 @@ public interface JetNodeTypes {
JetNodeType DOT_QUALIFIED_EXPRESSION = new JetNodeType("DOT_QUALIFIED_EXPRESSION", JetDotQualifiedExpression.class); JetNodeType DOT_QUALIFIED_EXPRESSION = new JetNodeType("DOT_QUALIFIED_EXPRESSION", JetDotQualifiedExpression.class);
JetNodeType HASH_QUALIFIED_EXPRESSION = new JetNodeType("HASH_QUALIFIED_EXPRESSION", JetHashQualifiedExpression.class); JetNodeType HASH_QUALIFIED_EXPRESSION = new JetNodeType("HASH_QUALIFIED_EXPRESSION", JetHashQualifiedExpression.class);
JetNodeType SAFE_ACCESS_EXPRESSION = new JetNodeType("SAFE_ACCESS_EXPRESSION", JetSafeQualifiedExpression.class); JetNodeType SAFE_ACCESS_EXPRESSION = new JetNodeType("SAFE_ACCESS_EXPRESSION", JetSafeQualifiedExpression.class);
JetNodeType PREDICATE_EXPRESSION = new JetNodeType("PREDICATE_EXPRESSION", JetPredicateExpression.class); // JetNodeType PREDICATE_EXPRESSION = new JetNodeType("PREDICATE_EXPRESSION", JetPredicateExpression.class);
JetNodeType OBJECT_LITERAL = new JetNodeType("OBJECT_LITERAL", JetObjectLiteralExpression.class); JetNodeType OBJECT_LITERAL = new JetNodeType("OBJECT_LITERAL", JetObjectLiteralExpression.class);
JetNodeType ROOT_NAMESPACE = new JetNodeType("ROOT_NAMESPACE", JetRootNamespaceExpression.class); JetNodeType ROOT_NAMESPACE = new JetNodeType("ROOT_NAMESPACE", JetRootNamespaceExpression.class);
@@ -385,13 +385,13 @@ public class JetExpressionParsing extends AbstractJetParsing {
expression.done(SAFE_ACCESS_EXPRESSION); expression.done(SAFE_ACCESS_EXPRESSION);
} }
else if (at(QUEST)) { // else if (at(QUEST)) {
advance(); // QUEST // advance(); // QUEST
//
parseCallExpression(); // parseCallExpression();
//
expression.done(PREDICATE_EXPRESSION); // expression.done(PREDICATE_EXPRESSION);
} // }
// else if (at(HASH)) { // else if (at(HASH)) {
// advance(); // HASH // advance(); // HASH
// //
@@ -7,7 +7,7 @@ fun test(s: String?) {
val <!UNUSED_VARIABLE!>d<!>: Int = s?.length ?: <!TYPE_MISMATCH!>"empty"<!> val <!UNUSED_VARIABLE!>d<!>: Int = s?.length ?: <!TYPE_MISMATCH!>"empty"<!>
val e: String = <!TYPE_MISMATCH!>s?.length<!> ?: "empty" val e: String = <!TYPE_MISMATCH!>s?.length<!> ?: "empty"
val <!UNUSED_VARIABLE!>f<!>: Int = s?.length ?: b ?: 1 val <!UNUSED_VARIABLE!>f<!>: Int = s?.length ?: b ?: 1
val <!UNUSED_VARIABLE!>g<!>: Int? = e? startsWith("s")?.length val <!UNUSED_VARIABLE!>g<!>: Boolean? = e.startsWith("s")//?.length
} }
fun String.startsWith(<!UNUSED_PARAMETER!>s<!>: String): Boolean = true fun String.startsWith(<!UNUSED_PARAMETER!>s<!>: String): Boolean = true
@@ -1,3 +0,0 @@
fun foo() {
a?f.foo
}
@@ -1,26 +0,0 @@
JetFile: PredicateExpression.jet
NAMESPACE_HEADER
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
DOT_QUALIFIED_EXPRESSION
PREDICATE_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(QUEST)('?')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('f')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
@@ -88,19 +88,19 @@ public class StdlibTest extends CodegenTestCase {
} }
//from NamespaceGenTest //from NamespaceGenTest
public void testPredicateOperator() throws Exception { // public void testPredicateOperator() throws Exception {
loadText("fun foo(s: String) = s?startsWith(\"J\")"); // loadText("fun foo(s: String) = s?startsWith(\"J\")");
final Method main = generateFunction(); // final Method main = generateFunction();
try { // try {
assertEquals("JetBrains", main.invoke(null, "JetBrains")); // assertEquals("JetBrains", main.invoke(null, "JetBrains"));
assertNull(main.invoke(null, "IntelliJ")); // assertNull(main.invoke(null, "IntelliJ"));
} catch (Throwable t) { // } catch (Throwable t) {
// System.out.println(generateToText()); //// System.out.println(generateToText());
t.printStackTrace(); // t.printStackTrace();
throw t instanceof Exception ? (Exception)t : new RuntimeException(t); // throw t instanceof Exception ? (Exception)t : new RuntimeException(t);
} // }
} // }
//
public void testForInString() throws Exception { public void testForInString() throws Exception {
loadText("fun foo() : Int { var sum = 0\n" + loadText("fun foo() : Int { var sum = 0\n" +
" for(c in \"239\")\n" + " for(c in \"239\")\n" +
@@ -460,9 +460,9 @@ public class JetTypeCheckerTest extends JetLiteFixture {
assertType("true && false", "Boolean"); assertType("true && false", "Boolean");
assertType("true || false", "Boolean"); assertType("true || false", "Boolean");
assertType("null ?: false", "Boolean"); assertType("null ?: false", "Boolean");
assertType("WithPredicate()?isValid()", "WithPredicate?"); // assertType("WithPredicate()?isValid()", "WithPredicate?");
assertType("WithPredicate()?isValid(1)", "WithPredicate?"); // assertType("WithPredicate()?isValid(1)", "WithPredicate?");
assertType("WithPredicate()?p", "WithPredicate?"); // assertType("WithPredicate()?p", "WithPredicate?");
} }
public void testSupertypes() throws Exception { public void testSupertypes() throws Exception {
@@ -7,7 +7,7 @@ fun test(s: String?) {
val <warning>d</warning>: Int = s?.length ?: <error>"empty"</error> val <warning>d</warning>: Int = s?.length ?: <error>"empty"</error>
val e: String = <error>s?.length</error> ?: "empty" val e: String = <error>s?.length</error> ?: "empty"
val <warning>f</warning>: Int = s?.length ?: b ?: 1 val <warning>f</warning>: Int = s?.length ?: b ?: 1
val <warning>g</warning>: Int? = e? startsWith("s")?.length val <warning>g</warning>: Boolean? = e.startsWith("s")//?.length
} }
fun String.startsWith(<warning>s</warning>: String): Boolean = true fun String.startsWith(<warning>s</warning>: String): Boolean = true