First take on method references

This commit is contained in:
Roman Shevchenko
2012-06-01 22:09:48 +04:00
parent 68851cbe31
commit 95534a1d3c
17 changed files with 546 additions and 112 deletions
@@ -0,0 +1,26 @@
/*
* Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class C {
interface Simplest {
void m();
}
void simplest() { }
void test() {
<error descr="Incompatible types. Found: 'null', required: 'C.Simplest'">Simplest simplest = this::simplest;</error>
}
}
@@ -0,0 +1,20 @@
PsiJavaFile:MethodRef0.java
PsiMethodReferenceExpression:a.b.C::m
PsiReferenceExpression:a.b.C
PsiReferenceExpression:a.b
PsiReferenceExpression:a
PsiReferenceParameterList
<empty list>
PsiIdentifier:a('a')
PsiJavaToken:DOT('.')
PsiReferenceParameterList
<empty list>
PsiIdentifier:b('b')
PsiJavaToken:DOT('.')
PsiReferenceParameterList
<empty list>
PsiIdentifier:C('C')
PsiJavaToken:DOUBLE_COLON('::')
PsiReferenceParameterList
<empty list>
PsiIdentifier:m('m')
@@ -0,0 +1,27 @@
PsiJavaFile:MethodRef1.java
PsiMethodReferenceExpression:a.b.C<T>::new
PsiTypeElement:a.b.C<T>
PsiJavaCodeReferenceElement:a.b.C<T>
PsiJavaCodeReferenceElement:a.b
PsiJavaCodeReferenceElement:a
PsiIdentifier:a('a')
PsiReferenceParameterList
<empty list>
PsiJavaToken:DOT('.')
PsiIdentifier:b('b')
PsiReferenceParameterList
<empty list>
PsiJavaToken:DOT('.')
PsiIdentifier:C('C')
PsiReferenceParameterList
PsiJavaToken:LT('<')
PsiTypeElement:T
PsiJavaCodeReferenceElement:T
PsiIdentifier:T('T')
PsiReferenceParameterList
<empty list>
PsiJavaToken:GT('>')
PsiJavaToken:DOUBLE_COLON('::')
PsiReferenceParameterList
<empty list>
PsiKeyword:new('new')
@@ -0,0 +1,16 @@
PsiJavaFile:MethodRef2.java
PsiMethodReferenceExpression:C::<T>m
PsiReferenceExpression:C
PsiReferenceParameterList
<empty list>
PsiIdentifier:C('C')
PsiJavaToken:DOUBLE_COLON('::')
PsiReferenceParameterList
PsiJavaToken:LT('<')
PsiTypeElement:T
PsiJavaCodeReferenceElement:T
PsiIdentifier:T('T')
PsiReferenceParameterList
<empty list>
PsiJavaToken:GT('>')
PsiIdentifier:m('m')
@@ -0,0 +1,17 @@
PsiJavaFile:MethodRef3.java
PsiMethodReferenceExpression:a[i]::m
PsiArrayAccessExpression:a[i]
PsiReferenceExpression:a
PsiReferenceParameterList
<empty list>
PsiIdentifier:a('a')
PsiJavaToken:LBRACKET('[')
PsiReferenceExpression:i
PsiReferenceParameterList
<empty list>
PsiIdentifier:i('i')
PsiJavaToken:RBRACKET(']')
PsiJavaToken:DOUBLE_COLON('::')
PsiReferenceParameterList
<empty list>
PsiIdentifier:m('m')
@@ -0,0 +1,11 @@
PsiJavaFile:MethodRef4.java
PsiMethodReferenceExpression:int[]::clone
PsiTypeElement:int[]
PsiTypeElement:int
PsiKeyword:int('int')
PsiJavaToken:LBRACKET('[')
PsiJavaToken:RBRACKET(']')
PsiJavaToken:DOUBLE_COLON('::')
PsiReferenceParameterList
<empty list>
PsiIdentifier:clone('clone')
@@ -0,0 +1,55 @@
PsiJavaFile:MethodRef5.java
PsiMethodReferenceExpression:(f ? list.map(String::length) : Collections.emptyList())::iterator
PsiParenthesizedExpression:(f ? list.map(String::length) : Collections.emptyList())
PsiJavaToken:LPARENTH('(')
PsiConditionalExpression:f ? list.map(String::length) : Collections.emptyList()
PsiReferenceExpression:f
PsiReferenceParameterList
<empty list>
PsiIdentifier:f('f')
PsiWhiteSpace(' ')
PsiJavaToken:QUEST('?')
PsiWhiteSpace(' ')
PsiMethodCallExpression:list.map(String::length)
PsiReferenceExpression:list.map
PsiReferenceExpression:list
PsiReferenceParameterList
<empty list>
PsiIdentifier:list('list')
PsiJavaToken:DOT('.')
PsiReferenceParameterList
<empty list>
PsiIdentifier:map('map')
PsiExpressionList
PsiJavaToken:LPARENTH('(')
PsiMethodReferenceExpression:String::length
PsiReferenceExpression:String
PsiReferenceParameterList
<empty list>
PsiIdentifier:String('String')
PsiJavaToken:DOUBLE_COLON('::')
PsiReferenceParameterList
<empty list>
PsiIdentifier:length('length')
PsiJavaToken:RPARENTH(')')
PsiWhiteSpace(' ')
PsiJavaToken:COLON(':')
PsiWhiteSpace(' ')
PsiMethodCallExpression:Collections.emptyList()
PsiReferenceExpression:Collections.emptyList
PsiReferenceExpression:Collections
PsiReferenceParameterList
<empty list>
PsiIdentifier:Collections('Collections')
PsiJavaToken:DOT('.')
PsiReferenceParameterList
<empty list>
PsiIdentifier:emptyList('emptyList')
PsiExpressionList
PsiJavaToken:LPARENTH('(')
PsiJavaToken:RPARENTH(')')
PsiJavaToken:RPARENTH(')')
PsiJavaToken:DOUBLE_COLON('::')
PsiReferenceParameterList
<empty list>
PsiIdentifier:iterator('iterator')
@@ -0,0 +1,11 @@
PsiJavaFile:PrimitiveFieldAccess.java
PsiReferenceExpression:int.x
PsiClassObjectAccessExpression:int
PsiTypeElement:int
PsiKeyword:int('int')
PsiErrorElement:.class expected
<empty list>
PsiJavaToken:DOT('.')
PsiReferenceParameterList
<empty list>
PsiIdentifier:x('x')